配置 Mercurial 以在 Windows 上使用 vim 进行 extdiff 目录比较

配置 Mercurial 以在 Windows 上使用 vim 进行 extdiff 目录比较

我在 Windows XP 上从命令行运行 Mercurial。我有 extdiff 插件。我想要

hg vimdiff

使用 Vim 的 DirDiff 命令。我尝试过

cmd.vimdiff = gvim
opts.vimdiff = -f '+next' '+execute "DirDiff" argv(0) argv(1)'

在我的 Mercurial.ini 中。如果我执行 hg vimdiff,则 gvim 将打开文件名为“+next”。我认为问题与 Windows 特有的引用和路径名有关。我尝试了多种反斜杠和单引号和双引号的排列(并非完全随机),但都没有成功。

我已经通过制作一个单独的脚本来调用 gvim 解决了我的问题

[extdiff]
cmd.vimdiff = c:\python25\python.exe
opts.vimdiff = c:\test\gvimdiff.py

并且 gvimdiff.py 是

import sys
import os

os.system('gvim -c "DirDiff %s %s"' % (sys.argv[1],sys.argv[2]))

但是如果有人知道让它直接从命令行工作的秘密咒语,请告诉我,我可能会尝试更新文档。

答案1

该问题是由 vim 的一个错误引起的,当调用带有 f-args 的函数时,参数是以 '\' 结尾的字符串。解决方案是删除每个参数末尾的 '\'。

我这里有一个更紧凑的解决方案:

将 vimdiff 与 mercurial 结合使用

答案2

对于 Windows,请opts.vimdiff在 .hgrc 文件中进行如下设置:

opts.vimdiff=-f "+next" "+execute 'DirDiff' fnameescape(substitute(argv(0), '\\$', '', '')) fnameescape(substitute(argv(1), '\\$', '', ''))"

如果在执行上述修复后仍遇到问题并收到错误消息“当前行没有差异!”,则您很可能使用了较新版本的 DirDiff,它会在命令行中强制使用 UNIX 风格的语言环境规范,而​​不检查它是否在 Windows 上运行。修复方法是将以下行添加到您的 _vimrc 或 .vimrc 文件中:

let g:DirDiffForceLang=""

详情请见此处:https://vijay.tech/talks/mercurial-diffs-with-vim-on-windows/

相关内容