Come espandere / comprimere una sezione diff in Vimdiff?


295

Ho iniziato a utilizzare vimdiff oggi e volevo fare alcune delle cose che ho dato per scontato sugli editor diff basati su Windows (come espandere / comprimere una sezione diff, avere l'espansione completa del file / diff solo con 3 righe di contesto sopra o sotto, ecc.). Attualmente conosco solo i seguenti comandi:

Tasti rapidi:

  • do - Ricevi le modifiche da un'altra finestra nella finestra corrente.

  • dp - Inserisci le modifiche dalla finestra corrente nell'altra finestra.

  • ]c - Passa alla prossima modifica.

  • [c - Passa alla modifica precedente.

  • CTRL+ W, w- Passa all'altra finestra divisa ( CTRL+ W, CTRL+ Wfa la stessa cosa, nel caso in cui lasci andare il CTRLtasto un po 'più tardi)

Qualcuno potrebbe indicarmi la giusta direzione in modo da poter replicare caratteristiche simili?

Sarebbe bello se potessi espandere / comprimere le linee attorno alle differenze, per esempio.


2
Per una scorciatoia per aggiungere / ripristinare un lungo elenco di modifiche, fare riferimento a stackoverflow.com/q/6093746/212942
TCSGrad


1
È divertente vedere la domanda chiusa dopo più di 4 anni, essendo i primi 3 post quando "vimdiff" è googled!
TCSGrad

Risposte:


241

A parte quelli che menzioni, uso spesso solo quando diffondo quanto segue:

  • :diffupdate :diffu-> ricalcola il diff, utile quando dopo aver apportato diverse modifiche vim's non mostra più modifiche minime. Nota che funziona solo se i file sono stati modificati all'interno di vimdiff. Altrimenti, utilizzare:
    • :e per ricaricare i file se sono stati modificati al di fuori di vimdiff.
  • :set noscrollbind-> disabilita temporaneamente lo scorrimento simultaneo su entrambi i buffer, riattivabile da :set scrollbinde scorrimento.

La maggior parte di ciò che hai richiesto è la piegatura: il capitolo del manuale utente di vim sulla piegatura . Al di fuori delle differenze che a volte uso:

  • zo -> apri piega.
  • zc -> Chiudi piega.

Ma probabilmente sarai meglio servito da:

  • zr -> riduzione del livello di piegatura.
  • zm -> un altro livello di piegatura, per favore.

o anche:

  • zR -> Riduci completamente la piegatura, ho detto !.
  • zM -> fold Most !.

L'altra cosa che hai chiesto, usa n righe di piegatura, può essere trovata nella sezione del manuale di riferimento vim sulle opzioni , tramite la sezione su diff :

  • set diffopt=<TAB>, quindi aggiorna o aggiungi context:n.

Dovresti anche dare un'occhiata alla sezione del manuale utente su diff .


Davvero molto completo !! Verificherei i link che hai detto, ma mantenendo aperta la domanda per un paio di giorni in più per vedere se ricevo più risposte (ho pubblicato un fine settimana e non molte persone sarebbero attive allora).
TCSGrad

A proposito, sai se vimdiff può essere utilizzato per la fusione / risoluzione a 3 vie ecc? Sarebbe davvero fantastico allora !!
TCSGrad

1
@ shan23 Per 3 vie fusione (per git), controllare questo fuori. Ci sono commenti anche su svn. Sto ancora cercando di capire i comandi quando hai 4 buffer (do / dp non funziona).
Quornian,

Perché :set noscrollbindabbia effetto, deve anche essere :set nocursorbindusato, che non è l'impostazione predefinita. Quindi entrambe le opzioni devono essere modificate.
sanguinante

4

imposta vimdiff per ignorare il caso

Avendo iniziato vim diff con

 gvim -d main.sql backup.sql &

Trovo che fastidiosamente un file abbia le parole chiave MySQL in minuscolo, l'altro in maiuscolo che mostra differenze praticamente su ogni altra riga

:set diffopt+=icase

questo aggiorna lo schermo in modo dinamico e puoi semplicemente spegnerlo di nuovo


Anche se questo è un bel suggerimento, non vedo come sia correlato alla domanda attuale (come espandere e comprimere le sezioni diff in vimdiff).
Paul Stelian,


0

ctrl + w, w come menzionato può essere usato per navigare da un riquadro all'altro.

Ora puoi selezionare da solo una modifica particolare e incollarla nell'altro riquadro come segue. Qui sto dando un esempio come se volessi cambiare il mio pezzo di codice dal riquadro 1 al riquadro 2 e attualmente il mio cursore si trova nel riquadro1

  • Usa Shift-v per evidenziare una riga e usa i tasti su o giù per selezionare il pezzo di codice richiesto e continua dal passaggio 3 scritto sotto per incollare le modifiche nell'altro riquadro.

  • Usa la modalità visiva e poi modificala

    1 clic su "v" per accedere alla modalità visiva 2 utilizzare il tasto Su o Giù per selezionare il codice richiesto 3 fare clic su, Esc "tasto Esc 4 Ora utilizzare" yy "per copiare o" dd "per tagliare la modifica 5 do" ctrl + w, w 'per passare al riquadro2 6 fare clic su' p 'per incollare la modifica nel punto desiderato


1
Tutto ciò che hai specificato (tranne la prima riga) è una caratteristica di Vim stesso, non di Vimdiff per dire.
TCSGrad
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.