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


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.


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.


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


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.


2

Cela devrait le faire:

:4,12y
p
k

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é à.)


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.