2011-08-23 5 views
60

Qual è il modo migliore per sostituire più righe con il contenuto degli appunti?Incolla più volte

Il problema che sto riscontrando è quando slogro una linea e la incollo su un'altra linea, lo "yank" viene sostituito con la riga che ho appena sostituito. Ora, se voglio sostituire un'altra linea con la stessa linea, devo tornare su di nuovo e strattonarla di nuovo.

Deve esserci un modo migliore per farlo.

risposta

76

ho questo nel mio Vimrc:

xnoremap p pgvy 

(nota: questo funziona solo con il registro di default, ma questa mappatura è facile da ricordare). Scrivere una versione più elaborata sarebbe possibile. Inoltre, puoi ancora usare P per ottenere il vecchio comportamento.

+23

Clever. 'p' per incollare, 'gv' per riselezionare ciò che era originariamente selezionato. 'y' per copiarlo di nuovo – Amjith

+0

@Benoit Grazie che sembra funzionare – jwerre

+0

Cosa devo fare se ottieni 'xnoremap: comando non trovato??: -/ –

11

Quando si incolla sopra una selezione in Vim, esso sostituirà il registro predefinito con il contenuto della selezione. Se incollare su una selezione sta spazzando via il contenuto del registro appunti, allora molto probabilmente si ha la seguente riga nel vostro .vimrc

set clipboard=unnamed 

Una possibilità è quella di rimuovere tale e utilizzare gli appunti esplicito registrare "+

Un'altra opzione è quella di utilizzare uno qualsiasi degli altri registri con nome esplicito (az). Dopo la prima incolla, riporta la riga su "c per esempio, quindi usa "cp per incollare da lì in poi.

+0

+1 Nizza, per '" + ' – toopay

+0

In realtà il valore di default (in questo caso, su Ubuntu) è stato clipboard = selezione automatica, ancora, grazie per la risposta più elegante finora – Tobu

7

utilizzare np dove n è il numero di volte in cui si desidera incollare le righe, ad esempio 3p verranno incollate 3 righe.

+6

non funziona quando si desidera incollare. la stessa riga su linee non contigue – Tobu

+0

@Tobu ma risponde al titolo di questa domanda 'come si incolla più volte' – icc97

11

Io uso spesso un altro registro, copiare la linea è necessario un po 'di nome registro "ay e quindi incollare da lì "ap

17

"0 dovrebbe avere il contenuto del strattone. È un po 'più noioso digitare, ma "0p dovrebbe fare ciò che vuoi.

In alternativa, non selezionare e sostituire le vecchie linee in avanti. Se trovi queste righe con una ricerca, premi semplicemente n. più volte (dopo un iniziale p), quindi quando sono tutte incollate, fai ndd seguito da altrettanti n. se necessario.

Il più grande interruttore mentale che dovevo fare quando ci si spostava a Vim è capire come applicare le modifiche di gruppo in modo sequenziale. Cioè piuttosto che fare un po 'di modifiche su una riga e poi fare un gruppo delle stesse modifiche su un'altra linea, farò la prima modifica su un gruppo di linee (usando . con grande effetto), quindi la seconda modifica su un gruppo di linee, ecc. In alternativa, l'utilizzo di macro può essere d'aiuto in quanto sono fantastici, ma a volte un po 'più noiosi per funzionare correttamente con modifiche "complesse".

+0

Grazie per il suggerimento! – mt22

+2

suona come un posto dove regex con conferma ':% s /.../.../ gc' i comandi di tipo potrebbero essere più vicini a quello che vuoi – Milimetric

+0

@Milimetric +1 non sapevo che avresti potuto confermare in quel modo. – ngks

1

Invece di utilizzare copia/incolla, è spesso preferibile utilizzare un comando di testo come ciw per modificare la parola interna. Questo metodo ha il vantaggio di essere facilmente ripetibile utilizzando il comando di ripetizione ..

  1. yiw Cenare la parola interna (copiare la parola sotto il cursore, pronunciare "prima").
  2. ...Sposta il cursore su un'altra parola (dì "secondo").
  3. ciw<C-r>0 Cambia "secondo", sostituendolo con "primo" (è Ctrl-R).
  4. ... Spostare il cursore su un'altra parola (dire "terzo").
  5. . Modificare "terzo", sostituendolo con "primo".