Comment tirer une ligne particulière sans déplacer le curseur dans vim?

40

Par exemple

texte alternatif

Comment puis-je tirer et coller la ligne 4 uniquement sur la ligne 12 sans avoir à déplacer le curseur sur la ligne 4?

texte alternatif

Lazer
la source
J'ai répondu à votre question sur le fait que "tire-moi!" est sur la ligne 4. Dans votre deuxième capture d'écran, il apparaît sur la ligne 5.
Louis Salin
Merci @Louis pour la réponse. J'ai mis à jour la capture d'écran.
Lazer

Réponses:

52

Si le curseur est déjà sur la ligne 12, alors un simple

: 4 ans
P

le fait pour moi.

frabjous
la source
1
Agréable! Y a-t-il un équivalent pour x? Quand j'essaye :4xje reçois E140: Use ! to write partial buffer. Merci!
dotancohen
Je dois dire que c'est incroyable: D
nXqd
@dotancohen:4d
n.st
Y a-t-il un bon moyen de faire cela avec un numéro de ligne relatif?
TrungDQ
Avec les nombres relatifs, utilisez simplement + et -. So -4 est quatre lignes au-dessus du curseur et +4 quatre lignes en dessous.
Rickythefox
10

Que diriez-vous de ceci: le curseur est sur la ligne 11, vous êtes en mode "vi".

:4co.<return>

Vous pouvez apparemment aussi le faire avec un motif:

:/^Yank/co.<return>

Vous pouvez utiliser "mo" (déplacer) au lieu de "co" (copier) pour déplacer simplement la ligne, au lieu de tirer et de mettre.

Bruce Ediger
la source
1
Encore plus court ( t comme une commande de copie est un reste de ed)::4t.
tarleb
9

Essaye ça:

:4,4y  
P
Louis Salin
la source
8

Essayer:

:4co11

Vous pouvez utiliser un argument de 0pour coller à la ligne 1. Cela fonctionnera également avec les gammes:

:m,n co k

copiera lignes mpar nla ligne k+1. De plus, peu importe où vous vous trouvez dans la mémoire tampon. La movecommande, mfonctionne de la même manière.

gvkv
la source
2

Cela devrait le faire:

:4,12y
p
k
Umang
la source
1
Non, ça efface les lignes 4 à 12.
Lazer
Je voulais dire copier et coller la ligne 4, la ligne 12.
Lazer
Édité. C'est ce que tu voulais?
Umang
2

D'autres ont déjà mentionné la méthode la plus directe pour ce faire, à savoir :4y, mais je voudrais ajouter deux notes à ce sujet qui pourraient être utiles:

Premièrement, si vous tapez, :help rangevous apprendrez tout sur l’utilisation des plages à appliquer aux commandes de style Ex. TRÈS utile dans de nombreux cas et beaucoup plus polyvalent que l’utilisation de numéros de ligne. Par exemple, si vous souhaitez supprimer la première ligne commençant par "yank" après le début du document (même si c'est sur la première ligne), utilisez :0/^yank/y. La partie la plus puissante des plages est la possibilité de les combiner, par exemple :./^Chapter/+50?Pete?d: "Recherchez la ligne suivante pour commencer avec le mot Chapitre (recherche en avant de la ligne actuelle), puis avancez de 50 lignes et recherchez en arrière le mot Pete, et supprimez la première ligne dans laquelle vous la trouvez. " Sauf que cela ne déplace pas réellement le curseur, il fait juste ce que vous lui dites.

(J'ai utilisé ce type de spécification de plage pour automatiser la création de documentation fastidieuse impliquant la recherche du nom de la fonction sous le curseur, puis la recherche en avant de la ligne suivante qui dit "Description" et la ramenant à un registre spécifique ... etc.).

L'autre astuce, c'est que vous devriez savoir sur le saut. Tapez :help jump-motionspour en apprendre plus à ce sujet, mais la façon dont cela se rapporte ici est que vous pouvez sauter à la ligne 4, la tirer et ensuite la retourner avec 4Gyy''(ou utiliser des points de contrôle au lieu d'apostrophes pour revenir à votre position de départ exacte, plutôt que la même ligne vous avez commencé à.)

Wildcard
la source
2

Le plus court:

:1t. copie la première ligne en dessous du courant.

Avec plages: :1,4t.copie les lignes 1 à 4 (incluses) en dessous du courant.

Également possible avec des numéros de ligne relatifs:

:-1t. copie la ligne précédente sous le courant.

Dans votre exemple :4t-1, copiez la quatrième ligne en dessous de la ligne souhaitée.

Remarque: :test un synonyme de la :co[py]commande.

Erwin Rooijakkers
la source