HervéRenault.fr

Mon aide-mémoire Eclipse / Vim

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
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\C

Tout 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 <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 :set completeopt=menuone,preview

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 echo $matches[3]."/".$Ctrl p[1]."/".$Ctrl p[2]; c'est plus rapide que de re-saisir matches deux fois.

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 PhpTabulation)
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
call matchadd('RedundantSpaces', '\(\s\+$\| \+\ze\t\|\t\zs \+\)\(\%#\)\@!')
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>
nnoremap <c-p> :lprev<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ée
F5 pour lancer le débogueur
ajouter ?XDEBUG_SESSION_START=1 à l'URL
F5 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 xdebug.remote_autostart = 1 dans le .ini

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 (?)
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 s
ou 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) = buffer (Vim) :e fichier (s'ouvre par défaut dans un nouvel onglet)
Ouvrir plusieurs onglets (Eclipse) = 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) = 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) = buffer (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) = 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
:tabdo NERDTreeClose 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

Autres détails pour Vim

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 f
modifier 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
Tweet