我想用vim來查看git diff.

我想用vim來查看git diff.

我想用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.txtdir | 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。您有兩個選擇:

  1. 停用 Git 的差異突出顯示(命令列參數--no-color,但您也可以透過取消配置git config)。現在您需要確保 Vim 使用正確的文件類型(:set filetype=diff;您可以透過 )在命令列上傳遞該文件類型-c {cmd}

  2. 讓 Vim 理解並突出 ANSI 轉義序列;這AnsiEsc.vim 插件可以做到這一點。

我推薦第一種方法。

相關內容