vim couper et coller l'histoire

60

Quand je «coupe» dans vim, je crois qu'il existe des registres qui conservent un historique de toutes les choses récentes que j'ai coupées. Comment accéder à ces registres?

Par exemple, disons que je coupe chacun de ces mots consécutivement

  • 'Salut'
  • 'Monde'
  • 'Et'
  • 'Vim'

Notez que je ne sauvegarde pas réellement ces modifications dans des registres particuliers, j'utilise simplement "d" quatre fois de suite.

utilisateur4941
la source

Réponses:

102

le

: aide les registres

La commande révèle qu'il y a 10 registres numérotés ( "0à "9).

Le registre "0est la chose la plus récente qui a été arrachée ; register "1a le dernier texte supprimé , enregistre "2la suppression précédente, "3supprime avant, et ainsi de suite.

Si vous supprimez chaque ligne à son tour, registres "1, "2, "3et "4contiendra « Vim », « Et », « Monde » et « Bonjour », respectivement.

Vous pouvez le vérifier en utilisant la commande :reg(ou :registers):

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

Ainsi, après avoir supprimé les quatre lignes une à la fois, vous pouvez récupérer la deuxième ligne ("Monde") avec

"3p

parce que c'est la troisième suppression la plus récente.

njd
la source
C'est parfait; Cependant, qu'est-ce que je veux le texte le plus récent «tiré»?
Alexey
Donc, vous utiliseriez: p (ce qui signifie la même chose que "0p)
njd
1
Faites également attention aux registres spéciaux, notamment "*" et "+", lorsque vous lisez :help registers. Très utile.
Daniel Andersson
3
Dieux, vous apprenez quelque chose de nouveau chaque jour en tant que vimmer. C'est bien. Merci, @njd.
ELLIOTTCABLE
3
Cette réponse laisse de côté un détail important: seules les suppressions d'une ligne ou plus sont stockées dans l'historique de cette façon. Si vous supprimez les mots de la manière décrite par OP dans la question ( dquatre fois au lieu de dd), tous les mots sauf le dernier supprimé seront perdus.
Alexander Rechsteiner
8

En plus de la réponse de njd, cela peut être simplifié avec le plugin YankRing . En plus de faciliter la navigation dans les yanks précédents, vous pouvez configurer certaines touches pour vous permettre de supprimer les yanks précédents de la «pile». Cela vous permet de faire:

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
Al.
la source
4
Pourriez-vous ajouter comment mapper ,ppour faire apparaître le précédent yank?
Andrew Wood