Просмотр всех `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], но при этом не заполняет левое окно исходным файлом, чтобы его можно было сравнить с измененной версией.

Ответы:


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

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


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. Это будет работать, как вы ожидаете.


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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.