vim でのライブ diff モード編集

vim でのライブ diff モード編集

ファイルを編集中に、差分をライブで表示したい。2 vimdiffつのファイル間の差分を強調表示するなど、必要な操作を実行できる。

しかし、それに伴う 2 つの欠点がvimdiff私を妨げています。

まず、比較できるように同じファイルを個別にバッファリングすることができません。この問題は簡単に回避できます。編集中のファイルの一時コピーを作成することによって同じファイルを個別にバッファリングする次のシェル スクリプト ( と呼びます)diffがあります。diffvimvimdiff

#!/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

関連情報