Par défaut, les commandes de collage utilisent le "
registre («sans nom») . En effet, toute commande qui écrit dans un registre écrit également dans le registre sans nom, donc les tirages, les suppressions et les modifications l'affectent tous. C'est pourquoi votre séquence yank-delete-paste colle le texte supprimé au lieu du texte yanked.
Le 0
registre peut aider ici. Toutes les commandes yank qui ne spécifient pas de registre mettent le texte yanked dans le registre 0
(en plus de "
). Il n'est pas affecté par les opérations de suppression ou de modification, vous pouvez donc l'utiliser pour coller plusieurs fois une ligne tirée, même si vous effectuez des suppressions ou des modifications intermédiaires.
yy
: Les registres 0
et les "
deux ont maintenant la ligne tirée.
- Déplacer vers une ligne à remplacer.
dd
: Le registre a "
maintenant la ligne supprimée, mais le registre a 0
toujours la ligne tirée.
"0P
: Collez la ligne initialement tirée du registre 0
.
- Passez à la ligne suivante pour remplacer.
dd"0P
(comme ci-dessus)
(En raison de la façon dont le positionnement du curseur fonctionne lors du remplacement de la dernière ligne d'un tampon, vous souhaiterez utiliser à la "0p
place de "0P
.)
Ceci est très proche de la réponse de Bruce Ediger , sauf que vous n'avez pas besoin de spécifier un registre lors du tirage initial. L'utilisation d'un ou plusieurs registres nommés peut être très pratique si vous devez (par exemple) remplacer certaines lignes par AAA
, mais d'autres lignes par BBB
(mettre AAA
dans le registre a
et BBB
dans le registre b
(ou laisser l'une d'entre elles dans le registre 0
), puis collez-les en conséquence ).
Vous pouvez également coller à partir 0
en mode visuel ligne par ligne ( V
) pour enregistrer une séquence de touches: V"0p
.
Si vous n'aimez pas avoir à taper "0
, vous pouvez trouver un mappage plus pratique:
noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p
Une autre approche consiste à supprimer le _
registre («trou noir») . Lorsque vous le supprimez, le "
registre n'est pas affecté, donc votre séquence yank-delete-paste peut toujours coller le texte retiré du registre sans nom.
yy
: Inscrivez-vous 0
et les "
deux ont maintenant la ligne tirée.
"_dd
: Pas de changement dans les registres.
P
: Collez le texte originellement retiré du registre "
.
Encore une fois, vous pourriez trouver un mappage plus pratique:
noremap <Leader>d "_d
yy
(déplacer vers la ligne à remplacer)S<C-r>0<Esc>
. A l'avantage d'être reproductible avec la.
commande.