vim autocmd在变更线上?
每当一行被修改时,我都会尝试运行一个函数,但似乎没有一个特定的自动命令。我可以在CursorMoved上运行该函数,但它会减慢编辑速度。我还可以映射所有主要编辑动作的功能,但它可能会变得非常混乱,因为我试图使每一行独立于其他行。如果没有解决方案,我可以每隔几秒钟做一次diff,看看发生了什么变化,并在变化的行上运行函数,但这也是一个混乱的解决方案vim autocmd在变更线上?,vim,Vim,每当一行被修改时,我都会尝试运行一个函数,但似乎没有一个特定的自动命令。我可以在CursorMoved上运行该函数,但它会减慢编辑速度。我还可以映射所有主要编辑动作的功能,但它可能会变得非常混乱,因为我试图使每一行独立于其他行。如果没有解决方案,我可以每隔几秒钟做一次diff,看看发生了什么变化,并在变化的行上运行函数,但这也是一个混乱的解决方案 有什么想法吗?你可以通过BufWritePre活动做类似的事情。有一个定义行和标记的主文件,然后在从属文件中引用它们的主文件,如: Foo.vim大师
有什么想法吗?你可以通过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";
顺便说一句,这对你的精神来说是一件可怕的事情P
如果您可以获得Vim 7.4,请查看。(请注意,这将监视整个缓冲区中的更改。)
您是否查看了InsertLeave
事件?它应该比CursorMoved
低性能密集度。您到底想要实现什么?使用特定用例提问(并且更容易回答)比只询问技术细节而不询问背景信息要好。是的,我已经通读了:h autocmd events。InsertLeave只在这一点上起作用,而不是在正常模式下进行任何更改、替换等。为了解释我正在尝试做什么——基本上,我试图通过一个系统来组织我的笔记,其中每行末尾都有一个参考号,这样我就可以在不同的地方多次使用同一行,在不同的标题/折叠下,每次我编辑行/折叠时,它都会“同步”其他行/折叠。这是一种廉价的数据库,没有复杂度,编辑纯文本的速度快。你自己说的!您希望在(功能强大的)文本编辑器中实现数据库。坏主意。说真的,我会重新考虑我的方法。您可以使用&modified
,但似乎没有合适的自动命令事件@无论如何,英戈卡卡特可能是对的。
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