Я хочу использовать 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
. У вас есть два варианта:
Отключите подсветку различий Git (аргумент командной строки
--no-color
, но вы также можете отключить ее черезgit config
). Теперь вам нужно убедиться, что Vim использует правильный тип файла (:set filetype=diff
; вы можете передать его в командной строке через-c {cmd}
).Заставьте Vim понимать и выделять escape-последовательности ANSI;Плагин AnsiEsc.vimможет это сделать.
Я бы рекомендовал первый подход.