Quero usar o vim para visualizar a saída do git diff
.
Estou executando o Windows 8 e tenho o vim 7.4 instalado. Por conveniência, criei uma variável de ambiente VIMDIR definida como o diretório de instalação do Vim ( set VIMDIR=C:\Program Files (x86)\Vim\vim74
) e adicionei esse diretório ao% PATH%.
O Vim vem com um %VIMDIR%\macros\less.bat
script, que pode ser usado como um pager, para que less.bat file.txt
ou dir | less.bat
exiba a saída em um pager baseado em vim. Eu uso isso regularmente e funciona bem. Eu também gostaria de usar o vim, em vez do less.exe do Git, como pager do git, para que ele seja executado quando eu o fizer git diff
, mas estou tendo problemas.
Eu tentei usar less.bat
o arquivo em lote do vim
Se eu definir %GIT_PAGER%
e %VIMDIR%\macros\less.bat
executar um git diff
, recebo uma mensagem de erro:
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'
Acredito que isso ocorre porque o git é um programa MSYS, o que significa que não pode lidar com C:\whatever
caminhos no estilo Windows.
Eu também tentei invocar a macro less do vim diretamente
Então isso não funciona. A próxima coisa que tentei foi examinar less.bat
e definir %GIT_PAGER%
algo baseado nesse arquivo. Nesse arquivo, vejo esta linha, que instrui o vim a ler o stdin:
vim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -
Eu configurei %GIT_PAGER%
para uma versão modificada que usa caminhos no estilo MSYS:
set GIT_PAGER="/c/Program Files (x86)/Vim/vim74/vim.exe" --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -
Isso inicia o vim com sucesso! Mas ainda há um problema: as cores não funcionam e há caracteres de escape espalhados por toda a tela. Observe que normalmente o realce de sintaxe funciona perfeitamente. Se eu executar esses comandos, ele exibirá o arquivo diff que gerei com cor:
git diff > test.diff
less.bat test.diff
No entanto, se eu simplesmente ligar git diff
e usá-lo %GIT_PAGER%
para exibir o diff para mim no console, isso me mostrará o seguinte:
O que mais posso tentar?
Não tenho certeza do que mais tentar. Alguém mais está usando o vim para visualizar diferenças do git no Windows? Como você está fazendo isso?
Obrigado por qualquer ajuda.
Responder1
O problema restante é que git diff
ainda destaca a saída diff com cores (como sequências de escape ANSI) e espera que o pager (ou seja, Vim) exiba isso corretamente. Mas o Vim tem seu próprio destaque de sintaxe (também para diferenças) e não entende as sequências, então elas aparecem como feias ^[[m
. Você tem duas opções:
Desative o destaque de comparação do Git (argumento de linha de comando
--no-color
, mas você também pode desconfigurar isso viagit config
). Agora você precisa garantir que o Vim use o tipo de arquivo correto (:set filetype=diff
; você pode passar isso na linha de comando via-c {cmd}
).Faça o Vim entender e destacar as sequências de escape ANSI; oPlug-in AnsiEsc.vimposso fazer isso.
Eu recomendaria a primeira abordagem.