Estou executando o Mercurial a partir da linha de comando no Windows XP. Eu tenho o plugin extdiff. Eu queria
hg vimdiff
para usar o comando DirDiff do Vim. Eu tentei colocar
cmd.vimdiff = gvim
opts.vimdiff = -f '+next' '+execute "DirDiff" argv(0) argv(1)'
No meu Mercurial.ini. Se eu fizer o hg vimdiff então gvim abre com um nome de arquivo '+ next'. Eu acho que o problema é fazer com citações e nomes de caminhos específicos para o Windows. Eu tentei um número de permutações de barras invertidas e aspas simples e duplas (não totalmente aleatoriamente), mas sem sorte.
Já resolvi o meu problema fazendo um script separado para invocar o gvim, por exemplo.
[extdiff]
cmd.vimdiff = c:\python25\python.exe
opts.vimdiff = c:\test\gvimdiff.py
e gvimdiff.py sendo
import sys
import os
os.system('gvim -c "DirDiff %s %s"' % (sys.argv[1],sys.argv[2]))
Mas se alguém souber o encantamento secreto para fazê-lo funcionar diretamente a partir da linha de comando me avise e talvez eu tente atualizar a documentação.
Respostas:
O problema é causado por uma espécie de bug do vim ao chamar uma função com f-args e os args são strings terminando com '\'. A solução é remover o '\' à direita de cada arg.
Eu tenho uma solução mais compacta aqui:
Usando vimdiff com mercurial
fonte