web-dev-qa-db-fra.com

Gamme de lignes Vim yanking

Je suis un développeur C # qui a récemment décidé d'élargir ma connaissance des outils à ma disposition. Le premier outil que j'ai décidé d'apprendre est Vi/Vim. Tout s'est bien passé jusqu'à présent, mais il y a quelques questions auxquelles je n'arrive pas à trouver la réponse:

  1. Disons que je voulais arracher une gamme de lignes. Je sais qu'il y a plusieurs façons de le faire, mais j'aimerais le faire par numéro de ligne. Je pensais que ce serait similaire à la façon dont les commandes de substitution fonctionnent, quelque chose comme 81,91y. Y a-t-il un moyen de faire cela?

  2. Je suis un peu confus à propos de la commande g en mode normal. Il semble faire une myriade de choses et je ne peux pas vraiment déterminer ce que fait la commande g à sa base. Je ne sais pas si c'est une commande de mouvement ou une sorte de "catch all" pour les autres commandes passées en mode normal. Quelqu'un peut-il expliquer cela ou me diriger vers une référence qui donne une bonne explication de la commande g?

73
jnadro52

Yank lines 81-91

:81,91y<enter>

Si vos doigts n'aiment pas trouver le : et , touches, cela fonctionnerait aussi (allez à la ligne 81, tirez sur 11 lignes)

81gg11yy 

Ma seule utilisation de g est 5gg. Pour aller à la 5ème ligne. 22gg: 22e ligne. Comme l'a dit jimbo, ce n'est vraiment qu'un modificateur pour certaines autres commandes.

Pour être complet, ( http://vim.wikia.com/wiki/Power_of_g ) explique en grande partie comment g fonctionne en mode commande.

118
hometoast

Vous pouvez également copier les lignes actuelles à l'emplacement actuel de votre curseur en utilisant "t".

:81,91t.<enter>

Cela va coller les lignes 81-91 sous la ligne sur laquelle se trouve le curseur.

J'ai appris cela de http://vimcasts.org qui est une excellente ressource sur VIM.

18
Asta

J'aime également utiliser l'option de numéro de ligne relative de vim, ce qui signifie que je peux simplement entrer:

:-10,-7ya a

pour extraire le texte dans le tampon nommé a.

N.B. La spécification de A ajoutera ce que vous tirez au contenu actuel du tampon a.

N'oubliez pas que vous pouvez également copier des blocs de texte et déplacer des blocs de texte également avec les commandes similaires:

:-10,-7co .

signifie copier les quatre lignes de texte 10 lignes au-dessus en dessous de la ligne actuelle, et

:-10,-7mo .

signifie déplacer les quatre lignes de texte de 10 lignes au-dessus et au-dessous de la ligne actuelle.

10
Rob Wells

La commande G va à un certain numéro de ligne, si elle est accompagnée d'une valeur de comptage. 81G vous met en ligne 81.

La commande y peut être combinée avec un mouvement, comme G. Donc, pour tout tirer jusqu'à la ligne 91, vous pouvez utiliser y91G.

Ensemble, vous obtenez:

81Gy91G

Allez à la ligne 81, puis tirez en allant à la ligne 91.

7
sth

g ne fait rien par lui-même. C'est l'une des quelques méta-commandes qui contiennent un tas de commandes sans rapport avec sorta.

z est encore une autre commande comme ça.

4
Jimbo

La meilleure solution serait d'entrer en "mode visuel", en appuyant sur v. Et après avoir sélectionné les lignes, il suffit de les copier en appuyant sur y. Collez ensuite les lignes copiées en appuyant sur p.

2
Taras Vaskiv

Vim's :help index décrit g comme:

|g|             g{char}            extended commands, see |g| below

Faites défiler vers le bas (ou :help g) pour une liste.

2
Matthew Slattery

En plus de :91,96y a qui tire (y) les lignes 91 à 96 dans le registre a, (collé avec "ap), les lignes tirées peuvent être ajoutées au registre avec:

:91,96y A

C'est à dire. la mise en majuscule du registre A provoque une opération d'ajout dans le registre a au lieu d'un remplacement. La capitalisation du registre fonctionne toujours comme ceci, par ex. :let @A=';' ajoute un ; pour enregistrer a.

En utilisant des lignes de références plus (+) ou moins (-) par rapport à la position actuelle du curseur:

:-10,+10y b

C'est à dire. il tirerait (y) 21 lignes autour de la position actuelle du curseur et les placerait dans le registre b.

Une absence d'entrée représente également la position actuelle du curseur, ce qui signifie que ceci:

:-5,y a

ramènerait le texte de 5 lignes au-dessus de la position actuelle du curseur dans le tampon nommé a, et:

:,+5y a

tirerait les 5 lignes après la position actuelle du curseur dans le tampon a.

Remarque: Si vous avez une macro dans le tampon a, elle a juste été remplacée par le précédent yank, car les registres yank et les registres de macro sont vraiment la même chose. C'est pourquoi, par coïncidence, vous pouvez coller une macro, la modifier, puis la replacer dans son registre. J'utilise personnellement des lettres atteintes par ma main gauche pour les yanks et des lettres atteintes par ma main droite pour les macros.

Le déplacement de blocs de texte ressemble à ceci:

:+10,+13m.

ce qui signifie déplacer les quatre lignes positionnées 10 lignes en avant du curseur actuel, en dessous de la ligne actuelle.

Addendum

J'ai déjà confondu ya dans :91,95ya a être en quelque sorte synonyme de ya{motion} où la motion a été fournie par 91,95. C'était incorrect et le "a" dans ya est complètement inutile. À ma défense, mon help yank ne signifie pas que ya est un alias possible de yank.

0
Paul Parker