Vim & autres éditeurs de codes pour terminaux de commande
vim pour VI iMproved est une version améliorée de l'éditeur vi qui, lui-même, était une version améliorée de l'éditeur Unix historique ed. Certain lui préférerons l'éditeur emacs qui présente une autre ergonomie. Si vous ne tenez pas à utiliser l'un de ces deux éditeurs de code source parmis les plus réputés au monde, vous pouvez vous rabattre sur nano ou micro, des éditeurs plus simple d'accès, mais moins efficace.
En résumé :
- Les utilisateurs de vim apprécis son fonctionnement à base de modes qui évite d'avoir à saisir des raccourcies claviers nombreux et alambiqués (genre : ctrl+alt+shift+R, alt+meta+shift+F3, …)
- Les utilisateurs d'emacs adore les raccourcis clavier alambiqués et les séances de kiné post session de code 😋
- Les utilisateurs de nano ou micro n'ont pas le courage de mémoriser des séquences de touches qui font gagner des milliers d'heures sur une vie de travail.
- Nano affiche les principaux raccourcies claviers en bas de l'écran
- Micro utilise des raccourcies claviers plus habituel (ctrl+o pour ouvrir, ctrl+s pour enregistrer, ctrl+q pour quitter, …)
Pour plus d'information, vous pouvez consulter la page wikipedia dédié : https://fr.wikipedia.org/wiki/Guerre_d'éditeurs
Pour installer vim, emacs, nano ou micro :
sudo apt install vim vim-airline vim-airline-themes
sudo apt install emacs
sudo apt install nano
sudo apt install micro
Pour choisir l'éditeur a utiliser par défaut lorsqu'un fichier doit-être modifé, entrez la commande :
sudo update-alternatives --config editor
Pour choisir la version de vi a utiliser par défaut, entrez la commande :
sudo update-alternatives --config vi
sudo update-alternatives --config vim
Mini-aide vi
L'ouverture d'un fichier ce fait en appelant vi suivi de l'adresse du fichier :
vi /chemin/absolu/du/fichier
vi chemin/relatif/autre/fichier
VIM est un éditeur de texte modal, c'est à dire qu'il permet de passer d'un mode de fonctionnement à l'autre pour être performant dans chaque scénario. À l'ouverture d'un fichier, le mode « normal » est activé. Il permet de visualiser le document, d'y faire des recherche avec « / », d'entrer des commandes avec « : », et d'opérer certaine transformation du texte déjà présent.
Mode Normal
Navigation simple (si vous n'avez pas de flèche sur votre clavier, exemple : smartphone)
- ← h : aller au caractère précédent
- ↑ j : aller à la ligne suivante
- ↓ k : aller la ligne précédente
- → l : aller au caractère suivant
Navigation étendue
- G : aller à la fin du document
- gg : retourner au début du document
- $ : aller à la fin de la ligne
- 0 : aller au début de la ligne
- w : aller au mot suivant
- b : aller au mot précédent
- 5G : aller à la ligne numéro 5 (5 Go)
- gf : ouvrir le fichier dont le nom se trouve sous le curseur (go file)
Edition
- dip : supprimer le paragraphe sous le curseur (delete inside paragraph)
- diw : supprimer le mot sous le curseur (delete inside word)
- d$ : effacer jusqu'à la fin de la ligne
- x : supprimer le caractère courant
- dd : supprimer la ligne courante (4dd supprimer 4 lignes)
- yy : copier la ligne courante dans le presse-papier (4yy copier 4 lignes)
- p : coller le presse-papier après la ligne courante (paste)
- P : coller le presse-papier avant la ligne courante
- ]p : coller en respectant l'indentation (attention, risque d'orgasme à la première utilisation)
- gUiw : passer en majuscule le mot sous le curseur (go Uppercase inside word)
- 5>> : indenter 5 lignes à partir du curseur
- >% : si votre curseur était sur une accolade {, indente le block
- >iB : indente le Block dans lequel se trouve le curseur (n'importe où dans le block)
Recherche
- /foo : rechercher la chaine « foo » (n pour rechercher l'occurence suivante (next), N pour la précédente)
- /foo\c : rechercher les chaines « foo » ou « Foo » ou « fOo » etc. (insensible à la case)
Commande
- :u : annuler la dernière opération (undo)
- :redo : restaure la dernière annulation (ctrl+r)
- :w : sauvegarder (write)
- :q : quitter (quit)
- :wq : sauvegarder et quitter
- :q! : quitter sans sauvegarder
- :%s,foo,bar,g : rechercher « foo » et le remplace par « bar » (substitute)
- % signifie : sur tout le document (et pas seulement la ligne courante)
- g signifie : « global », c'est à dir tout les occurences d'une ligne (et pas seulement la première)
- le caractère « , » peut être remplacer par n'importe quel autre caractère (exemple: :s/foo/bar/).
- :10,20sort : tri les lignes de 10 à 20 par ordre alphabétique.
- :set ic : raccourci pour :set ignorecase, pour ignorer la casse dans les recherches (minuscule/majuscule)
- :set smartcase : recherche en ignorant la casse sauf si la recherche contient des majuscules (nécessite l'activation de :set ignorecase)
- :set ts=4 sts=4 sw=4 noexpandtab : configure les paramètres tabstop, softtabstop, shiftwidth et expandtab (voir http://vimcasts.org/episodes/tabs-and-spaces/)
- :w !sudo tee % : en cas d'oublie de « sudo » pour sauvegarder les modifications d'un fichier (comme, par exemple, un fichier système)
Mode Insertion
Pour basculer en mode « insertion » appuyer simplement sur l'une des touches [i] ou [inser]. Vous pouvez alors utiliser vim comme n'importe quel autre éditeur de texte. Pour revenir au mode normal, il suffit de presser la touche [Echap].
Vous pouvez aussi basculer en mode insertion de façon particulière, par exemple pour remplacer à la volé un contenu entre parenthèse ou entre guillemet, il suffit de placer le curseur au dessus du texte à remplacer puis de saisir :
- ci( : efface le contenu entre parenthèse et entre en mode insertion (change inside « ( »)
- ci" : efface le contenu entre guillemet et entre en mode insertion (change inside « " »)
- ciw : efface le mot courrant et entre en mode insertion (change inside word)
Mode Visual
Le mode visuel permet de sélectionner visuellement la zone d'action. Deux exemples :
- Presser la touche v (sélection libre) ou V (sélection de ligne) puis sélectionner plusieurs lignes
- Entrez le caractère >, recommancer avec <
- Entrez la commande :sort
Division de l'affichage, multi-fichier…
Enfin, vous pouvez diviser l'affichage en plusieur fenêtre :
- control-w s : Diviser horizontalement
- control-w v : Diviser verticalement
- control-w w : Passer à la fenêtre suivante
- control-w n : Ouvrir un fichier vierge dans une nouvelle fenêtre
- control-w q : Fermer la fenêtre
- :tabnew fichier : ouvrir le fichier fichier dans un onglet
D'autre mode existe tel que les modes Replace, Recorde…
Désactiver le passage automatique en mode visuel avec la souris
Pour éviter que le « mode visuel » de vim s'active lorsque vous essayer de coller du texte avec la souris dans un terminal de commande, vous pouvez modifier la configuration pour vous et pour l'utilisateur root comme suis :
echo "set mouse-=a" | tee -a ~/.vimrc
echo "set mouse-=a" | sudo tee -a /root/.vimrc
J'ai oublié sudo 😱 😭
Pas de panique, il y a une solution. Appuyer sur Echap pour revenir en mode « Normal » (commande). Ensuite entrer la commande suivante :
:w !sudo tee % >/dev/null
Après cette commande, Vim va demander à recharger le fichier qui a été modifié.
Explications :
- :w écrit le contenu du fichier …dans
- !sudo tee passe le contenu à la commande sudo tee
- % donne l'adresse du fichier courant
- >/dev/null ignore la sortie de tee
Autrement dit, la mémoire tampon qui contient le fichier modifié est passée en argument à la commande tee qui bénéficie de l'élevation de privilège via sudo. La commande tee va alors afficher la mémoire tampon (inutilement, du coup >/dev/null) et la sauvegardé dans le fichier passé en argument (le fichier que l'on est en train d'édité).
Configuration de Vim prêt à l'emploi :
Voici un fichier de configuration de Vim qu'il suffit de placer à la racine de votre dossier personnel dans un fichier nommé .vimrc. Vous pouvez ensuite le copier sur chacune des machines que vous souhaitez configurer. Vous pouvez également copier ce fichier dans /root/.vimrc pour activer cette configuration lorsque vous utiliser sudo.
syntax on
set incsearch smartcase hls si mouse-=a tabstop=4 shiftwidth=4
- syntax on, active la coloration syntaxique.
- set, configure les options suivantes :
- incsearch, incremental search, montre où le motif de recherche correspond.
- smartcase, smart case, recherche de casse intelligente (voir ci-dessus)
- hls, highlight search, surligne toutes les correspondances d'une recherche.
- si, smart ident, indentation automatique intelligente.
- mouse-=a, mouse - all, désactive la souris.
- tabstop=4, nombre d'espace correspondant à une tabulation.
- shiftwidth=4, nombre d'espace à utiliser pour chaque tabulation.
