我試圖運行一個函數,每當一條線被改變,但似乎並沒有一個特定的自動命令。我可以在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