2013-01-22 68 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