Como expandir / recolher as seções diff no Vimdiff?

295

Comecei a usar o vimdiff hoje e queria fazer algumas das coisas que eu tenho como garantidas nos editores de diff baseados no Windows (como expandir / recolher uma seção de diff, ter expansão de arquivo completa / diffs apenas com 3 linhas de contexto acima ou abaixo etc.). Atualmente, conheço apenas os seguintes comandos:

Atalhos do teclado:

  • do - Obtenha alterações de outra janela na janela atual.

  • dp - Coloque as alterações da janela atual na outra janela.

  • ]c - Salte para a próxima alteração.

  • [c - Salte para a alteração anterior.

  • CTRL+ W, w- Alterne para a outra janela dividida ( CTRL+ W, CTRL+ Wfaz a mesma coisa, caso você solte a CTRLtecla um pouco mais tarde)

Alguém poderia me indicar a direção certa para que eu pudesse replicar recursos semelhantes?

Seria bom se eu pudesse expandir / contrair linhas em torno das diferenças, por exemplo.

TCSGrad
fonte
2
Para um atalho para adicionar / reverter uma longa lista de alterações, consulte stackoverflow.com/q/6093746/212942
TCSGrad
1
É divertido ver a pergunta sendo encerrada após mais de 4 anos, sendo as 3 principais postagens quando o 'vimdiff' é pesquisado no Google!
TCSGrad

Respostas:

241

Além dos que você mencionou, só uso frequentemente quando diferir o seguinte:

  • :diffupdate :diffu-> recalcular o diff, útil quando, após fazer várias alterações, o vim não mostra mais alterações mínimas. Note que só funciona se os arquivos foram modificados dentro do vimdiff. Caso contrário, use:
    • :e para recarregar os arquivos se eles foram modificados fora do vimdiff.
  • :set noscrollbind-> desabilite temporariamente a rolagem simultânea nos dois buffers, reative a :set scrollbindrolagem.

A maior parte do que você pediu é dobragem: o capítulo do manual do usuário do vim sobre dobragem . Fora das diffs, em algum momento uso:

  • zo -> dobra aberta.
  • zc -> feche a dobra.

Mas você provavelmente será melhor servido por:

  • zr -> redução do nível de dobra.
  • zm -> mais um nível dobrável, por favor.

ou até:

  • zR -> Reduza completamente a dobra, eu disse !.
  • zM -> dobre a maioria!

A outra coisa que você pediu, use n linhas de dobra, pode ser encontrada na seção do manual de referência do vim, sobre as opções , na seção diff :

  • set diffopt=<TAB>, atualize ou adicione context:n.

Você também deve dar uma olhada na seção do manual do usuário no diff .

ninjalj
fonte
Muito abrangente mesmo !! Gostaria de verificar os links que você disse, mas mantendo a pergunta em aberto por mais alguns dias para ver se recebo mais respostas (postei em um fim de semana e muitas pessoas não estavam ativas).
TCSGrad
A propósito, você sabe se o vimdiff pode ser usado para mesclar / resolver em três direções, etc? Seria realmente ótimo então !!
TCSGrad
1
@ shan23 Para uma fusão de três vias (para git), verifique isto . Também existem comentários no svn. Ainda tentando descobrir os comandos quando você tem 4 buffers (o / dp não funciona).
quornian
Para :set noscrollbindentrar em vigor, também deve ser :set nocursorbindusado o que não é o padrão. Portanto, as duas opções devem ser ajustadas.
sangrento
4

configure vimdiff para ignorar maiúsculas e minúsculas

Tendo iniciado o vim diff com

 gvim -d main.sql backup.sql &

Eu acho que irritantemente um arquivo tem palavras-chave do MySQL em minúsculas e as outras maiúsculas mostrando diferenças em praticamente todas as outras linhas

:set diffopt+=icase

isso atualiza a tela dinamicamente e você pode facilmente desligá-lo novamente

zzapper
fonte
Embora essa seja uma boa dica, não vejo como ela está relacionada à pergunta em questão (como expandir e recolher as seções de diferenças no vimdiff).
Paul Stelian
3

Na verdade, se você fizer Ctrl+W W, não precisará adicionar esse extra Ctrl. Faz a mesma coisa.

tubbo
fonte
14
Acho ^ W ^ W muito mais rápido para digitar rapidamente do que ^ W w.
Hbbs
Pensei que isso valeria a pena mencionar github.com/ankr/dotfiles/blob/master/files/vimrc#L103
ankr
0

ctrl + w, w, conforme mencionado, pode ser usado para navegar de um painel para outro.

Agora você pode selecionar uma alteração específica sozinha e colá-la no outro painel da seguinte maneira. Aqui estou dando um exemplo, como se eu quisesse alterar meu pedaço de código do painel 1 para o painel 2 e atualmente meu cursor está no painel1

  • Use Shift-v para destacar uma linha e use as teclas para cima ou para baixo para selecionar o trecho de código necessário e continue na etapa 3 escrita abaixo para colar suas alterações no outro painel.

  • Use o modo visual e altere-o

    1 clique em 'v', você será direcionado para o modo visual 2 use a tecla para cima ou para baixo para selecionar o código necessário 3 clique em, tecla de escape Esc '4 Agora use' yy 'para copiar ou' dd 'para cortar a alteração 5 faça' ctrl + w, w 'para navegar para o painel2 6 clique em' p 'para colar suas alterações onde você precisar

Pratheusha KK
fonte
1
A totalidade do que você especificou (exceto a primeira linha) é um recurso do próprio vim, e não do vimdiff, por exemplo.
TCSGrad