vimで変更箇所を強調する

vimで変更箇所を強調するプラグインとしてはchanged.vimがあります。ないとやっていられないほど便利なのですが、Changedコマンドが実行されるたびにマーク欄が開閉して非常にうっとおしいです。後ちょっと重い。これをなんとか改善出来ないかと考えました。

結論から言うと、常に何かのマークを表示させておくしかないようです。折り畳み欄がfoldcolumnの設定で常に表示可能であるのに対し、マーク欄には該当する設定がなく、しかも実際にファイルがないとマーク出来ないようです。なのでファイルを開くと自動で行頭にダミーマークが表示されるように設定しました。

" " ダミーサインでsign欄が開閉するのを防ぐ
sign define DEFAULT_SIGN
function! s:Default_Sign()
    if filereadable(expand("%:p"))
        execute 'sign place 1234568797 line=1 name=DEFAULT_SIGN buffer=' . bufnr('%')
    endif
endfunction
augroup changed_vim
    autocmd!
    autocmd BufRead * call <SID>Default_Sign()
augroup END

これで少なくともマーク欄が開閉することはなくなりました。

折角なのでChanged.vim自体ももう少し軽くならないでしょうか?今はvimprocというvimで非同期実行が可能な便利プラグインがあります。これで非同期に出来る部分を探してみました。ファイル削除部分が単純に置き換え可能だったのでフォークして書き換えます。
フォークしたもの(https://github.com/kyouryuukunn/vim-changed/)

これだけでもかなり軽くなりました。もうちょっと動作が軽快になるといいのですが、きりがないのでこのあたりでやめにします。

vim8.0から非同期実行機能が本体に組み込まれたので、これを使って更に高速化してみました。変更の度に表示を更新していても十分実用的な速度になったと思います。


コメントを残す

メールアドレスが公開されることはありません。