我想使用 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并执行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。你有两个选择:

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

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

我推荐第一种方法。

相关内容