Déplacer le curseur à la fin du fichier dans vim


409

Lorsque je veux que le curseur aille à la fin du fichier (c'est-à-dire à la fin de la dernière ligne) dans Vim, je dois taper six touches:

<ESC>G$a- ce qui se traduit par ESC+ Shiftg+ Shift4+ asur ma disposition de clavier.

Comment puis-je le faire plus efficacement?

Comme je travaille régulièrement sur de nombreuses machines différentes, je ne peux pas toujours changer .vimrc, donc je cherche des réponses sans avoir à modifier ou créer ce fichier.


8
Je veux juste souligner que les commandes que vous montrez doivent être représentées comme suit:, <esc>G$avous montrez le décalage en mettant la lettre en majuscule. Et vous montrez un $au lieu de shift + 4, car peu importe le clavier, la fonction de cette touche ( $) ne changera pas, mais si vous faites shift + 4 alors la signification peut changer. :)
greduan

3
@Eduan Je suis généralement d'accord, mais dans ce cas, les touches sont également pertinentes. J'ai ajouté les deux :-)
timss

@Eduan Pour la question de l'efficacité, les commandes réelles n'ont pas d'importance. Les frappes font. Et comme il y a d'énormes différences dans la disposition du clavier entre les langues, je ne sais pas où se $trouve un clavier américain, et il se pourrait bien que pour les Américains, entrer la commande $ne soit qu'une touche. Je voulais montrer explicitement que pour moi (avec un clavier allemand), ce sont deux touches.

1
@what IC. Je peux comprendre cela. Je voulais juste le signaler, donc à l'avenir, vous savez. :)
greduan

Réponses:


410

Pas besoin d'aller explicitement en fin de ligne avant de faire a, utilisez A;
Ajouter du texte à la fin de la ligne [count] fois

<ESC>GA


3
Si vous souhaitez rester en mode normal, essayez G)(ou <ESC>G)si vous êtes en mode insertion et souhaitez terminer en mode normal sur le dernier caractère). Même nombre de touches, mais pour finir en mode normal au lieu du mode d'insertion. Je trouve cela utile de temps en temps lorsque je veux exécuter une commande normale sur le dernier mot au lieu d'une commande en mode insertion ou d'une modification.
Alejandro

1
@Alejandro Bien qu'utile, )avance les [count]phrases et n'ira donc pas en fin de ligne si par exemple la dernière ligne l'est This is a test. Foo bar.. Cela fonctionnera cependant pour beaucoup de code, ce qui n'est souvent pas considéré comme des phrases et ira donc jusqu'au bout de toute façon.
timss

Si vous prévoyez d'écrire la ligne suivante, <ESC> G oeffectuera le retour chariot et vous mettra en mode insertion sur la ligne suivante (à la fin du fichier), en enregistrant quelques touches supplémentaires.
broc.seib

1
Aussi si vous ne voulez pas passer en mode d'insertion G$.
BladeMight

499

C'est plus rapide. Utilisez simplement ceci

:$

16
Cela ne passe pas à la dernière colonne uniquement à la dernière ligne
Rajeshwar

6
Si vous voulez simplement aller rapidement à la fin du fichier et que vos raccourcis clavier sont foirés, c'est la bonne commande. Merci!
joemar.ct

9
: $ + End le ferait dans ce cas.
karthik

1
Cela nécessite <ENTER> à la fin ainsi que le fait de devoir atteindre la fin de la ligne, ce qui ne la rend pas plus rapide.
Alejandro

1
: $ fait l'affaire! aller à la fin du fichier comme la question posée! merci
Sijan Shrestha

130

Frappez Escpuis appuyez sur: Shift+G


3
Cela va au début de la dernière ligne, pas à la fin du fichier.
Jordan Running

5
cela va à la fin du fichier pour moi , et c'est aussi un joli raccourci clavier facile
Jacob Garby

G conserve le même numéro de colonne (si possible) et passe à la dernière ligne. Jacob était probablement en bout de ligne et Jordan en tête lors de l'exécution de la commande.
run_the_race

39

Pour commencer, il n'y a pas besoin de retour. G$ça ira. Et vous êtes trompeur en comptant <Esc>et adans la longueur d'une commande en mode normal.

Cependant, vous pouvez utiliser Ctrl+ Endsi vous le souhaitez.


8
c'estCtrl-END
zmo

Je n'ai pas End-Key sur mon clavier (si c'est ce que vous voulez dire).

En fait, la réponse par TIMSS montre que j'ai bien compter <ESC>et a, parce qu'il connaissait un moyen de remplacer Shift+$, aavec A.

1
@ ce que la plupart des claviers d'ordinateurs portables ont de nos jours comme fin / haut / bas / gauche / droite avec Fn s'ils n'ont pas de touches home / end
dédiées

22

Je pensais que la question était "Déplacer le curseur à la fin du fichier dans vim"?

Fin de fichier: Esc+ G
Début de fichier Esc+ g(ou ggsi vous êtes déjà dans la zone de commande)


21

La meilleure façon d'accéder à la dernière ligne du fichier est d'utiliser G. Cela déplacera le curseur sur la dernière ligne du fichier.

La meilleure façon d'aller à la dernière colonne de la ligne est avec $. Cela déplacera le curseur dans la dernière colonne de la ligne actuelle.

Donc, juste en faisant, G$vous arrivez à la fin du fichier et à la dernière ligne.

Et si vous voulez entrer en mode d'insertion à la fin du fichier, il vous suffit de le faire GA. En faisant cela, vous accédez à la dernière ligne du fichier et entrez en mode d'insertion en ajoutant à la dernière colonne. :)



11

Si vous prévoyez d'écrire la ligne suivante, ESCGoeffectuera le retour chariot et vous mettra en mode insertion sur la ligne suivante (à la fin du fichier), en enregistrant quelques touches supplémentaires.


6
  • Ctrl + Home = Aller au début du fichier
  • Ctrl + End = Aller à la fin du fichier

3

C'est plus rapide:

<ESC>GA

5
Pourquoi poster une réponse en double, surtout quand elle n'explique pas A?
timss

3

Vous pouvez le mapper sur une clé, par exemple F3, dans .vimrc

inoremap <F3> <Esc>GA

2
Bien que cela soit possible, c'est généralement une mauvaise idée. Visez plutôt la mémoire musculaire et utilisez GAou G$.
timss

Je gagne toujours avec 1 coup de clé cependant :) Sur une note plus sérieuse, si vous avez vraiment besoin de quelque chose de rapide dans vim, apprendre à .vimrc est utile.
Tim

Il serait également bon d'avoir un exemple de carte complet au lieu de dire au PO d'aller le chercher. Puisque si vous ne le trouvez pas, comment l'OP est-il censé le faire?
FDinoff

1
Vous ne "gagnez" rien puisque vous devez vous éloigner de votre homerow. De plus, vous ne pouvez pas l'utiliser sur quelqu'un d'autre config ou même vi, si vous l'utilisez. Vous ne gagnez vraiment pas de temps. Si quoi que ce soit, utilisez C-endcomme mentionné par Hobbs.
timss

Je suis d'accord avec les commentaires ici, mais j'ai nettoyé la cartographie pour vous
D. Ben Knoble

0

Je cherchais le moyen de déplacer le curseur à la fin d'une ligne, puis de le modifier sur un terminal mac, voici comment cela a fonctionné pour moi. Quittez votre mode d'édition, saisissez g_ (c'est «g» puis soulignez sans deux-points à l'avant), puis appuyez simplement sur la touche «a» pour pouvoir «ajouter» du code à vos scripts


Cherchiez-vous peut-être A?
D. Ben Knoble

J'ai essayé A mais cela n'a pas tout à fait fonctionné
Xinyi Xiang

c'est étrange, Aest essentiellement équivalent à$a
D. Ben Knoble

0

Une autre alternative:

:call cursor('.',strwidth(getline('.')))

Cela peut être utile si vous écrivez une fonction. Une autre situation serait lorsque je dois ouvrir un modèle spécifique et passer à la fin de la première ligne, je peux faire:

vi +"call cursor('.',strwidth(getline(1)))"  notetaking_template.txt

Ce qui précède pourrait également être fait avec

vi +"execute ':normal! $'" notetaking_template.txt

Voir également:

vim - Récupère la longueur de la ligne courante


0

Si vous souhaitez coller du contenu du presse-papiers à la fin du type de fichier:

:$ put +

$ ............ last line
put .......... paste 
+ ............ clipboard
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.