Je suis à l'origine un utilisateur de Vim, l'éditeur le plus dépouillé (question interface) et le plus rapide qui soit, fourni avec Linux. J'ai essayé aussi XEmacs pendant quelques années, mais je suis revenu à Vim car j'aime la concision de ses "raccourcis clavier" (commandes). C'est pourquoi j'avais au début un a priori négatif sur Eclipse, un logiciel qui met de longues secondes à démarrer et qui consomme beaucoup de mémoire. Puis le matériel est devenu puissant et Eclipse est arrivé à maturité, alors j'ai commencé à l'apprécier. Mais j'ai fini par revenir à Vim pour sa rapidité. Voici donc mon aide-mémoire Eclipse / Vim, pour n'oublier ni l'un ni l'autre.
Ces raccourcis fonctionnent aussi (à peu près) dans Netbeans ou Android Studio, en choisissant les réglages clavier d'Eclipse.
On remarquera que les commandes de Vim ont une signification en anglais, par exemple ct< signifie change till < (changer jusqu'au caractère <), yiw signifie yank inner word (copier l'intérieur du mot), va" signifie visual around " (faire une sélection visuelle entourant les caractères ")
J'ai indiqué les touches par cette présentation et les commandes Vim ou le code par cette présentation
.
Action | Vim | Eclipse |
---|---|---|
Aller à la ligne numéro 123 | :123 ou 123G |
Ctrl l |
Numéroter les lignes ou pas | :set number ou :set nonumber |
(dans les préférences mais pas de raccourci ?) |
Aller de la parenthèse fermante à l'ouvrante et réciproquement | % (fonctionne aussi sur des balises HTML/XML avec le plugin matchit) | Maj Ctrl p |
Aller au début du bloc { } | [{ | Maj Ctrl p |
Aller à la fin du bloc { } | ]} | Maj Ctrl p |
Aller au début de la fonction/méthode courante | [m | Maj Ctrl ⬆ |
Aller au prochain paragraphe | } | (?) |
Aller au milieu de la fenêtre | M (Middle) | (?) |
Aller en bas de la fenêtre | L (Low) | (?) |
Aller en haut de la fenêtre | H (High) | (?) |
Aller en début de ligne de texte | ^ | ↖ |
Aller en colonne zéro | 0 | 2 fois ↖ |
Aller au prochain point-virgule | f; (forward) | (?) |
Aller en bout de ligne | $ | Fin ou ↘ |
Insérer en bout de ligne | A | Fin ou ↘ |
Insérer une ligne | o sous la ligne courante ou O au-dessus |
Fin ou ↘ puis Entrée |
Aller à la ligne suivante/précédente |
flèche ou g flèche avec g, la flèche déplace le curseur d'une ligne d'écran, comme dans un traitement de texte, y compris s'il s'agit de la même ligne qui déborde de la largeur de fenêtre avec l'option :set wrap
|
flèche il n'y a pas de concept de ligne vs ligne d'écran |
Liste des fichiers ouverts récemment |
:browse oldfiles Pour filtrer : :browse filter /bidule/ oldfiles
|
Menu File |
Aller au dernier endroit modifié dans le fichier | g; (on peut remonter plusieurs fois en arrière) (liste avec :changes ) (info sauvée dans .viminfo) |
Ctrl q (l'info n'est pas sauvée ?) |
Revenir à l'endroit modifié suivant | g, (on peut le faire plusieurs fois) | (?) |
Répéter la dernière opération (insertion, remplacement, indentation…) | . | (?) |
Répéter 10 fois la dernière opération | 10. | (?) |
Répéter la dernière commande du type :s/foo/bar/gc |
@: une première fois puis @@ les fois suivantes | (?) |
Annuler (undo) |
La dernière modif : u Toutes les modifs de la ligne : U |
Ctrl z |
Rétablir (redo) | Ctrl r | Ctrl y |
Supprimer le caractère sous le curseur | x | Suppr |
Supprimer le caractère à gauche du curseur | X | ⌫ |
Supprimer une ligne | dd | Ctrl d |
Supprimer toutes les lignes qui commencent par foo | :g/^foo/d |
(?) |
Supprimer 5 lignes | 5dd | (?) |
Dupliquer 5 lignes | 5yyP | (?) |
Déplacer une ligne vers le bas | ddp ou avec la commande :move :m +1 |
Alt ⬇ |
Déplacer une ligne vers le haut | dd ⬆ P ou avec la commande :move :m -2 |
Alt ⬆ |
Copier une ligne dans un registre (une sorte de presse-papiers alternatif, :registers pour les lister) |
"ayy (où a est le nom du registre) | (?) |
En particulier, copier dans le presse-papiers de Linux | "+yy (+ est le registre presse-papiers) | |
Coller du texte depuis le presse-papiers |
"+p (pas le Maj Ctrl v du terminal qui est très lent) |
Ctrl v |
Coller tel quel sans indenter | :set paste puis p |
(?) |
Sélectionner toute la ligne | Maj v | ↖ puis Maj Fin |
Sélectionner tout le paragraphe | vip (visual in paragraph) | (?) |
Sélection rectangulaire (verticale) | Ctrl v puis flèche ou } | Maj Alt a puis Maj flèche |
Insérer sur plusieurs lignes | Faire une sélection rectangulaire puis Maj i puis saisir puis Echap | Faire une sélection rectangulaire puis saisir |
Ajouter à la fin sur plusieurs lignes | Faire une sélection rectangulaire puis $A puis saisir puis Echap | (?) |
Remplacer un caractère par un autre, par exemple i | r i | Suppr i |
Écraser au lieu d'insérer | R | Inser |
Joindre deux lignes en une seule |
J reformate avec un espace entre deux gJ ne reformate pas |
(?) |
Joindre plus de deux lignes | VJ ou VgJ | (?) |
Replier tous les blocs de code |
zM Se lit comme pliage (z) Maximal Pour PHP : dans .vimrc ajouter let php_folding = 1
|
Maj Ctrl / du pavé numérique |
Déplier tous les blocs de code |
zR Se lit comme pliage (z) Réduit |
Ctrl * du pavé numérique |
Déplier/replier le bloc sous le curseur |
za Se lit comme pliage (z) alterné |
(?) |
Replier les lignes sélectionnées |
zf il faut d'abord être en méthode de pli manuelle :set foldmethod=manual
|
(?) |
Correction orthographique du mot sous le curseur | :set spell spelllang=fr puis z= |
activer dans Window > Preferences puis Ctrl 1 |
Reformater un texte à 75 caractères de large | Sélectionner le texte puis passer au shell :!fmt |
(?) |
Chercher un fichier dont le nom contient foo |
:e **/*fooTabulation Plus pratique avec l'option :set wildmenu et avec :set wildmode=list:full
|
Maj Ctrl r foo |
Chercher une classe ou une variable ou une fonction | Avec le programme ctags et le plugin vim-autotag ::tselect MaClasse |
Maj Ctrl t |
Chercher les utilisations de la classe, la variable ou la fonction sous le curseur |
Avec cscope ou GNU Global ? ou sinon, palliatif : :vimgrep Ctrl r Ctrl w **/*.php | cwindow
|
Maj Ctrl g |
Outline : visualiser les classes, variables, fonctions |
Avec le plugin Tagbar:Tagbar
|
Ctrl o |
Chercher foo dans l'éditeur |
/foo (puis :noh pour désactiver la surbrillance jusqu'à la prochaine recherche)
|
Ctrl f |
Chercher en ignorant la casse |
Juste une fois : /foo\c Tout le temps : :set ignorecase ou :set ic
|
Cocher ignorer la casse |
Chercher en respectant la casse |
Juste une fois, si on a fait :set ic : /foo\CTout le temps : :set noignorecase ou :set noic
|
Décocher ignorer la casse |
Savoir si on est sensible à la casse ou pas | :set ic? |
(sans objet) |
Chercher le mot sous le curseur | * (pas besoin de le sélectionner) | Le sélectionner puis Ctrl f |
Chercher le texte sélectionné |
y / Ctrl r " (on copie le texte sélectionné puis on le colle dans la ligne de commande avec Ctrl r ", cf. :help <C-R> )
|
Ctrl k |
Chercher le mot sous le curseur dans tous les fichiers |
:vimgrep Ctrl r Ctrl w ** puis :cwindow ou :grep -nri Ctrl r Ctrl w . puis :cw ou :vimgrep Ctrl r Ctrl w ** | cw |
Ctrl h |
Chercher dans le fichier/buffer courant et afficher la liste des correspondances |
:vimgrep foo % | cw puis aller à la correspondance suivante avec :cnext
|
(?) |
Mettre en surbrillance toutes les occurences de la recherche | :set hls (highlight search) |
Maj Alt o |
Remplacer foo par bar dans tout le fichier | :%s/foo/bar/g |
Ctrl f puis cliquer sur "Tout remplacer" |
Remplacer foo par bar dans tout le fichier avec confirmation | :%s/foo/bar/gc |
Ctrl f puis ne pas cliquer sur "Tout remplacer" |
Remplacer foo par bar dans la sélection | Sélectionner puis :s/foo/bar/g |
Ctrl f puis cliquer sur "Remplacer dans la sélection" |
Renommer une variable dans un bloc |
D'abord chercher la variable avec * puis sélectionner le bloc avec va{ puis commencer à saisir la commande :s/ récupérer la recherche de variable par Ctrl r / et enfin pour confirmer chaque occurence /gc Mis bout à bout, ça donne quelque chose comme :'<,'>s/\<foo\>/bar/gc
|
Menu Refactor, Rename |
Faire un autre remplacement dans la même sélection | gv pour faire réapparaître la sélection puis :s etc... |
(sans objet) |
Refaire un remplacement antérieur | :s ⬆ |
Ctrl f puis chercher dans le menu déroulant |
Passer un mot tout en majuscules | gUw (go Uppercase word) | (?) |
Passer un mot tout en minuscules | guw | (?) |
Remplacer jusqu'au prochain caractère < sans l'inclure | ct< | (?) |
Remplacer le contenu d'une balise XML/HTML | cit (change in tag) | (?) |
Sélectionner jusqu'au prochain caractère < sans l'inclure | vt< | (?) |
Sélectionner le texte entre guillemets |
vi" (visual in ") Y compris les guillemets : va" (visual around ") |
Maj Alt ➡ y compris les guillemets |
Sélectionner le mot sous le curseur | viw (visual in word) | Maj Alt ➡ |
Effacer une chaîne de caractères y compris ses guillemets | da" (delete around ") | (?) |
Compter le nombre d'occurence de foo | :%s/foo/&/gn |
(?) |
Compter le nombre de mots et de lignes de la sélection | g Ctrl g | (?) |
Ajouter <b> </b> autour de la première lettre de plusieurs mots |
Avec une macro : qa affiche Enregistrement @a puis i saisir <b> puis se déplacer d'un caractère à droite et saisir </b> Échap pour sortir du mode insertion q pour finir d'enregister la macro puis se positionner devant chaque lettre à mettre en gras et faire @a
|
(il y a des macros aussi, mais je n'ai jamais essayé) |
Ajouter <b> </b> autour de la sélection courante |
s,\%V.*\%V,<b>&</b>, Beaucoup plus simple avec le plugin vim-surround S <b> (c'est un S majuscule) |
(?) |
Remplacer <b> </b> par <a href="…"> </a> |
Avec le plugin vim-surround cst <a href="…"> (change surrounding tag) |
(?) |
Supprimer <a href="…"> </a> |
Avec le plugin vim-surround dst (delete surrounding tag) |
(?) |
Remplacer les guillemets simples par des doubles | Avec le plugin vim-surround cs'" | (?) |
Ajouter des guillemets autour du mot sous le curseur | Avec le plugin vim-surround ysiw" | (?) |
Ajouter <li> </li> autour de plusieurs lignes |
Avec le plugin vim-surround Sélectionner les lignes avec Maj v puis :normal yss<li> :normal permet d'appliquer la commande yss sur plusieurs lignes
|
(?) |
Ajouter des parenthèses autour de la sélection |
Avec le plugin vim-surround Sans espaces S) Avec espaces S( |
(?) |
Supprimer les espaces inutiles dans maFonction( $truc ) | Avec le plugin vim-surround cs() | (?) |
Scroller l'éditeur sans déplacer le curseur |
Vers le bas Ctrl e Vers le haut Ctrl y |
Ctrl flèche haut/bas |
Déplacer le curseur d'un mot | w (word) ou b (beginning) ou e (end) ou Maj flèche gauche/droite | Ctrl flèche gauche/droite |
Déplacer le curseur d'un bloc de caractères (seuls les espaces sont comptés comme séparateurs) | W ou Ctrl flèche gauche/droite | (?) |
Retourner à la position précédente du curseur |
Ctrl o (rouvre les fichiers si besoin) (liste avec :jumps )
|
Alt flèche gauche |
Retourner à la position suivante du curseur | Ctrl i | Alt flèche droite |
Sur une fonction : afficher sa documentation | K ouvre le manuel pour le C, sinon il faut mettre dans .vimrc quelque chose comme nnoremap K :exe '!firefox http://php.net/manual-lookup.php?pattern=<cword>&scope=quickref'<CR><CR> |
F2 |
Dans le même esprit : traduire en anglais le texte sélectionné | Mettre dans .vimrc vnoremap <Leader>tr y:exe '!firefox "https://translate.google.com/\#fr/en/' . substitute(strtrans(@"), '\^@', ' ', 'g') . '"'<CR><CR> puis utiliser avec \tr |
(?) |
Sur une fonction ou une variable : aller à sa déclaration |
Avec le programme ctags et le plugin vim-autotag : Ctrl ] ou g] ou sinon, sans plugin, aller à la première déclaration dans le fichier : gd |
F3 |
Sur une fonction : afficher la hiérarchie de classes (héritage, parents et descendants) | (?) | F4 |
Compléter le nom de la fonction ou la variable |
Ctrl x Ctrl o (sans sortir du mode insertion) Pour avoir systématiquement la liste de correspondances et la signature des fonctions |
Ctrl espace |
Compléter le mot (quel que soit le contexte) |
Ctrl p (sans sortir du mode insertion) Pour annuler la complétion : Ctrl e Peut servir aussi à répéter le dernier mot saisi, par exemple |
Alt / |
Compléter par plusieurs mots précédents |
Ctrl x Ctrl p (sans sortir du mode insertion) Autant de fois que de mots à ressortir |
(?) |
Fermer automatiquement les parenthèses, crochets, accolades, guillemets |
Installer le plugin Auto Pairs Note : il y a un bug avec les circonflexes |
(installé d'office) |
Insérer les imports | En PHP avec le plugin vim-php-namespace, en mode insertion, derrière la classe à importer \u | (propose par défaut) |
Trier/Organiser les imports | En PHP avec le plugin vim-php-namespace \s | Maj Ctrl o |
Utiliser des snippets (bribes de code) | Installer UltiSnips | (propose par défaut) |
Créer ses abréviations ou snippets |
Utiliser UltiSnips (:help UltiSnips )(exemple) ou sinon mettre dans .vimrc abbreviate HR Hervé Renault <adresse@mail> puis pour utiliser saisir HR suivi d'un espace |
Dans Window > Preferences, chercher template et ajouter dans l'éditeur souhaité |
Commenter la ligne | Avec le plugin NERD Commenter \cc | Maj Ctrl c |
Décommenter la ligne | Avec le plugin NERD Commenter \cu | Maj Ctrl c |
Commenter un bloc | Avec le plugin NERD Commenter \cm (de multiples lignes) |
Maj Ctrl c |
Décommenter un bloc | Avec le plugin NERD Commenter \cu | Maj Ctrl c |
Indenter une ligne | >> | Tabulation |
Désindenter une ligne | << | Maj tabulation |
Indenter une sélection | > | Tabulation |
Corriger l'indentation |
D'une sélection de lignes = Du fichier entier gg=G |
Ctrl i |
Remplacer l'indentation tabulation par 4 espaces | :%!expand -i -t 4 |
Ctrl i |
Reformater le code (pas seulement l'indentation) |
Avec le plugin vim-php-cs-fixer \pcf ou :call PhpCsFixerFixFile() (saisir :call Php Tabulation)
|
Maj Ctrl f ou installer PDT Extension group ou pour Netbeans, NetBeans PHP CS Fixer |
Afficher les espaces et tabulations en trop |
Mettre dans .vimrc :
highlight RedundantSpaces term=standout ctermbg=Grey guibg=#ffddcc
|
Obligé d'afficher tous les caractères invisibles ? Window > Preferences > General > Editors… |
Vérifier la syntaxe |
:!php -l % Plutôt utiliser le plugin Syntastic (et pour le désactiver temporairement :SyntasticToggleMode )
|
(fait automatiquement) |
Contrôler la qualité du code PHP | Installer phpcs, phpmd et le plugin Syntastic | Installer PDT Extension group |
Aller à l'erreur suivante / précédente |
Avec les plugins Syntastic, phpcs, phpmd:lnext :lprevious Plus pratique pour moi, dans ~/.vimrc :
nnoremap <c-n> :lnext<CR>
parce que je n'utilise jamais Ctrl n et Ctrl p pour me déplacer.
|
Ctrl , |
Run | Utiliser Ctrl z ou un autre terminal ou screen pour scinder le terminal ou tmux | Ctrl F11 |
Debug |
Avec le plugin Vdebug:Breakpoint ou F10 à la ligne souhaitéeF5 pour lancer le débogueur ajouter ?XDEBUG_SESSION_START=1 à l'URLF5 pour aller au premier breakpoint F2, F3, F4 pour avancer (step over, in, out) F12 pour évaluer la variable sous le curseur, etc. :help Vdebug
Pour ne pas avoir à ajouter XDEBUG_SESSION_START=1 à l'URL, ajouter |
F11 |
Basculer la perspective (layout) dans Eclipse = changer d'onglet (tab) dans Vim |
Créer un onglet dans Vim :tabnew puis passer à l'onglet suivant ou précédent gt gT |
Ctrl F8 |
Afficher l'explorateur de fichiers | Avec le plugin NERD Tree :NERDTree |
(affiché par défaut) |
Afficher la liste des derniers fichiers ouverts | :browse old |
voir menu File |
Afficher le fichier courant dans l'explorateur de fichiers | :NERDTreeFind |
Maj Alt w Explorer ou cliquer sur l'icône Link with Editor |
Passer d'un panneau à l'autre (éditeur, outline, explorateur, etc.) | Ctrl w flèche |
Ctrl Tabulation ou pour l'éditeur : F12 |
Fermer un panneau d'Eclipse ou une fenêtre de Vim | Ctrl w q ou plus simplement :q |
Ctrl w |
Fermer tout sauf la fenêtre courante | :only |
(?) |
Intervertir deux panneaux / fenêtres | Ctrl w x | (?) |
Vim : déplacer la fenêtre courante dans un nouvel onglet | Ctrl w T | |
Maximiser le panneau (éditeur ou autre) (bascule max/normal si plusieurs fois) |
Ctrl w _ pour une fenêtre horizontale Ctrl w | pour une fenêtre verticale ou sinon en activant la souris : :set mouse=a puis déplacer la ligne de séparation
|
Ctrl m |
Scinder un éditeur |
:split ou Ctrl w sou verticalement :vsplit ou :vs ou Ctrl w v |
Ctrl { ou Ctrl _ |
Ouvrir un fichier en scindant la fenêtre | :new foo/bar.php ou verticalement :vnew |
(sans objet) |
Ouvir un ficher dans un nouvel onglet (Eclipse) = dans un nouveau buffer (Vim) | :e fichier |
(s'ouvre par défaut dans un nouvel onglet) |
Ouvrir plusieurs onglets (Eclipse) = plusieurs buffers (Vim) | :e *.php |
Ctrl clic dans l'explorateur et ouvrir |
Passer à l'onglet = au buffer suivant / précédent | :bn :bp (pour changer de buffer sans avoir à sauver les modifs en cours :set hidden ) |
Ctrl ⇞ Ctrl ⇟ Netbeans : Ctrl Tabulation |
Lister les onglets (Eclipse) = les buffers (Vim) |
:ls ou :buffers Pour les afficher en permanence, on peut utiliser un plugin tel que vim-airline |
Ctrl e |
Aller à un onglet (Eclipse) = les buffers (Vim) par son nom | :b nom ou par son numéro n :bn |
Ctrl e nom |
Aller au dernier buffer visité | :b# |
(?) |
Fermer un onglet (Eclipse) = un buffer (Vim) |
:bd Pour fermer les buffers 3 à 5 : :3,5bd Pour fermer les buffers 2, 4, et 7 : :bd 2 4 7
|
Ctrl w |
Ouvrir un fichier dont le chemin est sous le curseur |
gf dans la fenêtre courante ou Ctrl w f en scindant la fenêtre ou Ctrl w gf dans un onglet |
(?) |
Ouvrir un fichier dont le chemin et le numéro de ligne sont sous le curseur du style /foo/bar:123 |
gF dans la fenêtre courante ou Ctrl w F en scindant la fenêtre ou Ctrl w gF dans un onglet |
(?) |
Sauver la session en cours (fichiers ouverts) |
:mksession ma_session.vim Récupérer la session : vim -S ma_session.vim ou dans Vim :source ma_session.vim Ne fonctionne bien qu'avec les buffers, pas avec NERDTree ou Tagbar donc il faut faire avant :mksession
|
(fait par défaut) |
Il y en a d'autres encore. On peut les retrouver dans Eclipse par Help > Key Assist (raccourci : Maj Ctrl L) et dans Vim par :help
Effacer un mot dans la ligne de commande de Vim | Ctrl w |
---|---|
Modifier une commande dans l'historique |
q: ou dans la ligne de commande Ctrl fmodifier puis Entrée pour exécuter ou :q
|
Démarrer Vim avec les réglages par défaut, sans plugins (pratique pour éditer des fichiers énormes) |
vim -u NONE fichier
|