2013-01-22 72 views
3

我试图运行一个函数,每当一条线被改变,但似乎并没有一个特定的自动命令。我可以在CursorMoved上运行该函数,但会减慢编辑速度。我也可以为所有主要的编辑动作映射函数,但它可能会变得非常混乱,因为我试图保持每一行独立于其他行。如果没有解决方案,我可能会每隔几秒做一次差异来查看发生了什么变化,并在变化的线路上运行该功能,但这又是一个混乱的解决方案。vim autocmd更改行?

任何想法?

+1

你看了看'InsertLeave'事件吗?它应该比'CursorMoved'少性能密集。 –

+1

你想要达到什么目的?用特定的用例询问(并且更容易回答)比仅仅询问没有背景信息的技术细节更好。 –

+0

是的,我读过:h autocmd-events。 InsertLeave只适用于此,而不是在正常模式下进行的任何更改,替换等。为了解释我正在尝试做的事情---基本上,我试图通过一个系统来组织笔记记录,其中每个人在最后一行中有一个参考号,所以我可以在不同的地方多次使用同一行,在不同的标题/折叠下,每次我编辑行/折叠时,它都会“同步”其他行。它是一种廉价的数据库,没有复杂性,而且编辑纯文本的速度很快。 – kknight

回答

0

你可以用BufWritePre事件做这样的事情。有一个主文件,它定义你的线条和令牌,然后在从文件中,他们的主人的参考,如:

主Foo.vim:

let b:Dom_slaves = ['/foo/bar/slave.cpp', '...', ...] 
let b:Dom_map = { 
       \ 10 : "do your laundry", 
       \ 20 : "prepare your lunch" 
       \ } 

slave.cpp

/* Dom_master = master-Foo.vim */ 
... 
cout << "I will gladly /* Dom-id:10 */ and /* Dom-id:20 */.\n"; 

Dominate.vim

let MSMap = {} 
autocmd BufWritePre * call s:Dominate() 

function! s:Dominate() 
    " if current buffer's Dom_slaves and Dom_map defined 
     " read & update all slaves with Dom_map mappings 
    " else see if 'Dom_master = somefile' appears in the buffer 
     " update mapped values from cache or read master file, cache and update 
    " endif 
endfunction 

顺便说一下,这对你的vim来说是一件可怕的事情。 :P