Jak mogę wyświetlić wiele różnic Gita obok siebie w Vimie

Chciałbym móc uruchomić polecenie, które otwiera Git diff w Vimie, z zakładką dla każdego pliku w zestawie diff.

Więc jeśli na przykład zmieniłem pliki foo.txt i bar.txt w moim drzewie roboczym i uruchomiłem polecenie, aby zobaczyć vim otwarty z dwoma zakładkami. Pierwsza zakładka zawierałaby różnice między foo.txt w moim drzewie roboczym i foo.txt w repozytorium, a druga zakładka zawierałaby różnicowanie obok siebie dla paska.txt.

Ktoś ma jakieś pomysły?

Author: Pete Hodgson, 2010-03-11

4 answers

Tak bym to zrobił (choć nie jest to pojedyncze polecenie)

  1. Otwieranie plików ze zmianami w nowych zakładkach vim:

    Vim-p $(git diff --name-only)

  2. Dla każdego bufora Pobierz diff do bieżącej głowy za pomocą vcscommand vim plugin

    : VCSVimDiff

To daje ładny widok na różnicę, choć nie w formie patcha.

Za cokolwiek innego bym się trzymał git diff.

EDIT

Tak jak Dave pisze poniżej, kroki 1 i 2 można łączyć za pomocą

vim -p $(git diff --name-only) -c "tabdo VCSVimDiff"
 7
Author: Benjamin Bannier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-12 01:23:05

adaptacja powyższej odpowiedzi Benjamina Bannera + Dave 'a Kirby' ego dla użytkowników.

Ponieważ używam fugitive.vim, dostosowałem powyższe do mojego najczęstszego przypadku użycia, patrząc na różnice między ostatnimi 2 commitami:
vim -p $(git diff --name-only HEAD~1 HEAD) -c "tabdo :Gdiff HEAD~1"

Ładowanie wszystkich zmian do kart jest o wiele lepsze niż przeglądanie ich sekwencyjnie za pomocą git difftool.

 3
Author: Kurt MacDonald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-23 21:47:54

Chociaż nie robi dokładnie tego, co chcesz, git difftool jest prawdopodobnie najlepszym rozwiązaniem. Out of the box zachowanie 'Git difftool --tool=vimdiff --no-prompt HEAD' jest uruchamianie vimdiff sekwencyjnie dla każdego pliku w katalogu roboczym ze zmianami.

 1
Author: William Pursell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-12 13:37:42

Ten prosty plugin zadziałał dla mnie: TabMultiDiff . Zasadniczo tworzy kartę diff dla każdej pary plików przekazywanych do Vima. Nazwa karty pochodzi od drugiego pliku z każdej pary.

Uwaga nie jest kompatybilny z plugin manager , więc musisz ręcznie zainstalować go kopiując tab-multi-diff.vim do .vim/plugin.

Oto zrzut ekranu porównujący dwie pary prostych plików (aaa/AAB i AAC / aad). Zauważ, że używam również vim-scripts / diffchar.vim dlatego indywidualne znaki są podświetlone. Tutaj wpisz opis obrazka

 0
Author: studgeek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:51:57