Comment tirer une ligne avec un certain numéro de ligne?

Réponses:

59

De :help :yank:

:[range]y[ank] [x]      Yank `[range]` lines [into register x].

Donc, pour tirer la ligne 4, on pourrait taper:

:4yank

Notez que vous pouvez facilement le faire depuis le mode insertion avec <C-o>; Cela vous permet d'exécuter une commande, après quoi vous revenez au mode insertion. par exemple:

<C-o>:4yank

Vous pouvez, bien sûr, également utiliser d'autres gammes. Quelques exemples:

  • Lignes 1 à 3: :1,3yank
  • Le tampon entier: :%yank
  • De la ligne en cours à la fin du tampon: :.,$:yank
  • La ligne actuelle et les 3 prochaines: :.,+3yank
  • La ligne actuelle et les 3 précédentes: :-3,.yank
  • La ligne 3 lignes au-dessus de la ligne actuelle: :-3yank

Les choses les plus utiles à retenir sur les gammes:

  • C'est sous la forme de :line1,line2command.
  • A .est la ligne en cours (vous pouvez en fait omettre le point dans la plupart des cas :.,+3yanket :,+3yanksont identiques)
  • Vous spécifiez des lignes relatives à la position actuelle avec +net -n.

Voir :help [range]pour plus d'informations.

Martin Tournoij
la source
6
Des points bonus pour avoir mentionné <Co>, je sous-utilise cela.
PhilippFrank
7
Il est également intéressant de noter que vous pouvez abrégez :4yankavec:4y
NewbieOnRails
35

En plus de la réponse de Carpetsmoker, je devrais souligner le génial :help :met :help :t.

Si vous souhaitez copier la ligne 4 à droite sous la ligne actuelle, vous pouvez le faire:

:4t.

ou que, si vous voulez copier cette ligne juste au-dessus de la ligne actuelle:

:4t-
romainl
la source
1

Outre les commandes en mode ex que vous avez, vous pouvez également le faire en mode commande, par exemple: 4GY''- ce qui signifie: goto line 4 ( 4G), yank line ( Y) et revenir à la ligne précédente ( '').

Vous pouvez également utiliser des marques de saut; pour votre deuxième question, par exemple, par: mm3kY'm- ce qui signifie: mettre la marque m ( mm), aller de trois lignes vers le haut ( 3k), yank la ligne ( Y), retourner à la marque m ( 'm).

Janis
la source
1
L'utilisation de `` est probablement une meilleure recommandation que '' car celle-ci revient à la même ligne et à la même colonne. Idem pour "m vs" m.
jamessan
Je suis d'accord. (Avez-vous une idée de la façon de créer des retours en arrière littéraux dans le balisage wiki car ils ont une signification particulière?) - Sinon, votre commentaire servira bien d'amendement à ma réponse et d'indice pour les lecteurs.
Janis
Vous devez utiliser plusieurs backticks pour délimiter le code en ligne (cf, daringfireball.net/projects/markdown/syntax#code ). Je sais que cela fonctionne dans les questions / réponses, mais je ne pouvais pas le faire fonctionner dans mon commentaire.
jamessan
1

Tapez simplement

:4y

tirer la ligne 4

il ira dans le registre sans nom. Ensuite, par exemple, vous pouvez utiliser ppour le mettre ailleurs. Vous pouvez également utiliser [n]p, par exemple, 10p pour le coller 10 fois.

Vous pouvez le mettre dans un registre nommé tel que "a" avec

:4y a
Michael Durrant
la source
2
La partie sur le fait de le mettre dans un registre nommé avec "ay4 ne semble pas correcte. Si vous faites cela, vim attendra que vous disiez" 4 quoi? ". Par exemple, si vous appuyez sur Entrée, il supprimera 4 lignes commençant par la position actuelle, si vous tapez / foo <Entrée>, vous obtiendrez la 4ème occurrence suivante de "foo", etc.
Don Hatch
La dernière commande devrait lire 4G"ayy.
Romainl
0

Tu peux faire

:10y <Enter> (to copy the line 10)
p (paste line 10 where the cursor is)

La définition d'un nombre relatif facilite également le déplacement entre les lignes de code.

:set relativenumber

Vous pouvez maintenant copier la 5ème ligne au-dessus du curseur avec:

:-5y <Enter>
:p (to paste)
Stryker
la source