6

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

Я также пытался напрямую вызывать меньше макросов 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% чтобы отобразить diff для меня в консоли, это показывает мне это:

Скриншот

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

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

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

1 ответ1

5

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .