Navigation ultra-rapide VIM


91

La seule chose qui me manque dans l'utilisation d'autres éditeurs, c'est de trouver ma place avec la souris. Je peux regarder avec mes yeux une zone spécifique du fichier et avec un mouvement de la souris et un clic je suis là. Avec VIM, je dois jjjjjkkkkkjjjhhhh ... presque là hhhhh oh merde j'ai raté 3 caractères, lll.

J'apprends à faire des marques et j'ai trouvé un plugin de marque-pages qui est génial, je peux créer des marqueurs et les détruire avec <f3>et naviguer vers eux avec malheureusement les marques sont oubliées lorsque le fichier est fermé.

Comment naviguez-vous tous dans les fichiers? Je sais que je pourrais aussi faire 5j7k4j5h et ainsi de suite, mais il doit y avoir un plugin qui peut lire mes yeux et placer le curseur là où j'en ai vraiment besoin.

J'ai également appris à utiliser /% pour rechercher un terme spécifique. Cela aide mais tous les caractères correspondants sont mis en évidence tout au long du document.


Excellentes réponses à tous, alors que nous sommes encore sur le sujet, j'ai pensé que je pouvais expérimenter quelque chose comme nG (aller à la ligne Number) f% (trouver le premier caractère de ce que je cherche, ou comme quelqu'un l'a suggéré, utilisez le w pour avancer au mot suivant.
Helmut Granda

Réponses:


172

Essayez $ vimtutor, cela vous apprendra tout ce que vous devez savoir pour commencer.

hjkl sont la pointe du sommet de l'iceberg et sont très rarement utilisés, du moins dans mon cas.

wWEeet BbgegEtous permettent de se déplacer mot par mot:

  • wet ealler de l'avant, Wet Eprendre en compte les espaces et la ponctuation

    " here the * marks the default location of the cursor
    " and each letter shows where you jump when you hit the key.
    
    Latin: Lorem ipsum dolor sit amet.
                       *   e   e    e
                       *   E   E     E
    *    w w     w     w     w   w   w
    *      W     W     W     W   W   W
    
  • bet gerevenir en arrière Bet gEprendre en compte les espaces et la ponctuation

    Latin: Lorem ipsum dolor sit amet.
    b    b b     b     *
    B      B     B     *
         ge    ge    ge*
        ge
         gE    gE    gE*
    

fFtTsont utilisés pour atteindre un caractère particulier sur la ligne courante et ;,sont utilisés pour répéter ce mouvement, dans le même sens pour ;et dans le sens opposé pour ,:

  • fmsaute sur le prochain mavant, Frecule

    Latin: Lorem ipsum dolor sit amet.
    *          fm    ;            ;
               ;     Fm          *
    
  • tmsaute AVANT le prochain mavant, Trecule

    Latin: Lorem ipsum dolor sit amet.
    *         tm    ;            ;
              ;     Tm           *
    

/? sont utilisés pour passer à la première occurrence d'un motif à partir de la position actuelle du curseur:

  • /pattern va de l'avant

    Latin: Lorem ipsum dolor sit amet.
    *            /ips
    
  • ?pattern va en arrière

    Latin: Lorem ipsum dolor sit amet.
    ?Lat             *
    

0$ sont utilisés pour sauter au premier et au dernier caractère de la ligne.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
    0                  *                                     $

^g_ sont utilisés pour sauter au premier et au dernier caractère imprimable de la ligne.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
                ^      *                         g_

Simple et combiné ()[]{}sont utilisés pour déplacer phrase par phrase ou paragraphe par paragraphe ou bloc de code par bloc de code.

<C-b>et <C-f>sont utilisés pour faire défiler l'écran vers l'arrière et vers l'avant.

<C-u>et <C-d>sont utilisés pour faire défiler d'un demi-écran vers l'arrière et vers l'avant.

H, MEt Ldéplacer le curseur vers le haut, au milieu, en bas de la fenêtre, respectivement.

zt, zzEt zbdéplacer la ligne sous le curseur vers le haut, au milieu, en bas de la fenêtre, respectivement.

Etc.

:help motion.txt va souffler votre esprit.


17
Je ne fais généralement pas cela, mais ce commentaire est juste pour vous dire que c'est une excellente réponse!
jojo le

Pour une raison quelconque, je n'avais jamais utilisé H, M ou L auparavant, de bons conseils!
Chris

L'ajout de cela ]}et [{(2 touches) saute à la fin ou au début d'une portée (par exemple, celle définie par{ ... }
Matthew Woo

3
Eh bien, cela ne répond toujours pas vraiment à la question d'OP how to jump to a line he's seeing like using a mouse. Je connais et j'utilise toutes les combinaisons de touches que vous avez mentionnées tout le temps. Mais ce n'est toujours pas aussi efficace que de pointer une souris lors d'un saut à grande distance.
Penghe Geng

ouais H, M, L sont faciles à retenir: Haut, Moyen, Bas;) @Chris
nils petersohn

25

outre la commande motion de vim, je trouve qu'un plugin vim nommé EasyMotion est assez utile pour naviguer, si vous êtes familier avec vimperator ou pentadactyl, EasyMotion ramène simplement le mode hint à vim. voici une démo animée et voici le tutoriel vidéo. J'espère que cela vous sera utile.


L'avantage d'easymotion est que vous pouvez aller n'importe où sur l'écran avec seulement 3 frappes.
Xavier T.

+1: EasyMotion est vraiment un jetpack du mouvement de Vim. (au fait, PreciseJump aussi. En fait, EasyMotion est un fils de PreciseJump)
Dmitry Frank

2
Comment diable l'auteur d'EasyMotion a-t-il obtenu cette ligne de statut super impressionnante dans la démo?
Cyrille

1
La «ligne d'état super impressionnante» est un plugin appelé «Powerline». C'est ici: vim.org/scripts/script.php?script_id=3881
DEzra

pourriez-vous s'il vous plaît mettre à jour l'url de démonstration animée? ça ne marche plus
brauliobo

20

Il existe des millions de façons de se déplacer dans vim, c'est l'un de ses domaines vraiment forts. J'utilise {et }beaucoup, qui montent et descendent jusqu'à la prochaine ligne vierge dans cette direction. %est utile pour aller et venir vers une parenthèse correspondante (de tout type). WetB avancer et reculer par un "mot".

Il pourrait être utile de consulter la section Déplacement du manuel Vim.


4
Il convient probablement également de mentionner la pagination vers le haut et vers le bas en utilisant respectivement Ctl + U et Ctl + D.
Nick

10

vim prend en charge la souris! essayez ceci (dans votre .vimrc):

set mouse=a

Remarque : en tant qu'utilisateur d'écran, j'ai constaté que j'avais également besoin

set ttymouse=xterm2

pour que cela fonctionne.


4
Bon à savoir, cependant, je continuerai toujours à rechercher la navigation rapide parfaite sans avoir besoin de la souris.
Helmut Granda

9

personnellement je préfère utiliser:

"/<chars><enter>" to quickly move to somewhere   ( extremely fast! trust me! )
":<number>" to go to some line, 
"ctrl + f/b" to forward/back
"g;" to move to the last editing place.
"w/b" to move by word
"jklh" to move your cursor to the exact position

5

Avec l'option relativenumber( : help relativenumber - inclus avec Vim 7.3 ), vous pouvez accéder à la ligne sous vos yeux avec le mouvement a [count]kou [count]j, que vous vous laissez déplacer dans la ligne actuelle avec des mouvements comme ftwebexpliqué par @romainl.


Excellente option. Plus rapide qu'easymotion.
Penghe Geng

5

A part {, }, (, ), <number>cb, <number>cB, <number>cWet %, j'utilise des techniques de la navigation:

  • ciw, diw( ciW, diW). etc. pour modifier / supprimer rapidement le mot sous le curseur (y compris les caractères non espace)
  • ci(, ci"( ca(, ca"), etc. pour éditer rapidement entre parenthèses, guillemets (y compris les parenthèses, les guillemets). Il en va de même pour d.
  • Marque avec des lettres MAJUSCULES pour les définir globalement (entre les fichiers) et de manière persistante (lorsque le tampon est fermé). Par exemple, mAcréera une marque globale Aqui sera disponible avec la 'Acommande (ou`A pour respecter la colonne).
  • gf pour aller rapidement au fichier sous le curseur
  • f, t( F, T) pour passer au caractère, avant le caractère à droite (à gauche) (à utiliser ;pour répéter). Celles-ci sont particulièrement utiles pour les commandes det c(à utiliser .pour répéter).
  • ^]pour passer à l'étiquette et ^Tpour reculer.

Et plein d'autres façons de bouger :)

Consultez ceci pour plus d'informations: http://www.thegeekstuff.com/2009/03/8-essential-vim-editor-navigation-fundamentals/

PS Pour les utilisateurs de rails, il existe un plugin rails-vim très utile, vous voudrez peut-être le vérifier aussi.


3

c'est un bon endroit pour apprendre les principales commandes de navigation, une partie de la puissance / vitesse de vim vient de la combinaison du mouvement avec l'action c'est cw-à- dire -> changer le mot, d10j-> supprimer 10 lignes vers le bas etc. Aussi ceci et ceci sont des lectures intéressantes.


2

Vous pouvez :set nohlsearch désactiver la mise en évidence de vos caractères de recherche.

Je navigue aussi beaucoup en utilisant des ctags.


github.com/richoH/dotfiles/blob/master/vimrc Vous y trouverez peut-être d'autres informations utiles.
richo

Merci pour le conseil, je regardais dans votre vimrc et j'ai trouvé votre note où vous avez mis en surbrillance la ligne lorsque vous atteignez 80 caractères lorsque vous écrivez des e-mails ou des documents. Pourquoi écririez-vous un e-mail dans VIM? Je peux comprendre un document pour votre usage personnel mais je ne suis pas sûr d'un e-mail.
Helmut Granda

J'utilise mutt + vim pour lire et écrire la grande majorité de mes e-mails. J'utilise également le plugin it's all text pour écrire beaucoup de contenu Web dans vim. L'habillage de mots est activé pour les e-mails, mais pour les liens, etc., il peut être utile d'avoir un rappel si je ne suis pas formaté correctement ou si les citations imbriquées deviennent trop longues.
richo

0

J'ai écrit un plugin avec une navigation ultra rapide à l'esprit, il s'appelle sans mouvement:

https://github.com/anschnapp/move-less

Il vous permet de rechercher le fichier de trous confortablement en faisant défiler avec (h j k l -keys). Vous ne changez pas la position de votre curseur lors du défilement du site du trou (basé sur une astuce de pliage). Si vous abandonnez votre recherche, vous êtes là où vous avez commencé.

Pour une navigation ultra rapide, l'intention est d'utiliser mon plugin pour obtenir la position cible sur l'écran, puis de sauter à la bonne position via easymotion (ce qui était déjà recommandé par une autre réponse):

https://github.com/easymotion/vim-easymotion

Si vous combinez les deux, vous pouvez même avancer l'historique des sauts et vous pouvez sauter entre votre origine et votre destination cible simplement via <c-o>et <c-i>.

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.