vim taglia e incolla la storia


60

Quando sto "tagliando" in vim, credo che ci siano registri che conservano una storia di tutte le cose recenti che ho tagliato. Come accedo a quei registri?

Ad esempio, diciamo che ho tagliato ognuna di queste parole consecutivamente

  • 'Ciao'
  • 'Mondo'
  • 'E'
  • 'Vim'

Si noti che in realtà non sto salvando queste modifiche in registri particolari, sto solo usando 'd' quattro volte consecutive.

Risposte:


102

Il

: aiuto registri

Il comando rivela che ci sono 10 registri numerati ( "0a "9).

Il registro "0è la cosa più recente strappata ; register "1ha il testo eliminato più recente , registra "2la cancellazione precedente, "3ha la cancellazione prima di quella e così via.

Se si elimina ogni riga, a sua volta, registri "1, "2, "3e "4conterrà "Vim", "E", "World" e "Ciao", rispettivamente.

Puoi verificarlo usando il comando :reg(o :registers):

:reg
""   Vim^J
"1   Vim^J
"2   And^J
"3   World^J
"4   Hello^J

Quindi, dopo aver eliminato le quattro righe una alla volta, è possibile recuperare la seconda riga ("Mondo") con

"3p

perché è la terza cancellazione più recente.


Questo è perfetto; tuttavia, cosa desidero il testo "strappato" più recente?
Alexey,

Quindi useresti: p (che significa lo stesso di "0p)
njd

1
Fai anche attenzione ai registri speciali, in particolare "*" e "+", quando leggi :help registers. Molto utile.
Daniel Andersson,

3
Dei, impari qualcosa di nuovo ogni giorno come un vimmer. È ottimo. Grazie, @njd.
ELLIOTTCABLE

3
Questa risposta lascia un dettaglio importante: solo le eliminazioni di una o più righe vengono memorizzate nella cronologia in questo modo. Se si eliminano le parole nel modo in cui OP è stato descritto nella domanda (usando dquattro volte, anziché dd), tutte le voci tranne l'ultima cancellata vanno perse.
Alexander Rechsteiner,

8

Oltre alla risposta di njd, questo può essere semplificato con il plugin YankRing . Oltre a semplificare la navigazione degli yank precedenti, è possibile configurare alcuni tasti per consentire di estrarre gli yank precedenti dallo "stack". Questo ti permette di fare:

yy    " Copy first line
yy    " Copy second line
yy    " Copy third line
yy    " Copy fourth line
" Assumes you've mapped ,p to be the pop command: choose your preferred key or key-combination
,p    " Paste fourth line and pop it off the Yank Ring
,p    " Paste third line and pop it off the Yank Ring
,p    " Paste second line and pop it off the Yank Ring
,p    " Paste first line and pop it off the Yank Ring

4
Potresti aggiungere come mappare ,pper far apparire lo yank precedente?
Andrew Wood,
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.