Comment passer en fin de ligne dans Vim?

1195

Je sais comment me déplacer généralement en mode commande, en particulier en sautant sur les lignes, etc. Mais quelle est la commande pour passer à la fin de la ligne sur laquelle je suis actuellement?

salt.racer
la source
19
Commandes vim de base couvertes en moins de 10 minutes youtube.com/watch?v=71YTkxUNwmg
eomeroff
14
Quel est le problème avec passer quelques minutes à travers vimtutor? Cela fait déjà partie de votre installation Vim et vous montre les bases.
dash-tom-bang
@ dash-tom-bang Eh bien, ils ont obtenu un score assez élevé ici ... :) Mais oui, vous avez raison, vimtutorc'est super. Ils ne le savaient probablement pas?
Pryftan

Réponses:

2055

Juste la touche $ (signe dollar) . Vous pouvez utiliser Apour passer à la fin de la ligne et passer en mode édition (Ajouter). Pour sauter le dernier caractère non vierge, vous pouvez appuyer sur gpuis sur les _touches.

L'opposé de Aest I(mode d'insertion au début de la ligne), comme un aparté. Appuyez simplement sur ^pour placer votre curseur sur le premier caractère non blanc de la ligne.

dvorak
la source
81
Aller au dernier non viergeg_
SergioAraujo
2
La g_variation est parfois plus utile car elle n'inclut pas les caractères vides
rogercampos
6
La variante _g est vraiment utile lorsque vous travaillez en mode visuel, car elle vous permet d'utiliser la ligne sans nouvelle ligne à la fin.
Greg Robbins
2
Alors que les touches
Début
Vous devez ajouter ^ à la liste.
Tek
304

Comme beaucoup de gens l'ont dit:

  • $ vous amène à la fin de la ligne

mais aussi:

  • ^ou _vous amène au premier caractère non blanc de la ligne, et
  • 0(zéro) vous amène au début de la ligne incl. espace
Rob Wells
la source
Je savais | nous amène au début de la ligne, mais je n'étais pas au courant de 0. Donc, à la fois 0 et | faire exactement la même chose, ouais?
Kamran Bigdely
8
@kami: bien que les descriptions soient différentes, elles semblent se comporter de manière identique. Cependant, la |commande pipe peut prendre un compte, par exemple 3 | pour passer à la troisième colonne.
Paul Ruane
136
  • $ passe au dernier caractère de la ligne.
  • g _ passe au dernier caractère non blanc.

  • g $ va à la fin de la ligne d'écran (lorsqu'une ligne tampon est enroulée sur plusieurs lignes d'écran)

Paul Ruane
la source
J'ai l'impression que g_ est la même chose que $ b
Dave Aaron Smith
3
@DaveAaronSmith: bva au début du mot précédent qui n'est pas du tout la même chose. C'est à peu près équivalent à $ge.
Paul Ruane
9
J'utilise _et g_pour le visual / yanking, comme $copiera / supprimera également le nouveau caractère de ligne (LN).
Ernest
Pour moi, $ va à la fin de la ligne d'écran actuelle (lorsqu'il est encapsulé). Je n'ai pas réussi à comprendre pourquoi. g_est le seul moyen que j'ai trouvé pour arriver à la fin de la ligne.
ezuk
@ezuk $va jusqu'au bout de la ligne même lorsqu'il est emballé pour moi. Je ne connais aucun paramètre pour ajuster son comportement. Peut-être qu'il a été remappé par votre .vimrc en g$?
Paul Ruane
66

La question principale - la fin de la ligne

$ passe en fin de ligne, reste en mode commande

A passe en fin de ligne, passe en mode insertion

Inversement - début de ligne (techniquement le premier caractère non blanc )

^ passe au début de la ligne, reste en mode commande

I (majuscule i) passe au début de la ligne, passe en mode insertion

Plus loin - début de la ligne (techniquement la première colonne indépendamment des espaces )

0 (zéro) va au début de la ligne, reste en mode commande

0i (zéro suivi de minuscules i) passe en début de ligne, passe en mode insertion

Pour ceux qui commencent à apprendre vi, voici une bonne introduction à vi en listant côte à côte les commandes vi au mouvement de curseur et aux touches de raccourci typiques de l'éditeur GUI Windows.

éditeur vi pour les utilisateurs de Windows

ap-osd
la source
3
L'analogue de In'est pas 0mais ^, comme les deux Iet ^passe au premier caractère non blanc de la ligne mais 0passe à la colonne zéro (comme son nom l'indique).
wchargin
@wchargin true, je pensais que je n'arrive pas à trouver ce que 0serait l'analogue de ? (allez au premier caractère (= colonne 0) de la ligne et passez en mode insertion)
franssu
@franssu: Le seul que je connaisse est 0i. :-)
wchargin
@wchargin - Merci pour l'exactitude technique. J'ai mis à jour le message.
ap-osd
42

Si votre ligne actuelle s'enroule autour de l'écran visible sur la ligne suivante, vous pouvez utiliser g $ pour atteindre la fin de la ligne d' écran .

Commodore Jaeger
la source
3
Je viens de découvrir en attendant les commandes haut et bas avec g faire vim déplacer le curseur sur l'écran plutôt que sur la ligne. C'est à dire gj et gk vous permettent de vous déplacer de haut en bas sur une longue ligne. Vraiment utile.
Druckles
1
A également découvert que taper gw et quelque chose semble changer j et k de façon permanente pour se comporter comme ça. Je ne sais pas comment ni pourquoi. Quelqu'un peut-il expliquer cela?
Druckles
4
@Druckles: Un peu de réponse tardive, mais si vous vous demandez toujours (ou si quelqu'un d'autre le lit) gw, ce gqsont des commandes qui reformatent le texte. (voir :h gwet :h gq) Ce qui s'est probablement passé, c'est que vous l'avez fait gw{motion}et que vous avez modifié du texte afin que les lignes de l'écran correspondent aux lignes réelles.
pandubear
14

Le signe dollar: $

David Singer
la source
13

Dans de nombreux cas, lorsque nous sommes à l'intérieur d'une chaîne, nous sommes entourés d'un guillemet double, ou lors de l'écriture d'une instruction, nous ne voulons pas appuyer sur échapper et aller à la fin de cette ligne avec la touche fléchée et appuyer sur le point-virgule ( ;) juste pour terminer la ligne. Écrivez la ligne suivante dans votre fichier vimrc :

imap <C-l> <Esc>$a

Que dit la ligne? Il associe Ctrl + l à une série de commandes. Cela revient à appuyer sur Esc(mode commande), $(fin de ligne), a(ajouter) à la fois.

Pramod
la source
merci pour celui-là. Je voulais ajouter Ctrl-e à mon vim comme aller en fin de ligne comme sur ma première machine et je ne savais pas comment
tristanbailey
1
Comme le dit la réponse acceptée, vous pouvez appuyer sur A pour faire la même chose.
trysis
4
@trysis vous avez mal compris, cela ne s'éloigne pas du mode d'édition qui est assez sympa.
Marconi
2
Tu as raison. vimvous permet certainement de faire beaucoup plus en beaucoup moins de temps avec des choses comme ça. @razorxpress, un ajustement mineur serait imap <C-l> <Esc>A, ce qui rend Ctrl + l l'équivalent d'appuyer sur Esc(quitter le mode d'insertion), puis A(ajouter à la fin de la ligne).
trysis
3
Je pense que la façon la plus idiomatique de cartographier cela seraitinoremap <C-l> <C-o>A
bennyty
12

L'avantage de la touche «Fin» est qu'elle fonctionne en mode normal et en mode d'insertion.

'$' fonctionne uniquement en mode normal / commande mais il fonctionne également dans l'éditeur vi classique (bon à savoir lorsque vim n'est pas disponible).

Diastrophisme
la source
38
À quoi sert le mode d'insertion?! Aucun citoyen décent ordinaire n'y va après la lumière du jour. Vous savez ce qui se passe là-dedans, non? Le code disparaît là, tu sais? Il disparaît et ne retentit plus jamais.
Tour
3
Merci pour cela, car j'aime rester en mode insertion une fois que je l'ai entré. Malheureusement, mon ordinateur portable n'a pas de touche de fin. :(
Ray
12

Notez également la distinction entre la ligne (ou peut-être la ligne physique) et la ligne d'écran . Une ligne se termine par le caractère de fin de ligne ("\ n"). Une ligne d'écran est tout ce qui apparaît comme une seule ligne de caractères dans votre terminal ou dans votre écran. Les deux se séparent si vous avez des lignes physiques plus longues que la largeur de l'écran, ce qui est très courant lors de la rédaction d'e-mails, etc.

La distinction apparaît également dans les commandes de fin de ligne.

  • $et 0passer à la fin ou au début de la ligne ou du paragraphe physique, respectivement:
  • g$et g0passez à la fin ou au début de la ligne d'écran ou du paragraphe, respectivement.

Si vous préférez toujours ce dernier comportement, vous pouvez remapper les clés comme ceci:

:noremap 0 g0
:noremap $ g$
Loevborg
la source
1
Comment accéder au dernier espace non blanc de la ligne? (que ce soit une ligne d'écran ou une ligne physique)
Kamran Bigdely
g_est le dernier espace non blanc de la ligne physique . Que diriez-vous de la ligne d'écran?
trysis
10

Appuyez sur Apour passer en mode édition à partir de la fin de la ligne.

Brian
la source
9

Ou il y a la réponse évidente: utilisez la Endclé pour aller au bout de la ligne.

davr
la source
1
Ouais, le terminal mac est celui que j'ai remarqué qui détourne les clés et ne les transmet pas aux éléments exécutés à l'intérieur du terminal. L'une des choses qui m'ennuie chaque fois que j'utilise un Mac un peu.
davr
L'intérêt d'utiliser vim n'est pas d'avoir à utiliser des touches comme «End». Ne quittez jamais le domicile.
Jon Thoroddsen
7
Sur Mac, il n'y a pas de touche Fin.
kenorb
1
@kenorb Il y avait quand j'ai posté le commentaire ... mais Apple aime supprimer des fonctionnalités au fil des ans. netdna.webdesignerdepot.com/uploads/2009/01/… c'est en fait l'un de mes claviers préférés de tous les temps
davr
9

Je ne vois pas de raccourci clavier pour macbook pour utiliser vim dans un terminal standard. J'espère que cela aidera quelqu'un. Pour les utilisateurs de macOS (testé sur macbook pro 2018):

fn+ - passer à la ligne de départ

fn+ - passer à la ligne de fin

fn+ - déplacer la page vers le haut

fn+ - déplacer la page vers le bas

fn+ g - déplace le curseur au début du document

fn+ shift + g - déplace le curseur à la fin du document

Pour les deux dernières commandes, il faut parfois taper deux fois.

Alexander Yushko
la source
6

Peut-être sans rapport, mais si vous souhaitez commencer une nouvelle ligne après la ligne actuelle, vous pouvez utiliser o n'importe où dans la ligne.

graywh
la source
3

L'option la plus simple serait de saisir $. Si vous travaillez avec des blocs de texte, vous pourriez apprécier la commande {et }afin de déplacer un paragraphe en arrière et en avant, respectivement.

paranza
la source
2

J'étais habitué à Home / End à me placer au début et à la fin des lignes en mode Insertion (depuis Windows et je pense que Linux), que Mac ne prend pas en charge. C'est particulièrement ennuyeux car lorsque j'utilise vim sur un système distant, je ne peux pas non plus le faire facilement. Après quelques essais et erreurs douloureux, j'ai trouvé ces .vimrclignes qui font la même chose, mais liées à Ctrl-A pour le début de la ligne et Ctrl-D pour la fin de la ligne. (Pour une raison quelconque, Ctrl-E, je suppose, est réservé ou du moins je ne pouvais pas trouver un moyen de le lier.) Profitez-en.

:imap <Char-1> <Char-15>:normal 0<Char-13>
:imap <Char-4> <Char-15>:normal $<Char-13>

Il y a un bon tableau ici pour les codes de caractères de contrôle ASCII ici pour les autres:

http://www.physics.udel.edu/~watson/scen103/ascii.html

Vous pouvez également faire Ctrl-V + Ctrl-, mais cela ne colle pas aussi bien à des endroits comme celui-ci.

Marcus
la source