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

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

Я хочу использовать 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, а не less.exe Git, как пейджер git, чтобы он запускался, когда я это делаю git diff, но у меня возникают проблемы.

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

Если я устанавливаю %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, а это значит, что она не может обрабатывать C:\whateverпути в стиле Windows.

Я также пробовал напрямую вызывать макрос less из 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! Но проблема все еще есть: цвета не работают, и по всему экрану разбросаны escape-символы. Обратите внимание, что обычно подсветка синтаксиса работает нормально. Если я запущу эти команды, он отобразит файл diff, который я сгенерировал с помощью цвета:

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

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

Скриншот

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

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

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

решение1

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

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

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

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

Связанный контент