2011-03-13 9 views
277

Ho iniziato a utilizzare vimdiff oggi e volevo fare alcune delle cose che ho dato per scontato su diff editors basati su Windows (come espandere/comprimere una sezione di diff, avere espansioni di file complete/solo diff con 3 linee di contesto sopra o sotto, ecc.). Attualmente conosco solo i seguenti comandi:Come espandere/comprimere una sezione diff in Vimdiff?

scorciatoie da tastiera:

  • do - Get cambia da altra finestra nella finestra corrente.

  • dp - Mettere i cambiamenti da finestra corrente nell'altra finestra.

  • ]c - Salta al successivo cambiamento.

  • [c - Passa alla modifica precedente.

  • CTRL + W, w - Passare all'altra finestra divisa (CTRL + W, CTRL + W fa la stessa cosa, nel caso in cui si lascia andare della chiave CTRL un po 'più tardi)

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

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

+2

per una scorciatoia per aggiungere/ripristinare un lungo elenco di modifiche, fare riferimento a http://stackoverflow.com/q/6093746/212 942 – TCSGrad

+0

Vedi: [Usa vimdiff come git mergetool] (http://www.rosipov.com/blog/use-vimdiff-as-git-mergetool/) e [vimdiff - il modo migliore per diff per gli utenti vim] (http : //gingerjoos.com/blog/linux/vimdiff-the-cool-way-to-diff-for-vim-users) – kenorb

+1

È divertente vedere la domanda chiusa dopo più di 4 anni, essendo la top 3 post quando 'vimdiff' è googled! – TCSGrad

risposta

207

A parte quelli di cui parli, io uso solo frequentemente quando diffing il seguente:

  • :diffupdate:diffu -> ricalcolare il diff, utile quando dopo aver fatto diversi cambiamenti vim di non sta mostrando più modifiche minime. Si noti 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 -> disabilitare temporaneamente lo scorrimento simultaneo su entrambi i buffer, riattivabile da :set scrollbind e lo scorrimento.

La maggior parte di ciò che hai chiesto è pieghevole: vim user manual's chapter on folding. Al di fuori delle differenze a volte uso:

  • zo -> aprire piega.
  • zc -> chiudere piega.

Ma probabilmente sarete meglio servita da:

  • zr -> ridurre il livello di piegatura.
  • zm -> un altro livello di piegatura, per favore.

o anche:

  • zR -> Ridurre completamente la piegatura, ho detto !.
  • zM -> piega Most !.

L'altra cosa che hai chiesto, l'uso n linee di piegatura, si possono trovare presso il vim reference manual section on options, attraverso il section on diff:

  • set diffopt=<TAB>, quindi aggiornare o aggiungere context:n.

Si dovrebbe anche dare un'occhiata al user manual section on diff.

+0

Davvero comprensibile !! Controllerei i link che hai detto, ma mantenendo la domanda aperta per altri due giorni per vedere se ricevo più risposte (l'ho postata in un fine settimana, e non molte persone sarebbero attive allora). – TCSGrad

+0

A proposito, sai se è possibile utilizzare vimdiff per l'unione/risoluzione a 3 vie ecc.? Sarebbe davvero fantastico allora !! – TCSGrad

+1

@ shan23 Per la fusione a 3 vie (per git), selezionare [this] (http://www.toofishes.net/blog/three-way-merging-git-using-vim/) out. Ci sono anche commenti su svn. Sto ancora cercando di capire i comandi quando hai 4 buffer (do/dp non funziona). – quornian

3

In realtà, se lo si fa Ctrl+W W, non sarà necessario aggiungere tale extra Ctrl. Fa la stessa cosa

+13

Trovo^W^W molto più veloce da digitare rapidamente rispetto a^W w. – hobbs

+0

Pensavo che valesse la pena menzionare https://github.com/ankr/dotfiles/blob/master/files/vimrc#L103 – ankr

4

set vimdiff di ignorare caso

Dopo aver iniziato diff vim con

gvim -d main.sql backup.sql & 

trovo che fastidiosamente un file ha MySQL parole chiave in minuscolo le altre differenze che mostra maiuscole su praticamente ogni altra linea

:set diffopt+=icase 

questo aggiorna dinamicamente lo schermo & si può facilmente spegnere nuovamente

0

ctrl + w, w come indicato può essere utilizzato per la navigazione da un riquadro all'altro.

Ora è possibile selezionare un particolare cambiamento da solo e incollarlo 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 è in pane1

  • Usa shift-v per evidenziare una linea e utilizzare fino o giù le chiavi per selezionare il pezzo di codice desiderata e continuare dal passaggio 3 scritto di seguito per incollare le modifiche nel riquadro.

  • Utilizzare la modalità visiva e poi cambiarlo

    1 click 'v' questo vi porterà a modalità visiva 2 usare su o giù per selezionare il codice necessario 3 click su, Esc' fuga chiave 4 Ora usano 'aa' a copiare o 'dd' per tagliare il cambiamento 5 do 'Ctrl + w, w' per navigare pane2 6 clicca 'p' per incollare il cambiamento in cui si richiede

+0

La totalità di ciò che hai specificato (eccetto la prima riga) è una caratteristica di vim stessa, non vimdiff per dire. – TCSGrad