我想用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
,但我遇到了問題。
我嘗試過使用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宏
所以那是行不通的。我嘗試的下一件事是檢查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%
在控制台中顯示差異,它會向我顯示以下內容:
我還能嘗試什麼?
我不知道還能嘗試什麼。還有其他人在 Windows 上使用 vim 檢視 git diff 嗎?你做得怎麼樣?
謝謝你的幫忙。
答案1
剩下的問題是git diff
仍然以顏色突出顯示 diff 輸出(作為 ANSI 轉義序列),並期望分頁器(即 Vim)正確顯示它。但 Vim 有自己的語法突出顯示(也用於差異),並且不理解序列,因此它們顯示為醜陋的^[[m
。您有兩個選擇:
停用 Git 的差異突出顯示(命令列參數
--no-color
,但您也可以透過取消配置git config
)。現在您需要確保 Vim 使用正確的文件類型(:set filetype=diff
;您可以透過 )在命令列上傳遞該文件類型-c {cmd}
。讓 Vim 理解並突出 ANSI 轉義序列;這AnsiEsc.vim 插件可以做到這一點。
我推薦第一種方法。