Вопрос Как я могу использовать vim для просмотра git diff на Windows?


Я хочу использовать vim для просмотра результатов git diff,

Я запускаю Windows 8, и у меня установлен vim 7.4. Для удобства я создал переменную окружения VIMDIR, установленную в установочный каталог Vim (set VIMDIR=C:\Program Files (x86)\Vim\vim74), и добавили этот каталог в% PATH%.

Vim поставляется с %VIMDIR%\macros\less.bat скрипт, который можно использовать в качестве пейджера, так что less.bat file.txt или dir | less.bat будет отображать вывод в пейджере на основе vim. Я использую это регулярно, и он отлично работает. Я также хотел бы использовать vim, а не Git's less.exe, как пейджер git, так что он работает, когда я это делаю git diff, но у меня проблемы.

Я пробовал использовать vim's less.bat командный файл

Если я установил %GIT_PAGER% в %VIMDIR%\macros\less.bat и сделать git diff, Появляется сообщение об ошибке:

C:\Program Files (x86)\Vim\vim74\macros\less.bat: -c: line 0: syntax error near unexpected token `('
C:\Program Files (x86)\Vim\vim74\macros\less.bat: -c: line 0: `C:\Program Files (x86)\Vim\vim74\macros\less.bat'

Я считаю, что это потому, что git - это программа MSYS, то есть она не может обрабатывать стиль Windows C:\whatever пути.

Я также пытался использовать макрос vim менее

Так что это не сработает. Следующее, что я попробовал, - это изучить less.bat и установить %GIT_PAGER% к чему-то, основанному на этом файле. В этом файле я вижу эту строку, которая указывает vim читать из stdin:

vim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -

Я установил %GIT_PAGER% к модифицированной версии этого, которая использует пути в стиле MSYS:

set GIT_PAGER="/c/Program Files (x86)/Vim/vim74/vim.exe" --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -

Это успешно запускает vim! Но проблема все еще не решена: цвета не работают, и на экране появляются муравьиные символы. Обратите внимание: обычно подсветка синтаксиса работает нормально. Если я запустил эти команды, он отобразит файл diff, который я сгенерировал с цветом:

git diff > test.diff
less.bat test.diff

Однако, если я просто позвоню git diff и использовать его %GIT_PAGER% для отображения diff для меня в консоли, это показывает мне следующее:

screenshot

Что еще я могу попробовать?

Я не уверен, что еще попробовать. Кто-нибудь еще использует vim для просмотра git diff на Windows? Как вы это делаете?

Спасибо за любую помощь.


6
2017-07-10 17:22


происхождения


Эта статья была написана для вас, - romainl
Эта статья посвящена использованию с git difftool, но я хочу использовать его с git diff, git difftool полезно, но когда я его использую, я склонен использовать kdiff3. То, что я хочу сделать прямо сейчас, - это заменить пейджер, используемый git diff, - Micah R Ledbetter
О, хорошо, почему именно вы хотите использовать Vim, а не меньше? - romainl
Пытаться git diff --no-color или искать vimpager, но я не знаю, работает ли это на окнах. - FDinoff
Хороший вопрос! У вас есть описание проблемы, что вы пробовали, что не получилось, когда вы его попробовали, почему альтернативные решения не будут работать и даже содержат скриншоты для ясности. И вы четко обозначили, где что-то спекулирует с вашей стороны. +1 за все это! - Ben


ответы:


Оставшаяся проблема заключается в том, что git diff по-прежнему выделяет выходной сигнал разности цветов (как escape-последовательности ANSI) и ожидает, что пейджер (т. е. Vim) отобразит это правильно. Но у Vim есть свое выделение синтаксиса (также для различий), и он не понимает последовательности, поэтому они появляются как уродливые ^[[m, У вас есть два варианта:

  1. Отключить выделение различий Git (аргумент командной строки --no-color, но вы также можете git config). Теперь вам нужно убедиться, что Vim использует правильный тип файла (:set filetype=diff; вы можете передать это в командной строке через -c {cmd}).

  2. Сделайте Vim понятным и выделите escape-последовательности ANSI; Плагин AnsiEsc.vim может это сделать.

Я бы рекомендовал первый подход.


5
2017-07-11 07:08



Ahh, это имеет смысл теперь, когда вы это говорите! Спасибо! (Для записи я в конечном итоге принял ваше предложение и выбрал первый подход.) - Micah R Ledbetter