Ich möchte vim verwenden, um die Ausgabe von anzuzeigen git diff
.
Ich verwende Windows 8 und habe Vim 7.4 installiert. Der Einfachheit halber habe ich eine Umgebungsvariable VIMDIR erstellt, die auf das Installationsverzeichnis von Vim ( set VIMDIR=C:\Program Files (x86)\Vim\vim74
) eingestellt ist, und dieses Verzeichnis zu %PATH% hinzugefügt.
Vim wird mit einem %VIMDIR%\macros\less.bat
Skript geliefert, das als Pager verwendet werden kann, sodass die Ausgabe in einem vim-basierten Pager angezeigt less.bat file.txt
wird dir | less.bat
. Ich verwende dies regelmäßig und es funktioniert gut. Ich würde auch gerne vim anstelle von Gits less.exe als Git-Pager verwenden, damit es ausgeführt wird, wenn ich es tue git diff
, aber ich stoße auf Probleme.
Ich habe versucht, less.bat
die Batchdatei von vim zu verwenden
Wenn ich %GIT_PAGER%
auf setze %VIMDIR%\macros\less.bat
und ein ausführe git diff
, erhalte ich eine Fehlermeldung:
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'
Ich glaube, das liegt daran, dass Git ein MSYS-Programm ist und daher keine C:\whatever
Pfade im Windows-Stil verarbeiten kann.
Ich habe auch versucht, das Less-Makro von vim direkt aufzurufen
Das funktioniert also nicht. Als nächstes habe ich versucht, diese Datei zu untersuchen less.bat
und %GIT_PAGER%
etwas basierend darauf einzustellen. In dieser Datei sehe ich diese Zeile, die vim anweist, von stdin zu lesen:
vim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -
Ich habe %GIT_PAGER%
eine modifizierte Version davon verwendet, die Pfade im MSYS-Stil verwendet:
set GIT_PAGER="/c/Program Files (x86)/Vim/vim74/vim.exe" --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -
Damit wird vim erfolgreich gestartet! Aber es gibt immer noch ein Problem: Farben funktionieren nicht und der ganze Bildschirm ist mit Escape-Zeichen übersät. Beachten Sie, dass die Syntaxhervorhebung normalerweise einwandfrei funktioniert. Wenn ich diese Befehle ausführe, wird die von mir mit Farbe generierte Diff-Datei angezeigt:
git diff > test.diff
less.bat test.diff
Wenn ich es jedoch einfach aufrufe und mir den Diff in der Konsole anzeigen git diff
lasse , wird mir Folgendes angezeigt:%GIT_PAGER%
Was kann ich sonst noch versuchen?
Ich bin nicht sicher, was ich sonst noch versuchen soll. Benutzt sonst noch jemand vim, um Git-Diffs unter Windows anzuzeigen? Wie machst du das?
Vielen Dank für jede Hilfe.
Antwort1
Das verbleibende Problem ist, dass git diff
die Diff-Ausgabe immer noch farblich hervorgehoben wird (als ANSI-Escape-Sequenzen) und erwartet wird, dass der Pager (also Vim) dies korrekt anzeigt. Aber Vim hat seine eigene Syntaxhervorhebung (auch für Diffs) und versteht die Sequenzen nicht, sodass sie als hässlich angezeigt werden ^[[m
. Sie haben zwei Möglichkeiten:
Deaktivieren Sie die Diff-Hervorhebung von Git (Befehlszeilenargument
--no-color
, Sie können dies aber auch über dekonfigurierengit config
). Jetzt müssen Sie sicherstellen, dass Vim den richtigen Dateityp verwendet (:set filetype=diff
; Sie können dies über auf der Befehlszeile übergeben-c {cmd}
).Bringen Sie Vim bei, die ANSI-Escape-Sequenzen zu verstehen und hervorzuheben.AnsiEsc.vim-Pluginkann dies tun.
Ich würde den ersten Ansatz empfehlen.