vimdiffですべての `git diffs`を表示する


209

git diffGit Diff with Vimdiff」をガイドとして使用してvimdiffにラップするように設定しましたが、変更されたファイルが多数ない限り、期待どおりに機能します。

変更された複数のファイルがあり、を実行git diffすると、最初のファイルが開き、vimdiffの最初のインスタンスを終了すると、次のメッセージが表示されます。

external diff died, stopping at filename

これは、私が慣れているのとはまったく異なる動作です。私は過去にSVNで同様の設定をしていたため、複数のファイルと比較する場合、最初のファイルを確認してから書き込みを終了し:wq、使用をやめると、次の相違点のあるファイルが開きます。

これはGitには当てはまりません。を試しました:n[ext]が、変更しても左側のウィンドウが元のファイルで埋められないため、変更後のバージョンと比較できます。

回答:


337
git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool

入力git dすると期待どおりの動作が得られ、:wqvim で入力すると、チェンジセットの次のファイルに循環します。


22
ちょうど私の2セント:私はにdfエイリアスされdiff、にdtエイリアスされていdifftoolます。また、:qaVimを入力すると、何も保存せずに次のチェンジセットに循環します。
JCヤモコスキ

2
このソリューションは素晴らしいですが、変更を保存するときに「:w!」と入力する必要があります。:wの代わりに
Asenar 2013

2
@jonyamoエイリアスの設定は、常にいくつかのコマンドを使用する頻度に基づいている必要があります。git diffよりよく使っていgit difftoolます。そのdため、「diff」と'dt' to 「difftool」のエイリアスを設定しています。パターンでエイリアスを作成するよりも、使いやすさが重要です。
Habeeb Perwad 2014年

「git diff」でvimdiffを使用する方法 「diff」のエイリアスが機能しない場合。
Rombus 2016年

6
@Asenar 「変更を保存するとき:w!に、代わりに入力する必要があることを除いて、このソリューションは素晴らしい:wです。」これは、gitがオプションを指定vimdiffして呼び出すため-Rです。で上書きできますgit config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"'。これはvimdiffを書き込み可能モードで開きます。
wisbucky

103

あなたは試すことができますgit difftool、それはこのようなことをするように設計されています。

まず、vimdiffにdiffツールを設定する必要があります

git config diff.tool vimdiff

次に、比較する場合は、のgit difftool代わりに使用しますgit diff。期待どおりに動作します。


1
あと少しです!少し変更しましたが、まさに私が探しているものです。+1!
チャック

1
vimdiff mergetoolが最近更新されました:git.kernel.org/?p=git / (そして他のいくつかのコミットですが、それが最大のものです)。次のメンテナンスリリースがいつになるかはわかりませんが、git.gitからビルドするつもりであれば、アップグレードはあなたのものです。
Cascabel

21
Git accepts kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
and opendiff as valid diff tools. You can also set up a custom tool. 

git config --global diff.tool vimdiff
git config --global diff.tool kdiff3
git config --global diff.tool meld
git config --global diff.tool xxdiff
git config --global diff.tool emerge
git config --global diff.tool gvimdiff
git config --global diff.tool ecmerge

3
答えは、difftoolではなく、mergetoolです。しかし、それはまだ有用な答えです。+1。
dotancohen 2013

@dotancohen本当にありがとうばかげた間違いで今は自分の答えを編集できることに気づかなかった。
Nanhe Kumar 2013

1
@NanheKumarは、@dotancohen、交換するmergediff上記の回答では、トリックを行いますすなわち git config --global diff.tool vimdiff
2013

2

gitにリストされていない別のdiffツールを使用したい場合は、と言いnvimます。これが私が最終的に使用したものです:

git config --global alias.d difftool -x <tool name>

私の場合、に設定<tool name>nvim -dてdiffコマンドを呼び出します

git d <file>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.