web-dev-qa-db-fra.com

Quelles sont les commandes / touches Vim les plus utilisées?

Je suis une programmation Ruby qui essaie de passer de Textmate à MacVim et j’ai du mal à parcourir les listes énormes de choses que vous pouvez faire VIM Je suis fatigué d'entendre "Vous pouvez utiliser" I "pour insérer du texte ou" a "pour ajouter du texte après le caractère ou" A "pour ajouter du texte à la fin de la ligne, ou… "Je ne peux pas imaginer que tout le monde utilise les 20 touches du clavier différentes pour naviguer dans le texte, environ 10 touches pour commencer à ajouter du texte et 18 façons de sélectionner visuellement un bloc interne. Ou vous !?

Ma feuille de triche idéale serait les 30 à 40 touches ou commandes les plus utilisées que tout le monde utilise pour écrire du code quotidiennement, ainsi que les plugins indispensables que les rubyistes utilisent quotidiennement et les 10 commandes les plus utilisées. En théorie, une fois que j'ai cela et que je commence à devenir aussi compétent en VIM que je suis dans Textmate, , alors je peux commencez à apprendre les milliers de commandes VIM qui me rendront plus efficace.

Ou est-ce que j'apprends VIM complètement dans le mauvais sens?

100
Clinton Judy

Voici une fiche de conseils que j'ai écrite une fois, avec les commandes que j'utilise réellement régulièrement:

Les références

Général

  • Presque toutes les commandes peuvent être précédées d'un nombre pour un nombre de répétitions. par exemple. 5dd supprimer 5 lignes
  • <Esc> vous permet de sortir de n'importe quel mode et de revenir au mode commande
  • Les commandes précédées de : sont exécutées sur la ligne de commande en bas de l'écran.
  • : help help avec n'importe quelle commande

La navigation

  • Mouvement du curseur: ← h j k l →
  • En mots:
    • w Mot suivant (par ponctuation); [~ # ~] w [~ # ~] Mot suivant (par espaces)
    • b retour Word (par ponctuation); [~ # ~] b [~ # ~] retour Word (par des espaces)
    • e fin du mot (par la ponctuation); [~ # ~] e [~ # ~] fin du mot (par des espaces)
  • En ligne:
    • 0 début de ligne; ^ premier espace non blanc
    • $ fin de ligne
  • Par paragraphe:
    • { ligne vide précédente; } ligne vierge suivante
  • Par fichier:
    • gg début du fichier; [~ # ~] g [~ # ~] fin du fichier
    • 123G aller à un numéro de ligne spécifique
  • Par marqueur:
    • mx mettre la marque x; 'x allez pour marquer x
    • '. aller à la position de la dernière modification
    • '' retourne au dernier point avant le saut
  • Défilement:
    • ^ F transférer en plein écran; ^ B en arrière plein écran
    • ^ D demi-écran en bas; ^ U jusqu'à la moitié de l'écran
    • ^ E défile d'une ligne vers le haut; ^ Y défile d'une ligne vers le bas
    • zz ligne de curseur centrale

Édition

  • u annuler; ^ R rétablir
  • . répéter la dernière commande d'édition

Insertion

Toutes les commandes d'insertion sont terminées par <Esc> pour revenir au mode commande.

  • i insérer du texte au niveau du curseur; [~ # ~] i [~ # ~] insère du texte en début de ligne
  • a ajoute du texte après le curseur; [~ # ~] a [~ # ~] ajoute du texte après la fin de la ligne
  • o ouvre une nouvelle ligne ci-dessous; [~ # ~] o [~ # ~] ouvre la nouvelle ligne ci-dessus

En changeant

Toutes les commandes de changement sauf r et [~ # ~] r [~ # ~] se terminent par <Esc> pour revenir au mode commande.

  • r remplace un seul caractère; [~ # ~] r [~ # ~] remplace plusieurs caractères
  • s modifie un seul caractère
  • cw change le mot; [~ # ~] c [~ # ~] passe en fin de ligne; cc change la ligne entière
  • c<motion> _ change le texte dans le sens du mouvement
  • ci ( change entre parenthèses (voir sélection d'objet texte pour plus d'exemples)

Suppression

  • x supprime le caractère
  • dw supprimer Word; [~ # ~] d [~ # ~] supprimer à la fin de la ligne; dd supprimer la ligne entière
  • d<motion> supprime dans le sens du mouvement

Couper et coller

  • yy copie la ligne dans le tampon de collage; dd couper la ligne dans le tampon de pâte
  • p colle le tampon sous la ligne du curseur; [~ # ~] p [~ # ~] coller le tampon au-dessus de la ligne du curseur
  • xp permutez deux caractères ( x pour supprimer un caractère, puis p pour le remettre après la position du curseur)

Des blocs

  • v flux de bloc visuel; [~ # ~] v [~ # ~] ligne de bloc visuel; ^ V colonne du bloc visuel
    • la plupart des commandes de mouvement étendent le bloc à la nouvelle position du curseur
    • o déplace le curseur à l'autre extrémité du bloc
  • d ou x coupez le bloc dans le tampon de pâte
  • y copier le bloc dans le tampon de collage
  • > bloc d'indentation; < bloquer l'indentation
  • gv resélectionner le dernier bloc visuel

Global

  • :% s/foo/bar/g substitut toutes les occurrences de "foo" à "bar"
    • % est un plage qui indique chaque ligne du fichier
    • / g est un drapeau qui modifie toutes les occurrences d’une ligne au lieu de la première

Recherche

  • / recherche en avant; ? recherche en arrière
  • * recherche en avant de Word sous le curseur; # recherche en arrière Word sous le curseur
  • n match suivant dans la même direction; [~ # ~] n [~ # ~] correspond ensuite dans la direction opposée
  • fx transférer au caractère suivant x; Fx en arrière du caractère précédent x
  • ; permet de revenir au même personnage dans la même direction; , revenez au même personnage dans la direction opposée

Des dossiers

  • : w écrit le fichier sur le disque
  • : w name écrit le fichier sur le disque en tant que name
  • [~ # ~] zz [~ # ~] écrit le fichier sur le disque et quitte
  • : n éditer un nouveau fichier; : n! éditer un nouveau fichier sans enregistrer les modifications actuelles
  • : q quitte l'édition d'un fichier; : q! quitte l'édition sans enregistrer les modifications
  • : e éditer à nouveau le même fichier (si modifié en dehors de vim)
  • : e. Explorateur de répertoires

Les fenêtres

  • ^ Wn nouvelle fenêtre
  • ^ Wj jusqu'à la fenêtre suivante; ^ Wk jusqu'à la fenêtre précédente
  • ^ W _ agrandit la fenêtre en cours; ^ W = rend toutes les fenêtres égales
  • ^ W + augmente la taille de la fenêtre; ^ W - diminue la taille de la fenêtre

Navigation de source

  • % passe aux parenthèses/crochets/accolades correspondants, ou au bloc de langue si le module de langue est chargé
  • Gd va à la définition du symbole local sous le curseur; ^ O retourne à la position précédente
  • ^] passe à la définition du symbole global (nécessite le fichier tags); ^ T retourne à la position précédente (pile arbitraire de positions conservée)
  • ^ N (en mode insertion) complétion automatique du mot

Afficher les changements locaux

Vim présente certaines fonctionnalités qui facilitent la mise en évidence des lignes qui ont été modifiées à partir d'une version de base dans le contrôle de source. J'ai créé un petit script vim qui rend cela facile: http://github.com/ghewgill/vim-scmdiff

275
Greg Hewgill

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

C'est la meilleure chose qui ait jamais été d'apprendre le VIM.

19
Justin Thomas

Voici un excellent aide-mémoire pour vim :

enter image description here

11
RDL

Avez-vous parcouru le tutoriel intégré de Vim? Sinon, allez à la ligne de commande et tapez vimtutor. C'est un excellent moyen d'apprendre les commandes initiales.

Vim offre une flexibilité et une puissance incroyables et, si vous êtes comme la plupart des utilisateurs de Vim, vous apprendrez beaucoup de nouvelles commandes et en oublierez les anciennes, puis vous les réapprendrez. L’aide intégrée est utile et mérite une navigation périodique pour apprendre de nouvelles choses.

Il existe plusieurs bonnes FAQ et feuilles de triche pour vim sur Internet. Je recommanderais de chercher vim + faq et vim + cheatsheet. Cheat-Sheets.org # vim est une bonne source, comme tel Vim Tips wiki .

4
the Tin Man

Ce que la plupart des gens font, c'est de commencer avec les bases nues, comme peut-être iywyy, et p. Vous pouvez continuer à utiliser les touches fléchées pour vous déplacer, sélectionner du texte avec la souris, utiliser les menus, etc. Ensuite, lorsque quelque chose vous ralentit, vous recherchez le moyen le plus rapide de le faire et vous ajoutez progressivement de plus en plus de commandes. Vous pouvez apprendre une nouvelle commande par jour pendant un certain temps, puis elle passera à une par semaine. Vous vous sentirez assez productif dans un mois. Après un an, vous aurez un répertoire assez solide et après 2-3 ans, vous ne penserez même plus consciemment à ce que vos doigts sont en train de taper, et cela aura l'air bizarre si vous devez l'épeler pour quelqu'un. J'ai appris vi en 1993 et ​​je reçois encore 2 ou 3 nouvelles commandes par an.

3
Karl Bielefeldt

La feuille de triche de @Greg Hewgill est très bonne. J'ai commencé mon changement de TextMate il y a quelques mois. Maintenant, je suis aussi productif que je l'étais avec TM et je suis constamment étonné par le pouvoir de Vim.

Voici comment j'ai changé . Peut-être que cela peut vous être utile.

Grosso modo, je ne pense pas que ce soit une bonne idée de faire un changement radical. Vim est très différent et il vaut mieux y aller progressivement.

Et pour répondre à votre sous-question, oui, j’utilise tous les jours iaIAoO pour passer en mode insertion. Cela semble certes bizarre au début, mais vous n'y pensez plus vraiment après un moment.

Certaines commandes incroyablement utiles pour toutes les tâches liées à la programmation:

  • r et R pour remplacer les caractères
  • <C-a> et <C-x>à augmenter et diminuer les nombres
  • cit pour changer le contenu d'une balise HTML et ses variantes (cat, dit, dat, ci(, etc.)
  • <C-x><C-o> (orienté vers ,,) pour l'omnification
  • sélection de bloc visuel avec <C-v>
  • etc…

Une fois que vous êtes habitué à la méthode Vim, il devient très difficile de ne pas frapper o ou x tout le temps lors de la modification de texte dans un autre éditeur ou champ de texte.

3
romainl

Mettez ceci dans votre fichier .bashrc pour ouvrir vim avec le dernier fichier édité à la dernière ligne modifiée

alias vil="vim  +\"'\"0"
2
modesto

Je ne peux pas imaginer que tout le monde utilise les 20 touches du clavier différentes pour naviguer dans le texte, environ 10 touches pour commencer à ajouter du texte et 18 façons de sélectionner visuellement un bloc interne. Ou vous !?

Je fais.

En théorie, une fois que j'ai cela et que je commence à maîtriser aussi bien VIM que dans Textmate), je peux alors commencer à apprendre les milliers d'autres VIM commandes qui me rendra plus efficace.

C'est la bonne façon de le faire. Commencez par les commandes de base, puis choisissez celles qui améliorent votre productivité. J'aime suivre ce blog pour des conseils sur la façon d’améliorer ma productivité avec vim.

2
Jeff

tuxfiles.org est un très bon aide-mémoire. Je pense qu'il y a quelques points à apprendre les commandes:

  • Lisez la feuille de triche régulièrement. Ne vous préoccupez pas de toutes les utiliser ou de vous souvenir de toutes les clés, sachez simplement que la commande existe. Recherchez la commande et utilisez-la lorsque vous vous trouvez dans une situation répétitive.
  • Si vous vous trouvez en train de faire quelque chose régulièrement (comme supprimer une ligne entière après un caractère particulier d$), lancez une rapide recherche sur Google pour voir si vous pouvez trouver une commande.
  • Notez les commandes que vous jugez utiles et conservez cette liste où vous pourrez la voir pendant que vous écrivez votre code. Je m'oppose à l'impression de quelque chose et vous encourage plutôt à utiliser les notes post-it pour quelques commandes à la fois.
  • Si possible, observez les autres programmeurs utiliser vim et demandez-leur quelles commandes ils utilisent lorsque vous les voyez faire quelque chose d'intéressant.

Outre ces conseils, vous devez comprendre certains concepts de base.

  • vim utilisera le même caractère pour représenter la même fonction. Par exemple, pour supprimer une ligne après un caractère, utilisez d$. Pour mettre une ligne après un caractère particulier, utilisez v$. Alors remarquez que $ indique que vous allez faire quelque chose jusqu'à la fin de la ligne à partir de l'endroit où se trouve actuellement votre curseur.
  • u est annulé et ctrl+r est refait.
  • mettre un numéro devant une commande l'exécutera à plusieurs reprises. 3dd supprime la ligne sur laquelle se trouve votre curseur et les deux lignes suivantes, de la même façon 3yy va copier la ligne sur laquelle se trouve votre curseur et les deux lignes suivantes.
  • comprendre comment naviguer dans les tampons, utilisez :ls pour lister les tampons, et :bn, :bp pour les parcourir.
  • lisez le tutoriel trouvé dans :help C’est probablement le meilleur moyen d’appréhender les ficelles du métier, ainsi que le reste des commandes que vous apprendrez grâce à son utilisation.
2
amccormack