3

行が変更されるたびに関数を実行しようとしていますが、これに対する特定の自動コマンドはないようです。CursorMoved で関数を実行できましたが、編集が遅くなります。すべての主要な編集動作の機能をマッピングすることもできますが、各行を他の行から独立させようとしているため、非常に面倒になる可能性があります。解決策がない場合は、数秒ごとに diff を実行して何が変更されたかを確認し、変更された行で関数を実行することもできますが、これも厄介な解決策です。

何か案は?

4

2 に答える 2

3

Vim 7.4 を入手できる場合は、TextChanged(およびTextChangedI、挿入モードの場合) events を参照してください。(これにより、バッファ全体の変更が監視されることに注意してください。)

于 2014-01-31T17:42:34.550 に答える
0

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";

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

于 2013-01-30T04:53:25.120 に答える