我想使用 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
并执行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%
在控制台中显示差异,它会显示以下内容:
我还可以尝试什么?
我不确定还能尝试什么。还有其他人使用 vim 在 Windows 上查看 git 差异吗?你是怎么做的?
谢谢你的帮助。
答案1
剩下的问题是git diff
仍然用颜色突出显示 diff 输出(作为 ANSI 转义序列),并期望分页器(即 Vim)正确显示。但是 Vim 有自己的语法突出显示(也用于 diff),并且不理解这些序列,因此它们显示得很难看^[[m
。你有两个选择:
禁用 Git 的差异突出显示(命令行参数
--no-color
,但您也可以通过 取消配置git config
)。现在您需要确保 Vim 使用正确的文件类型(:set filetype=diff
;您可以通过 将其传递到命令行-c {cmd}
)。使 Vim 理解并突出显示 ANSI 转义序列;AnsiEsc.vim 插件可以做到这一点。
我推荐第一种方法。