
ファイルを編集中に、差分をライブで表示したい。2 vimdiff
つのファイル間の差分を強調表示するなど、必要な操作を実行できる。
しかし、それに伴う 2 つの欠点がvimdiff
私を妨げています。
まず、比較できるように同じファイルを個別にバッファリングすることができません。この問題は簡単に回避できます。編集中のファイルの一時コピーを作成することによって同じファイルを個別にバッファリングする次のシェル スクリプト ( と呼びます)diff
があります。diffvim
vimdiff
#!/bin/sh
# Differentially Viming
TMPDIR=/tmp/diffvim
FILENM=$1
FILEBN=$(basename $FILENM)
if [ ! -d "$TMPDIR" ]; then
mkdir $TMPDIR
fi
cp $FILENM $TMPDIR/$FILEBN && vimdiff $FILENM $TMPDIR/$FILEBN
の2つ目の欠点はvimdiff
、非相違同じファイルの2つのコピーのうちの1つの部分では、diff
差異の再計算はトリガーされません。 を呼び出して手動で行う必要があります:diffupdate
。 この再計算を自動化したいです。 比較的便利な方法は、 を終了するときにトリガーすることです。入れるモードに入り、普通モード。これも、ファイルに次のマッピングを追加することで簡単に実行できます.vimrc
。
inoremap <Esc> <Esc>:diffu<CR>
しかし、まだ完璧な解決策ではありません。普通モードに入ることなく、入れるモードでは、編集が完了した後も再計算は自動的に実行されません。そこで、.vimrc
ファイルに別のマッピングを追加します。
nnoremap <Esc> :diffu<CR>
しかし、今回は奇妙なことが起こります。編集のためにファイルを開くと、いくつかの標準キーバインディングが機能しなくなります。たとえば、キーh
またはl
(つまり、ファイルを開いた後に最初に実行するコマンドのいずれか)を押すと、入れるモード、while キー、行jまたはGコンテンツ全体の削除などです。ただし、ファイルを開いた後、Esc最初にキーを押すと、これらのコマンドは正常に機能します。
何が問題なのか分かりますか? 回避策はありますか?
答え1
vimdoc で調べた結果autocmd
、まさに私が望んでいたことを実現する解決策を見つけたと思います。
autocmd CursorMoved,CursorMovedI * diffupdate
提案してくれたIngoに感謝します!
答え2
<Esc>
特殊キーのいくつかのキーコードでも使用され、端末への印刷の役割を果たします。
特にあなたが行ったような侵入的な操作で、これをオーバーロードするのはよくありません。別のキー (例: ) を使用する<Leader><Leader>
か、イベントのトリガーを定義します。
:autocmd InsertEnter,InsertLeave * diffupdate