如何使用 vim 在 Windows 上查看 git diffs?

Mic*_*ter 7 windows vim git

我想使用 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'
Run Code Online (Sandbox Code Playgroud)

我相信这是因为 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" -
Run Code Online (Sandbox Code Playgroud)

我设置%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" -
Run Code Online (Sandbox Code Playgroud)

那确实成功启动了vim!但仍然存在一个问题:颜色不起作用,屏幕上到处都是转义字符。请注意,通常情况下,语法突出显示效果很好。如果我运行这些命令,它将显示我用颜色生成的差异文件:

git diff > test.diff
less.bat test.diff
Run Code Online (Sandbox Code Playgroud)

但是,如果我只是调用git diff并使用它%GIT_PAGER%在控制台中为我显示差异,它会向我显示:

截屏

我还能尝试什么?

我不知道还有什么可以尝试的。有没有其他人使用 vim 在 Windows 上查看 git diffs?你是怎么做的?

谢谢你的帮助。

Ing*_*kat 6

剩下的问题是git diff仍然用颜色(作为 ANSI 转义序列)突出显示差异输出,并期望寻呼机(即 Vim)正确显示。但是 Vim 有自己的语法高亮(也用于差异),并且不理解序列,所以它们显示为丑陋的^[[m. 您有两个选择:

  1. 禁用 Git 的差异突出显示(命令行参数--no-color,但您也可以通过 取消配置git config)。现在您需要确保 Vim 使用正确的文件类型(:set filetype=diff;您可以通过在命令行上传递它-c {cmd})。

  2. 让 Vim 理解并突出显示 ANSI 转义序列;该AnsiEsc.vim插件可以做到这一点。

我推荐第一种方法。