Comment développer / réduire une section diff dans Vimdiff?

295

J'ai commencé à utiliser vimdiff aujourd'hui, et je voulais faire certaines des choses que je tenais pour acquises sur les éditeurs de différences basés sur Windows (comme développer / réduire une section diff, avoir une expansion complète des fichiers / seulement des différences avec 3 lignes de contexte ci-dessus ou ci-dessous, etc.). Je ne connais actuellement que les commandes suivantes:

Raccourcis clavier:

  • do - Obtenez les modifications d'une autre fenêtre dans la fenêtre actuelle.

  • dp - Mettez les modifications de la fenêtre actuelle dans l'autre fenêtre.

  • ]c - Passez au prochain changement.

  • [c - Passez à la modification précédente.

  • CTRL+ W, w- Bascule vers l'autre fenêtre partagée ( CTRL+ W, CTRL+ Wfait la même chose, au cas où vous lâcheriez la CTRLclé un peu plus tard)

Quelqu'un pourrait-il m'orienter dans la bonne direction pour que je puisse reproduire des fonctionnalités similaires?

Ce serait bien si je pouvais agrandir / réduire les lignes autour des diffs, par exemple.

TCSGrad
la source
2
Pour un raccourci pour ajouter / annuler une longue liste de modifications, reportez-vous à stackoverflow.com/q/6093746/212942
TCSGrad
1
C'est amusant de voir la question fermée après plus de 4 ans, avec le top 3 des messages quand 'vimdiff' est googlé!
TCSGrad

Réponses:

241

Mis à part ceux que vous mentionnez, je n'utilise fréquemment que lorsque je diffère les éléments suivants:

  • :diffupdate :diffu-> recalculer le diff, utile lorsque, après avoir fait plusieurs changements, vim n'affiche plus de changements minimes. Notez que cela ne fonctionne que si les fichiers ont été modifiés dans vimdiff. Sinon, utilisez:
    • :e pour recharger les fichiers s'ils ont été modifiés en dehors de vimdiff.
  • :set noscrollbind-> désactiver temporairement le défilement simultané sur les deux tampons, réactiver par :set scrollbindet défilement.

La plupart de ce que vous avez demandé est le pliage: chapitre du manuel d'utilisation de vim sur le pliage . En dehors des diffs, j'utilise parfois:

  • zo -> pli ouvert.
  • zc -> fermer le pli.

Mais vous serez probablement mieux servi par:

  • zr -> réduction du niveau de pliage.
  • zm -> un autre niveau de pliage, s'il vous plaît.

ou même:

  • zR -> Réduisez complètement le pliage, dis-je!.
  • zM -> pliez le plus!.

L'autre chose que vous avez demandée, utilisez n lignes de pliage, se trouve dans la section du manuel de référence de vim sur les options , via la section sur diff :

  • set diffopt=<TAB>, puis mettez à jour ou ajoutez context:n.

Vous devriez également jeter un oeil à la section du manuel d'utilisation sur diff .

ninjalj
la source
Très complet en effet !! Je vérifierais les liens que vous avez dit, mais en gardant la question ouverte pendant quelques jours pour voir si j'obtiens plus de réponses (j'ai posté un week-end, et peu de gens seraient actifs alors).
TCSGrad
Soit dit en passant, savez-vous si vimdiff peut être utilisé pour la fusion / résolution à 3, etc.? Ce serait vraiment super alors !!
TCSGrad
1
@ shan23 Pour une fusion à 3 voies (pour git), vérifiez ceci . Il y a aussi des commentaires sur svn. J'essaie toujours de comprendre les commandes quand vous avez 4 tampons (do / dp ne fonctionne pas).
2012
Pour :set noscrollbindprendre effet, il doit également être :set nocursorbindutilisé, ce qui n'est pas la valeur par défaut. Les deux options doivent donc être ajustées.
sanglant
4

définir vimdiff pour ignorer la casse

Après avoir démarré diff diff avec

 gvim -d main.sql backup.sql &

Je trouve que fâcheusement un fichier a des mots-clés MySQL en minuscules, l'autre en majuscule montrant des différences sur pratiquement toutes les autres lignes

:set diffopt+=icase

cela met à jour l'écran dynamiquement et vous pouvez tout aussi facilement l'éteindre à nouveau

zzapper
la source
Bien que ce soit une bonne astuce, je ne vois pas comment cela est lié à la question actuelle (comment développer et réduire les sections diff dans vimdiff).
Paul Stelian
3

En fait, si vous le faites Ctrl+W W, vous n'aurez pas besoin d'ajouter cet extra Ctrl. Fait la même chose.

tubbo
la source
14
Je trouve que ^ W ^ W est beaucoup plus rapide à taper rapidement que ^ W w.
Hobbs
Je pensais que cela valait la peine de mentionner github.com/ankr/dotfiles/blob/master/files/vimrc#L103
ankr
0

ctrl + w, w comme mentionné peut être utilisé pour naviguer d'un volet à l'autre.

Maintenant, vous pouvez sélectionner un changement particulier seul et le coller dans l'autre volet comme suit.Ici, je donne un exemple comme si je voulais changer mon morceau de code du volet 1 au volet 2 et actuellement mon curseur est dans le volet 1

  • Utilisez Shift-v pour mettre une ligne en surbrillance et utilisez les touches haut ou bas pour sélectionner le morceau de code dont vous avez besoin et continuez à partir de l'étape 3 écrite ci-dessous pour coller vos modifications dans l'autre volet.

  • Utilisez le mode visuel, puis modifiez-le

    1 cliquez sur 'v' cela vous amènera au mode visuel 2 utilisez la touche haut ou bas pour sélectionner votre code requis 3 cliquez sur, Esc 'touche d'échappement 4 Maintenant utilisez' yy 'pour copier ou' dd 'pour couper le changement 5 do' ctrl + w, w 'pour naviguer vers le volet 2 6 cliquez sur' p 'pour coller votre modification là où vous le souhaitez

Pratheusha KK
la source
1
L'intégralité de ce que vous avez spécifié (sauf la première ligne) est une caractéristique de vim lui-même, et non pas de vimdiff.
TCSGrad