Quero usar o vim para visualizar a saída do git diff.

Quero usar o vim para visualizar a saída do git diff.

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.batscript, que pode ser usado como um pager, para que less.bat file.txtou dir | less.batexiba 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.bato arquivo em lote do vim

Se eu definir %GIT_PAGER%e %VIMDIR%\macros\less.batexecutar 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:\whatevercaminhos 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.bate 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 diffe usá-lo %GIT_PAGER%para exibir o diff para mim no console, isso me mostrará o seguinte:

captura de tela

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 diffainda 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:

  1. Desative o destaque de comparação do Git (argumento de linha de comando --no-color, mas você também pode desconfigurar isso via git 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}).

  2. Faça o Vim entender e destacar as sequências de escape ANSI; oPlug-in AnsiEsc.vimposso fazer isso.

Eu recomendaria a primeira abordagem.

informação relacionada