Au moins une fois par jour, j'ai la situation suivante:
A: This line should also replace line X
...
X: This is line should be replaced
Je crois que je ne remplis pas cette tâche efficacement.
Ce que je fais:
Cela a l’inconvénient supplémentaire que la ligne X soit maintenant dans le registre par défaut, ce qui est gênant si je trouve une autre ligne qui devrait être remplacée par A. Coller/coller depuis un registre supplémentaire ( "ayy ," aP ) rend cette tâche simple encore moins efficace.
Mes questions:
Ce que je ferais:
aG
Y
xG
Vp
Vous n'êtes pas obligé de quitter le mode normal, mais il fait tire la ligne. Vous pouvez cependant utiliser V"0p
qui mettra toujours la ligne tirée à l'étape 2.
Vp
: sélectionnez une ligne, collez ce qui a été tiré
Cela a l'inconvénient supplémentaire cette ligne X est maintenant dans la valeur par défaut inscrivez-vous, ce qui est gênant si je trouve une autre ligne qui devrait être remplacée avec un.
Pour supprimer du texte sans affecter les registres normaux, vous pouvez utiliser le registre de trous noirs "_
:
"_dd
Je voudrais utiliser le mode Commandline (Ex) et faire les deux commandes suivantes
:XmA
:Ad
Cela déplace simplement la ligne X juste en dessous de A, puis supprimer A déplace cette ligne vers le haut.
Par exemple
:7m3
:3d
Se déplacer au début de la première ligne.
y, $ - copier la ligne sans le saut de ligne à la fin
Déplacer au début de la ligne cible.
V, p - remplacer une seule ligne cible
c, c, Ctrlr, , Esc - remplace la ligne cible par le tir d'origine
Se déplacer au début de la ligne cible suivante.
. - répète la commande émise en 4.2.
Remarques:
4.1 est y, $ parce que si tu le fais y, y ou Y vous allez copier le saut de ligne, et Ctrlr, ajoute réellement le saut de ligne en dessous de votre ligne cible.
4.2 remplace Vp, qui ne fonctionne pas avec répéter car, techniquement, la dernière action est la suppression; . serait simplement supprimer une ligne.
Si quelqu'un sait comment émettre ‘remplacer la ligne en cours par l’enregistrement’ à partir du mode EX (ligne de commande), j'aimerais avoir de vos nouvelles (et savoir où vous avez trouvé la documentation). Il peut y avoir une commande répétable EX qui est plus rapide que 4.2 et/ou qui n’a pas l’avertissement de saut de ligne.
Vous pouvez l'utiliser avec le mode visuel.
A
GX
GEn me basant sur les réponses suggérant d'utiliser Vp
ou VP
pour coller sur une ligne - pour éviter de modifier le contenu du registre yank, la commande la plus ergonomique est simplement la suivante:
VPY
Voici ce que je ferais
Vous pouvez aussi faire:
Vy (in normal mode at the line you want to copy)
Vp (in normal mode at the line you want to replace)
Les mêmes clés peuvent être utilisées pour tirer/coller plus d'une ligne.
V (in normal mode at what you want to yank)
(use jk to move the selection)
y (to yank the selection)
V (in normal mode at where you want to paste)
(use jk to move the selection)
p (to replace the selection with the yanked lines)
À la lumière du récent commentaire de cicld (merci!), Je constate que je n’ai pas bien compris le problème initial. Déplacer la ligne n'est pas approprié, mais la copie l'est (puisque la ligne est tirée). Je la réviserais donc comme suit:
:1t20:20d_
Copiez la 1ère ligne (la commande :t
est un alias pour :copy
) après la ligne 20 (le placera sur la ligne 21)
Supprimer la ligne 20, en plaçant la ligne supprimée dans le registre 'trou noir' (_
) (c'est-à-dire sans affecter le tampon de yank actuel)
Comme mentionné dans le commentaire récent, cela n’affectera pas la position actuelle du curseur.
Vous pouvez utiliser ces commandes en mode normal:
:AmX | Xd
la commande m
concerne m[ove]
, qui déplace le numéro de ligne A après le numéro de ligne X; si vous souhaitez copier au lieu de déplacer la ligne, utilisez co[py]
. la commande d
est pour d[elete]
.
Vous pouvez déplacer (copier en utilisant co
) une plage de lignes en utilisant
:start,end m X
Je trouve plus facile d'utiliser la commande Ex pour cela; ex. pour déplacer les lignes 9 à 46:
:46|9m.|-1d
Cela déplace le curseur sur la ligne 46, déplace la ligne 9 en dessous de la ligne en cours, puis supprime la ligne précédente (la ligne déplacée étant la ligne en cours).
Ou en utilisant une ou plusieurs marques, en utilisant la marque 'a':
:46ma a|9m'a|'ad
Il me faut souvent une ligne et la remplacer à plusieurs endroits, chacun ayant une valeur différente (ce qui signifie que je ne peux pas faire de regex).
Y tirer la ligne d'origine désirée
et ensuite sur chaque ligne que vous souhaitez remplacer, VpzeroY
je voudrais simplement utiliser le registre "trou noir":
donné:
nnoremap <C-d> "_dd
la solution serait:
<C-d> yy