Як я можу використовувати vim для перегляду git diffs у Windows?


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's less.exe, як пейджер git, так що він працює, коли я роблю git diff, але я стикаюся з проблемами.

Я намагався використовувати VIM less.bat пакетний файл

Якщо я встановлюю %GIT_PAGER% до %VIMDIR%\macros\less.bat і виконайте a 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 diffs у Windows? Як ви це робите?

Дякуємо за будь-яку допомогу.



Ця стаття стосується використання з git difftool, але я хочу використовувати його з git diff. git difftool корисна, але коли я її використовую, я, як правило, використовую kdiff3. Те, що я хочу зробити зараз, це замінити використовуваним пейджером git diff.
Micah R Ledbetter

Так, чому саме Ви хочете використовувати Vim, а не менше?
romainl

1
Спробуйте git diff --no-color або шукайте vimpager, але я не знаю, якщо це працює на вікнах.
FDinoff

1
Гарне питання! У вас є опис проблеми, що ви пробували, що не працювало, коли ви пробували, чому альтернативні рішення не працюватимуть, і навіть включали скріншоти для ясності. І ви чітко позначили, де щось спекуляція з вашого боку. +1 для всього цього!
Ben

Відповіді:


5

Залишається проблема git diff як і раніше висвітлює висновок diff з кольорами (як послідовності вилучень ANSI), і очікує, що пейджер (тобто Vim) відобразить це правильно. Але Vim має власне підсвічування синтаксису (також для diffs) і не розуміє послідовності, тому вони відображаються як непривабливі. ^[[m. У вас є два варіанти:

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

  2. Зробити Vim зрозумілими і виділити послідовності ANSI; Додаток AnsiEsc.vim це може зробити.

Я рекомендую перший підхід.


Ах, що має сенс тепер, коли ти це говориш! Дякую! (Для запису, я зробила вашу пропозицію і вибрала перший підхід.)
Micah R Ledbetter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.