Vimdiff e git tudo de uma vez

5

Eu uso o vimdiff como meu difftool com git.

Digamos que eu tenha alterado doze arquivos. O problema é que às vezes executo git diff e ao redor do quarto ou quinto arquivo vejo algo que quero editar / alterar. Às vezes eu preciso fazer mais algumas mudanças fora disso. O problema é que eu não posso apenas :qa e voltar a hacking, porque há seis ou sete outros diffs que aparecem no vimdiff. Fica muito entediante a :qa de todos esses arquivos sem olhar toda vez que eu quero abortar um diff do git.

Existe alguma maneira de configurar o vimdiff como o difftool do git, de modo que todos os diffs sejam abertos na mesma instância de vim, por exemplo, em separadores separados?

    
por So8res 31.07.2012 / 20:24

3 respostas

4

Você pode usar os plug-ins do vim publicados aqui . Então você só precisa definir o difftool:

[multidiff]
  tool = vd -f

Como um aplicativo alternativo, sugiro meld , que mostrará os arquivos modificados. Você pode selecionar apenas os arquivos que tem os diffs que deseja ver.

Veja a imagem aqui para um exemplo.

Além do comentário útil de Marcos, como um terceiro (alternativa manual), se você quiser usar vimdiff , recomendo seguir a estratégia de meld em um script (possivelmente python ):

  • use git diff-files --name-status e git diff-index --name-status --cached HEAD para identificar arquivos que precisam ser examinados.
  • Obtenha versões em cache desses arquivos e coloque em /tmp/
  • Abra todos esses arquivos - os arquivos alterados e suas versões em cache - de uma só vez em vimdiff - embora provavelmente não seja possível no sentido que você precisa - veja abaixo.

No entanto, como vimdiff em si não parece lidar com vários separadores de diferenças nativamente, recomendo uma das minhas outras sugestões acima.

    
por 31.07.2012 / 20:27
3

Uma solução simples é adicionar essa opção ao seu arquivo ~ / .gitconfig

[difftool]
    tool = vimdiff $LOCAL $REMOTE
    prompt = true

Dessa forma, antes de cada comparação de arquivo, você é solicitado e tem a possibilidade de pular um arquivo respondendo 'não' ou anulando a comparação de arquivos com Ctrl + C

Exemplo:

$ git difftool
Viewing: 'file1.js'
Launch 'vimdiff' [Y/n]: y
2 files to edit

Viewing: 'file2.js'
Launch 'vimdiff' [Y/n]: n
    
por 29.11.2012 / 01:16
1

Isso é o que eu uso. Requer que você use vim-fugitive

[alias] dt = "!f() { vim -p $(git diff --name-only) +\"tabdo Gdiff $@\" +tabfirst; }; f"

git dt irá então abrir cada par de diferenças em uma aba separada. Em seguida, :tabclose para fechar um único par ou :qa para sair.

fonte

    
por 05.02.2018 / 16:55