Quelles sont les commandes / pressions de touches vim les plus utilisées?


112

Je suis un programmeur Ruby qui essaie de passer de Textmate à MacVim, et j'ai du mal à parcourir les listes gargantuesques de choses que vous pouvez faire dans VIM et toutes les touches pour eux. J'en ai assez 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 tout le monde utilise les 20 touches différentes pour parcourir le texte, une dizaine de 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 essentiels absolus que les rubisistes utilisent quotidiennement et les 10 commandes les plus utilisées pour eux. En théorie, une fois que j'ai cela et commencer à devenir aussi compétent dans VIM que je suis dans TextMate, alors je peux commencer à apprendre les milliers d'autres commandes VIM qui me fera plus efficace.

Ou est-ce que j'apprends VIM de la mauvaise façon?


9
Référence obligatoire à cafepress.com/geekcheat.11507711 .
geekosaur

1
Redéfini pour supprimer «ruby» et ajouter des «raccourcis clavier». Cela semble plus approprié.

«Est-ce que j'apprends Vim de la mauvaise façon? - non, il vous suffit de commencer par quelques notions de base et de vous rappeler que vous allez encore apprendre plus de commandes dans un an. Peut-être qu'un jour vous utiliserez vraiment toutes les commandes! Mais personne ne les utilise tous dès le premier jour.
Cascabel

Réponses:


306

Voici une feuille de conseils que j'ai rédigée une fois, avec les commandes que j'utilise régulièrement:

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
  • : aide aide avec n'importe quelle commande

La navigation

  • Déplacement du curseur: ← hjk l →
  • Par mots:
    • w mot suivant (par ponctuation); W mot suivant (par espaces)
    • b mot arrière (par ponctuation); Mot arrière B (par espaces)
    • e mot de fin (par ponctuation); E mot de fin (par espaces)
  • Par ligne:
    • 0 début de ligne; ^ premier non-espace
    • $ fin de ligne
  • Par paragraphe:
    • { ligne vide précédente; } ligne vierge suivante
  • Par dossier:
    • gg début de fichier; G fin de fichier
    • 123G aller au numéro de ligne spécifique
  • Par marqueur:
    • mx marque de jeu x ; 'x aller à la marque x
    • ». aller à la position de la dernière modification
    • '' revenir au dernier point avant de sauter
  • Défilement:
    • ^ F avant plein écran; ^ B arrière plein écran
    • ^ D en bas de la moitié de l'écran; ^ U jusqu'à la moitié de l'écran
    • ^ E fait défiler une ligne vers le haut; ^ Y faites défiler d'une ligne vers le bas
    • ligne du curseur central zz

Édition

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

Insertion

Toutes les commandes d'insertion se terminent par <Esc>pour revenir au mode commande.

  • i insérer du texte au niveau du curseur; J'insérer du texte au début de la ligne
  • un texte d'ajout après le curseur; Un texte d'ajout après la fin de la ligne
  • o ouvrir une nouvelle ligne ci-dessous; O ouvrir une nouvelle ligne ci-dessus

En changeant

  • r remplacer un seul caractère; R remplacer plusieurs caractères
  • s changer un seul caractère
  • cw changer le mot; C passer à la fin de la ligne; cc changer toute la ligne
  • c<motion> change le texte dans le sens du mouvement
  • ci ( changez entre parenthèses (voir la sélection d'objet texte pour plus d'exemples)

Suppression

  • x supprimer le caractère
  • dw supprimer le mot; D supprimer jusqu'à la fin de la ligne; dd supprimer toute la ligne
  • d<motion> supprime dans le sens du mouvement

Couper et coller

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

Blocs

  • v flux de blocs visuels; V ligne de bloc visuel; ^ Colonne de bloc visuel V
    • 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 couper le bloc dans le tampon de collage
  • y copier le bloc dans le tampon de collage
  • > indentez le bloc; < unindent block
  • gv resélectionner le dernier bloc visuel

Global

  • :% s / foo / bar / g remplace toutes les occurrences de "foo" par "bar"
    • % est une plage qui indique chaque ligne du fichier
    • / g est un indicateur qui modifie toutes les occurrences sur une ligne au lieu de la première

Recherche

  • / recherche vers l'avant; ? rechercher en arrière
  • * recherche vers l'avant le mot sous le curseur; # recherche en arrière pour le mot sous le curseur
  • n prochain match dans la même direction; N prochain match dans la direction opposée
  • fx passe au caractère suivant x ; Fx vers l'arrière au caractère précédent x
  • ; passer à nouveau au même caractère dans la même direction; , passer à nouveau au même caractère dans la direction opposée

Des dossiers

  • : w écrire le fichier sur le disque
  • : wname écrire le fichier sur le disque commename
  • ZZ écrit le fichier sur le disque et quitte
  • : n éditer un nouveau fichier; : n! modifier un nouveau fichier sans enregistrer les modifications actuelles
  • : q quitter l'édition d'un fichier; : q! quitter l'édition sans enregistrer les modifications
  • : e modifiez à nouveau le même fichier (s'il est 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_ maximiser la fenêtre courante; ^ W = rendre toutes les fenêtres égales
  • ^ W + augmenter la taille de la fenêtre; ^ W- diminuer la taille de la fenêtre

Navigation à la source

  • % passe à la parenthèse / crochet / accolade correspondante, ou au bloc de langue si le module de langue est chargé
  • gd aller à la définition du symbole local sous le curseur; ^ O retour à la position précédente
  • ^] passe à la définition du symbole global (nécessite un tagsfichier); ^ T retour à la position précédente (pile arbitraire de positions maintenue)
  • ^ N (en mode insertion) complétion automatique des mots

Afficher les changements locaux

Vim possède 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 code source. J'ai créé un petit script vim qui facilite les choses : http://github.com/ghewgill/vim-scmdiff


1
+1 Relativement minime, même si je dois admettre que je ne me retrouve pas à utiliser des commandes de fenêtre ou à naviguer avec autre chose que les touches fléchées / pageup / pagedown / home / end et gg / G. Oh, et pour la navigation par numéro de ligne, vous pouvez également utiliser: 123 (mode commande).

2
Belle feuille de triche. Je rajouterais ^ w ^ w pour faire défiler les fenêtres, : x au lieu de ZZ par souci de cohérence, tx transmets avant le caractère et Tx en arrière.
romainl

Je dois noter que ce ne sont que les bases de ce que j'utilise. J'ai créé cette liste comme un outil pour enseigner le vim à d'autres personnes. J'utilise beaucoup d'autres commandes moins fréquemment et j'ai également mis en place divers alias et macros pour m'aider à utiliser vim plus efficacement.
Greg Hewgill

2
Si vous souhaitez éviter la Escclé (et RSI?), Vous pouvez utiliser ^[. ^cfonctionne aussi (mais ne développe pas les abréviations). Source: vim.wikia.com/wiki/Avoid_the_escape_key
Lian

22

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

C'est la meilleure chose qui soit pour apprendre le VIM.


Je n'ai jamais vu cela auparavant, une référence très cool pour une fois que vous savez ce que font les commandes.
amccormack

3
La partie "graphique" est cependant inutile si vous n'avez pas de clavier qwerty.
romainl

5
Cela m'étonne que la publication d'un lien (qui a déjà été posté à mort) attire autant d'attention tout en faisant un effort supplémentaire que d'autres affiches ne mettent pas ...
Lieven Keersmaekers

Le vainqueur clair dans les messages vim: stackoverflow.com/questions/1218390/…
Justin Thomas


4

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

Vim a une quantité incroyable de flexibilité et de puissance et, si vous êtes comme la plupart des utilisateurs de vim, vous apprendrez beaucoup de nouvelles commandes et oublierez les anciennes, puis les réapprendrez. L'aide intégrée est bonne et mérite une navigation périodique pour apprendre de nouvelles choses.

Il existe plusieurs bonnes FAQ et cheatsheets pour vim sur Internet. Je recommanderais de rechercher vim + faqet vim + cheatsheet. Cheat-Sheets.org # vim est une bonne source, tout comme le wiki Vim Tips .


Je viens de le découvrir et, heureusement, il est installé sur un Mac. Essayer maintenant (à 1 h du matin…)
Clinton

J'utilise vim depuis longtemps, et c'est l'une des premières choses que j'installe sur une machine. MacVim , sur Mac OS est très agréable. J'ai tendance à compiler vim à partir des sources sur la plupart des boîtiers Linux que j'utilise, simplement parce que la plupart des distributions ne sont pas à jour ou n'ont pas le bon support de langage. Je garde une version actuelle de mon répertoire ~/.vimrc, ~/.gvimrcet ~/.vimdans une archive tar lorsque je dois configurer quelque chose. Copier cela et extraire les fichiers me permet d'exécuter vim avec toutes mes commandes et mes couleurs habituelles en quelques minutes sur Windows, Mac et Linux.
The Tin Man

3

Ce que la plupart des gens est de commencer avec les bases nues, comme peut - être i, yw, yyet 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 ajoutez progressivement de plus en plus de commandes. Vous pourriez 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 pas consciemment à ce que vos doigts tapent, et cela semblera étrange si vous devez le préciser pour quelqu'un. J'ai appris vi en 1993 et ​​je prends toujours 2 ou 3 nouvelles commandes par an.


3

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 qu'avec TM et constamment étonné par la puissance 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 iaIAoOjours pour passer en mode insertion. Cela semble certainement étrange au début, mais vous n'y pensez pas vraiment après un certain temps.

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

  • ret Rpour remplacer des caractères
  • <C-a>et <C-x>pour augmenter et diminuer les nombres
  • citde modifier le contenu d'une balise HTML, et ses variantes ( cat, dit, dat,ci( , etc.)
  • <C-x><C-o>(mappé sur ,,) pour l'achèvement complet
  • sélection de bloc visuel avec <C-v>
  • etc…

Une fois que vous êtes habitué à la méthode Vim, il devient vraiment difficile de ne pas frapper oou xtout le temps lors de l'édition de texte dans un autre éditeur ou champ de texte.


2

Je ne peux pas imaginer que tout le monde utilise les 20 touches différentes pour parcourir le texte, une dizaine de 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 à devenir aussi compétent en VIM que Textmate, je peux commencer à apprendre les milliers d'autres commandes VIM qui me rendront plus efficace.

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


2

tuxfiles.org contient une très bonne feuille de triche. Je pense qu'il y a quelques points pour apprendre les commandes:

  • Lisez la feuille de triche régulièrement. Ne vous inquiétez pas de les utiliser tous ou de vous souvenir de toutes les touches, sachez simplement que la commande existe. Recherchez la commande et utilisez-la lorsque vous vous surprenez à faire quelque chose de répétitif.
  • 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 recherche rapide sur Google pour voir si vous pouvez trouver une commande pour cela.
  • Notez les commandes qui vous semblent utiles et conservez cette liste là où vous pouvez la voir pendant que vous écrivez votre code. Je suis contre l'impression de quelque chose et je vous encourage plutôt à utiliser des notes post-it pour quelques commandes à la fois.
  • Si possible, regardez 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 une utilisation de caractère d$. Pour mettre en évidence une ligne après l'utilisation d'un caractère particulier v$. Notez donc que cela $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 nombre devant une commande l'exécutera à plusieurs reprises. 3ddsupprimera la ligne sur laquelle se trouve le curseur et les deux lignes qui suivent, de la même manière3yy , copiera la ligne sur laquelle se trouve le curseur et les deux lignes qui suivent.
  • comprendre comment naviguer dans les tampons utilisés :lspour lister les tampons, et :bn,:bp pour faire défiler à travers eux.
  • Lisez le didacticiel trouvé dans:help Ceci est probablement la meilleure façon d '«apprendre les ficelles du métier», et le reste des commandes que vous apprendrez grâce à l'utilisation.

2

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

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

1

Accédez à Modification efficace avec vim et découvrez ce dont vous avez besoin pour commencer. Tout sur cette page n'est pas essentiel pour commencer, alors choisissez ce que vous voulez.

À partir de là, utilisez vim pour tout. "hjkl", "y" et "p" vous mèneront loin, même si ce n'est pas le moyen le plus efficace. Lorsque vous vous heurtez à une tâche pour laquelle vous ne connaissez pas la clé magique pour la faire efficacement (ou pas du tout), et que vous vous retrouvez à la faire plus d'une fois, allez la chercher. Peu à peu, cela deviendra une seconde nature.

J'ai trouvé vim intimidant il y a de nombreuses lunes (à l'époque où il n'avait pas le "m" à la fin), mais il n'a fallu qu'environ une semaine d'utilisation régulière pour devenir efficace. Je trouve toujours que c'est l'éditeur le plus rapide pour faire des choses.


Le lien vers "Édition efficace avec vim" est maintenant mort. Je pense qu'une alternative peut être trouvée à robertames.com/files/vim-editing.html
Damian Powell
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.