Просмотр всех `git diffs` с vimdiff

210

Я настроил git diffобертку в vimdiff, используя в качестве руководства « Git Diff with Vimdiff », и он работает, как и ожидалось, если не будет много файлов с изменениями.

Когда есть несколько файлов с изменениями, и я запускаю git diff, он открывает первый файл, и после выхода из первого экземпляра vimdiff мне выдается следующее сообщение:

external diff died, stopping at filename

Это совершенно другое поведение, чем я привык. В прошлом у меня была похожая настройка с SVN, и, когда я сравнивал несколько файлов, я просматривал первый файл, затем записывал и выходил из него, :wqи открывался следующий файл с различиями.

Это не относится к Git. Я пытался :n[ext], но при этом не заполняет левое окно исходным файлом, чтобы его можно было сравнить с измененной версией.

chuckg
источник

Ответы:

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

Ввод текста git dприводит к ожидаемому поведению, вводя :wqв vim циклы до следующего файла в наборе изменений.

chuckg
источник
22
Просто мои два цента: я dfпсевдоним diffи dtпсевдоним difftool. Кроме того, ввод :qaVim будет циклически переходить к следующему набору изменений без сохранения чего-либо.
JC Yamokoski
2
Это отличное решение, за исключением того, что при сохранении изменений вы должны набрать ": w!" вместо: w
Asenar
2
@jonyamo Настройка псевдонима всегда должна основываться на том, как часто мы используем некоторые команды. Я часто использую, git diffчем git difftool. Таким образом, я получил псевдоним d'diff' и 'dt' to difftool '. Удобство в использовании имеет значение, чем создание псевдонимов с шаблоном.
Habeeb Perwad
Как заставить "git diff" использовать vimdiff ?, этот ответ заставляет меня использовать псевдоним. Если я псевдоним "diff" не работает.
Ромб
6
@Asenar "Это отличное решение, за исключением того, что при сохранении изменений нужно вводить :w!вместо :w". Это потому что git звонит vimdiffс -Rопцией. Вы можете изменить это с git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"'. Это откроет vimdiff в режиме записи.
Висбуки
103

Вы можете попробовать git difftool, он предназначен для этого.

Во-первых, вам нужно настроить diff для vimdiff.

git config diff.tool vimdiff

Затем, когда вы хотите diff, просто используйте git difftoolвместо git diff. Это будет работать, как вы ожидаете.

czchen
источник
1
Почти готово! Модифицированный немного, это именно то, что я ищу. +1 хотя!
Чак
1
Недавно был обновлен vimdiff mergetool: git.kernel.org/?p=git/… (и несколько других коммитов , но это самый большой коммит). Не уверен, когда выйдет следующий релиз, но если вы хотите использовать git.git, обновления будут вашими!
Каскабель
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
Вы отвечаете за mergetool, а не difftool. Но это все еще полезный ответ. +1.
dotancohen
@dotancohen Действительно спасибо. Я никогда не замечал, что теперь по глупой ошибке могу редактировать свой ответ.
Наньхэ Кумар
1
@NanheKumar, @dotancohen, заменяя mergeс diffв приведенных выше ответов будет делать трюк, то есть git config --global diff.tool vimdiff .
Будет
2

Для людей, которые хотят использовать другой инструмент сравнения, не указанный в git, скажем, с nvim. вот что я в итоге использовал:

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

В моем случае, я поставил <tool name>в nvim -dи вызвать команду дифф с

git d <file>
солено-сома
источник