Per impostazione predefinita, i comandi incolla utilizzano il "
registro ("senza nome") . In effetti, qualsiasi comando che scrive in un registro scrive anche nel registro senza nome, quindi gli strappi, le cancellazioni e le modifiche influiscono su di esso. Questo è il motivo per cui la sequenza yank-delete-paste incolla il testo eliminato anziché il testo strappato.
Il 0
registro può aiutare qui. Qualsiasi comando yank che non specifica un registro inserisce il testo strappato nel registro 0
(oltre a "
). Non è interessato dalle operazioni di eliminazione o modifica, quindi è possibile utilizzarlo per incollare più volte una linea strappata anche se si effettuano eliminazioni o modifiche intermedie.
yy
: I registri 0
ed "
entrambi ora hanno la linea strappata.
- Passa a una linea da sostituire.
dd
: Il registro "
ora ha la linea eliminata, ma il registro 0
ha ancora la linea strappata.
"0P
: Incolla la riga originariamente strappata dal registro 0
.
- Passa alla riga successiva per sostituire.
dd"0P
(come sopra)
(A causa del modo in cui funziona il posizionamento del cursore quando si sostituisce l'ultima riga di un buffer, si dovrà usare "0p
invece di "0P
.)
Questo è molto vicino alla risposta di Bruce Ediger , tranne per il fatto che non è necessario specificare un registro durante lo strappo iniziale. L'uso di uno o più registri con nome può essere molto utile, tuttavia, se è necessario (ad esempio) sostituire alcune righe con AAA
, ma altre righe con BBB
(mettere AAA
nel registro a
e BBB
nel registro b
(o lasciare uno di essi nel registro 0
), quindi incollarle di conseguenza ).
È inoltre possibile incollare da 0
in modalità visiva line-saggio ( V
) per salvare una sequenza di tasti: V"0p
.
Se non ti piace dover digitare "0
, potresti trovare una mappatura più conveniente:
noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p
Un approccio alternativo consiste _
nell'eliminare al registro ("buco nero") . Quando lo elimini, il "
registro non è interessato, quindi la sequenza yank-delete-paste può ancora incollare il testo strappato dal registro senza nome.
yy
: Registrati 0
ed "
entrambi ora hanno la linea strappata.
"_dd
: Nessuna modifica ai registri.
P
: Incolla il testo originariamente strappato dal registro "
.
Ancora una volta, potresti trovare una mappatura più conveniente:
noremap <Leader>d "_d
yy
(sposta sulla linea per essere sostituito)S<C-r>0<Esc>
. Ha il vantaggio di essere ripetibile con il.
comando.