我试图运行一个函数,每当一条线被改变,但似乎并没有一个特定的自动命令。我可以在CursorMoved上运行该函数,但会减慢编辑速度。我也可以为所有主要的编辑动作映射函数,但它可能会变得非常混乱,因为我试图保持每一行独立于其他行。如果没有解决方案,我可能会每隔几秒做一次差异来查看发生了什么变化,并在变化的线路上运行该功能,但这又是一个混乱的解决方案。vim autocmd更改行?
任何想法?
我试图运行一个函数,每当一条线被改变,但似乎并没有一个特定的自动命令。我可以在CursorMoved上运行该函数,但会减慢编辑速度。我也可以为所有主要的编辑动作映射函数,但它可能会变得非常混乱,因为我试图保持每一行独立于其他行。如果没有解决方案,我可能会每隔几秒做一次差异来查看发生了什么变化,并在变化的线路上运行该功能,但这又是一个混乱的解决方案。vim autocmd更改行?
任何想法?
你可以用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
如果你能得到Vim 7.4,看看TextChanged
(and TextChangedI
, for insert mode) events。 (请注意,这将监视整个缓冲区中的更改。)
你看了看'InsertLeave'事件吗?它应该比'CursorMoved'少性能密集。 –
你想要达到什么目的?用特定的用例询问(并且更容易回答)比仅仅询问没有背景信息的技术细节更好。 –
是的,我读过:h autocmd-events。 InsertLeave只适用于此,而不是在正常模式下进行的任何更改,替换等。为了解释我正在尝试做的事情---基本上,我试图通过一个系统来组织笔记记录,其中每个人在最后一行中有一个参考号,所以我可以在不同的地方多次使用同一行,在不同的标题/折叠下,每次我编辑行/折叠时,它都会“同步”其他行。它是一种廉价的数据库,没有复杂性,而且编辑纯文本的速度很快。 – kknight