2009-06-03 9 views
14

Se, al prompt dei comandi, corroAnnullamento DIFF messo durante la copia di linee tra le finestre vimdiff

vimdiff file1 file2 

ho un esempio vim che ha due file di side-by-side aperto. Supponiamo che il testo nei file assomiglia a questo (file1 si trova sulla sinistra, file2 a destra):

╔═══════╤═══════╗ 
║foo │-------║ 
║bar │bar ║ 
║grue │-------║ 
║~  │~  ║ 
║~  │~  ║ 
╚═══════╧═══════╝ 

Ora supponiamo che il mio cursore si trova sulla "f" di "pippo" e che vorrei copiare la prima riga di file1 sulla prima riga di file2.

Un modo per fare questo è quello di selezionare e tirare (copia) la linea con v $ y, e quindi utilizzare Ctrl + wl per spostare il cursore indietro per la prima linea di file2 e quindi digitare p per incollare la linea copiata. Se faccio questo e poi decido di non volerlo fare dopotutto, posso premere u per annullare il comando incolla che ho eseguito nel file2.

Un altro modo per farlo è usare il comando diff put dp. Tuttavia, se dopo averlo fatto ho deciso che non intendevo farlo, non posso annullarlo semplicemente premendo u perché il mio cursore è ancora in file1 e il comando u annullerà la modifica più recente a file1 , non la modifica più recente a file2. Così, invece devo usare Ctrl + w l o Ctrl + w w per spostare il cursore nella finestra per file2 e poi stampa u.

Quindi, la mia domanda è: dopo che ho usato dp come sopra, c'è un modo semplice per me di annullarlo senza dover spostare il cursore nella finestra dell'altro file?

risposta

12

Non esiste un comando per questo, ma è possibile mappare il proprio. Inserire il seguente nel vostro vimrc e quindi utilizzare du fare annullamenti diff.

nmap du :wincmd w<cr>:normal u<cr>:wincmd w<cr>
+1

Questo potrebbe comportarsi strano se non v'è più di due finestre. (Solo una nota, tuttavia una risposta perfetta alla domanda). –

10

dipende da come il flusso di lavoro va, ma io di solito uso do ottenere un diff nel mio file piuttosto che dp che mette il diff nell'altro. In questo modo è possibile utilizzare u e ctrl + r come al solito.

Dal momento che i comandi di navigazione diff funzionano allo stesso modo da entrambi i file, è necessario essere pronti per partire!

prossimo diff: ]c

prev diff: [c

+0

soluzione molto più semplice +1 – cctan

0

Quando si confrontano i file, mi piace usare vimdiff o vim -d.Un modo di cambiamenti di copiatura con vimdiff è:

]c    - advance to the next block with differences 
[c    - reverse search for the previous block with differences 
do (diff obtain) - bring changes from the other file to the current file 
dp (diff put) - send changes from the current file to the other file 

Questo funziona come:

:diffget the same with do 
:diffput the same with dp 
+0

molto facile da leggere –

+0

potresti votare la mia risposta? Ho bisogno fino a 15 –