我在 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 的函数时,参数是以 '\' 结尾的字符串。解决方案是删除每个参数末尾的 '\'。
我这里有一个更紧凑的解决方案:
答案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/