每当更改一行时,我都会尝试运行一个函数,但似乎没有特定的自动命令。我可以在 CursorMoved 上运行该功能,但它会减慢编辑速度。我还可以为所有主要编辑动作映射该功能,但它可能会变得非常混乱,因为我试图保持每一行独立于其他行。如果没有解决方案,我可能每隔几秒钟做一次 diff 以查看发生了什么变化并在更改的行上运行该函数,但这又是一个混乱的解决方案。
有任何想法吗?
每当更改一行时,我都会尝试运行一个函数,但似乎没有特定的自动命令。我可以在 CursorMoved 上运行该功能,但它会减慢编辑速度。我还可以为所有主要编辑动作映射该功能,但它可能会变得非常混乱,因为我试图保持每一行独立于其他行。如果没有解决方案,我可能每隔几秒钟做一次 diff 以查看发生了什么变化并在更改的行上运行该函数,但这又是一个混乱的解决方案。
有任何想法吗?
如果您可以获得 Vim 7.4,请查看TextChanged
(and TextChangedI
, for insert mode) events。(请注意,这将监控整个缓冲区的变化。)
你可以用 BufWritePre 事件来做这样的事情。有一个主文件来定义你的行和标记,然后在从属文件中,引用它们的主文件,例如:
大师-Foo.vim:
let b:Dom_slaves = ['/foo/bar/slave.cpp', '...', ...]
let b:Dom_map = {
\ 10 : "do your laundry",
\ 20 : "prepare your lunch"
\ }
从属.cpp
/* Dom_master = master-Foo.vim */
...
cout << "I will gladly /* Dom-id:10 */ and /* Dom-id:20 */.\n";
支配.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