vimでリアルタイムdiffモードを編集する

vimでリアルタイムdiffモードを編集する

ファイルを編集しながらリアルタイムで違いを確認したいと思います。 vimdiff2つのファイルの違いを強調するなど、私が望むことをすることができます。

vimdiffしかし、私を妨げる2つの欠点があります。

まず、比較のために同じファイルを独立してバッファリングすることはできません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次に進みます。入れるモード、同時にキーを押すか、1行jまたはG内容全体を削除するなどの操作を実行します。ただし、ファイルを開いて最初にキーを押すと、Escコマンドは正常に機能します。

何が問題なのかご存知ですか?解決策はありますか?

ベストアンサー1

vimdocを見た後autocmd、私が望むことを正確に行うソリューションを見つけたようです。

autocmd CursorMoved,CursorMovedI * diffupdate

ご提案いただいたIngo様に心から感謝します!

おすすめ記事