Como posso usar o vim para ver git diffs no Windows?

6

Eu quero usar o vim para ver a saída de git diff .

Estou executando o Windows 8 e tenho o vim 7.4 instalado. Eu, por conveniência, criei uma variável de ambiente VIMDIR definida para o diretório de instalação do Vim ( set VIMDIR=C:\Program Files (x86)\Vim\vim74 ), e adicionei este diretório ao% PATH%.

O Vim vem com um script %VIMDIR%\macros\less.bat , 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, ao invés do Git's less.exe, como o pager do git, para que ele seja executado quando eu faço git diff , mas estou com problemas.

Eu tentei usar o arquivo em lote less.bat do vim

Se eu definir %GIT_PAGER% para %VIMDIR%\macros\less.bat e fazer 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 seja porque o git é um programa MSYS, o que significa que ele não pode lidar com C:\whatever caminhos no estilo do Windows.

Eu também tentei invocar menos macro diretamente do vim

Então isso não funciona. A próxima coisa que tentei foi examinar less.bat e definir %GIT_PAGER% para algo baseado nesse arquivo. Nesse arquivo, vejo esta linha, que instrui o vim a ler stdin:

vim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -

Eu defino %GIT_PAGER% para uma versão modificada disso 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 faz com sucesso o lançamento do vim! Mas ainda há um problema: as cores não estão funcionando e há caracteres de escape espalhados por toda a tela. Observe que, normalmente, o destaque da sintaxe funciona bem. Se eu executar esses comandos, ele exibirá o arquivo diff que eu gero com cores:

git diff > test.diff
less.bat test.diff

No entanto, se eu simplesmente chamar git diff e usar %GIT_PAGER% para exibir o diff para mim no console, isso me mostrará:

O que mais posso experimentar?

Não sei mais o que tentar. Alguém mais está usando o vim para ver o git diffs no Windows? Como você está fazendo isso?

Obrigado por qualquer ajuda.

    
por Micah R Ledbetter 10.07.2014 / 19:22

1 resposta

5

O problema restante é que git diff ainda destaca a saída do diff com as cores (como sequências de escape ANSI) e espera que o paginador (ou seja, o Vim) seja exibido corretamente. Mas o Vim tem seu próprio realce de sintaxe (também para diffs), e não entende as seqüências, então elas aparecem como feio ^[[m . Você tem duas opções:

  1. Desative o realce do diff 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; o plug-in AnsiEsc.vim pode fazer isso.

Eu recomendaria a primeira abordagem.

    
por 11.07.2014 / 09:08

Tags