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 n’effectue pas cette tâche efficacement.
Ce que je fais:
Cela a l’inconvénient supplémentaire que la ligne X est maintenant dans le registre par défaut, ce qui est ennuyeux si je trouve une autre ligne qui devrait être remplacée par A. Yanking to et coller depuis un registre supplémentaire ( “ayy “, aP ) rend cette tâche simple même moins efficace.
Mes questions:
Ce que je ferais:
aG
Y
xG
Vp
Vous n’êtes pas obligé de quitter le mode normal, mais vous ne faites que tirer la ligne. Vous pouvez cependant utiliser V"0p
qui mettra toujours la ligne tirée à l’étape 2.
Vp
: sélectionnez la ligne, collez ce qui a été tiré
Cela a l’inconvénient supplémentaire que la ligne X est maintenant dans le registre par défaut, ce qui est agaçant si je trouve une autre ligne qui devrait être remplacée par A.
Pour supprimer du texte sans affecter les registres normaux, vous pouvez utiliser le registre de trous noirs "_
:
"_dd
Je voudrais utiliser le mode ligne de commande (Ex) et faire les deux commandes suivantes
:XmA :Ad
Cela déplace simplement la ligne X juste en dessous de A, puis supprime les mouvements A qui s’alignent
Par exemple
:7m3 :3d
Aller au début de la première ligne.
y , $ – copie la ligne sans le saut de ligne à la fin
Aller au début de la ligne cible.
V , p – remplace une seule ligne cible
c , c , Ctrl r , 0 , Echap – remplace la ligne cible par la valeur originale
Aller au début de la ligne cible suivante.
. – répète la commande émise en 4.2.
Remarques:
4.1 est y , $ car si vous faites y , y ou Y, vous copiez le saut de ligne, et Ctrl r , 0 ajoute réellement le saut de ligne sous votre ligne cible.
4.2 remplace V p , qui ne fonctionne pas avec repeat car techniquement la dernière action est delete, donc . supprimerait simplement une ligne.
Si quelqu’un sait comment “remplacer la ligne actuelle avec le registre” 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 EX reproductible qui est plus rapide que 4.2 et / ou ne comporte pas l’avertissement de retour à la ligne.
Vous pouvez l’utiliser avec le mode visuel.
A
G X
G Voici ce que je ferais
En me basant sur les réponses suggérant d’utiliser Vp
ou VP
pour coller une ligne – pour éviter de changer le contenu du registre yank, je trouve que la commande la plus ergonomique est simplement:
VPY
Vous pouvez utiliser ces commandes en mode normal:
:AmX | Xd
la commande m
est pour m[ove]
, ce qui déplace le numéro de ligne A après le numéro de ligne X, si vous voulez 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 gamme de lignes en utilisant
:start,end m X
Je trouve plus facile d’utiliser la commande Ex pour cela; ex. déplacer les lignes 9 à 46:
:46|9m.|-1d
Cela déplace le curseur sur la ligne 46, déplace la ligne 9 sous le courant, puis supprime la ligne précédente (puisque la ligne déplacée est la ligne courante).
Ou en utilisant des marques, en utilisant la marque «a»:
:46ma a|9m'a|'ad
Je dois souvent y append une ligne et la remplacer à plusieurs endroits, chacun ayant une valeur différente (ce qui signifie que je ne peux pas faire une expression régulière).
Y pour tirer la ligne originale désirée
puis sur chaque ligne que vous souhaitez remplacer, V p zéro Y
À la lumière du récent commentaire de cicld (merci!), Je constate que je n’ai pas bien saisi le problème original. Déplacer la ligne n’est pas approprié, mais la copie est (puisque la ligne est tirée).
:1t20:20d_
Copiez la 1ère ligne ( :t
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 “blackhole” ( _
)
Comme mentionné dans le commentaire récent, cela n’affectera pas la position actuelle du curseur.
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 retirer / coller plusieurs lignes.
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)
Je voudrais simplement utiliser le registre “trou noir”:
donné:
nnoremap
la solution serait: