Généralités système Linux

Guide de SUR-VI (Utilisation de vi)

Table des matières

vi



Introduction



L’éditeur de texte vi permet d’éditer les fichiers de configuration des différents programmes et fonctionnalités. Il fonctionne en mode texte, son fonctionnement peut paraître déroutant au premier abord…
Voici un petit guide de sur-vi :happy1: qui est loin de présenter toutes les fonctionnalités de vi mais permet néanmoins d’éditer les fichiers dans de bonnes conditions.

Evidemment, il existe d'autres éditeurs de texte sous Linux comme nano, mais ce n'est pas le but d'en parler ici.

Installation de vi et vim



Dans quasiment toutes les distributions Linux, vi est présent. Il s'agit de la version très basique de vi.

Il existe une version améliorée : vim. vim va permettre une navigation plus confortable (avec les flèches directionnelles) et des options additionnelles (coloration, numérotation des lignes, etc...)

Pour installer vim :

Red Hat et dérivées + Fedora :
Code BASH :
dnf install vim

ou avec le nim exact du paquet :
Code BASH :
dnf install vim-enhanced


Sous RedHat et dérivées + Fedora, dès que vim est installé, un alias vi est automatiquement créé pour pointer sur vim.

Debian et dérivées :
Code BASH :
apt install vim


Gentoo et dérivées :
Code BASH :
emerge app-editors/vim


Sous Gentoo, si vi et vim sont installés, on peut invoquer directement vim quand vi est tapé via le paramétrage suivant :
Code BASH :
eselect vi set vim


Et définir par vi (qui renvoie à vim) comme éditeur de texte par défaut :
Code BASH :
eselect editor set vi



Le mode commandes et mode insertion



Sous vi, il faut distinguer 2 modes : le mode commandes et le mode édition.

Le mode commande est le mode par défaut lorsque vi s’ouvre.
Le mode édition permet de taper du texte. Parmi les modes éditions couramment utilisé, on trouvera le mode insertion !

Le strict minimum à savoir



Ce mode commande dans lequel on arrive après avoir invoqué vi ne permet pas de taper du texte.

Pour entrer dans le mode insertion, appuyer sur i.
A ce stade, il est possible d'écrire du texte.
On peut naviguer dans le fichier à l'aide des flèches directionnelles.

Pour revenir dans le mode commande (qui nous permettra d'enregistrer et de quitter notamment), appuyer sur la touche Echap.

Pour enregistrer, il s'agit de taper :w depuis ce mode commande.
Pour quitter, c'est la commande :q. Si vous tentez de quitter et que des modifications ont été faites dans le fichier, un avertissement s'affiche. Si vous souhaitez tout de même quitter SANS enregistrer les modifications taper :q!
Pour enregistrer et quitter :wq

A partir de là, vous êtes dans la capacité de réaliser les actions de base pour éditer des fichiers sous Linux avec vim.


Liste de quelques commandes utiles sous vi



Pour aller plus loin, je vous liste les différentes commandes et possibilités de vi, que j'utilise assez souvent.

Je suis un gros utilisateur de vim, je vous mets donc ce que j'utilise souvent et par extension des commandes utiles, classées par type de commande.
Je vous souligne à titre indicatif celles que j'utilise très régulièrement !

Insertion (mode commande et passer en mode édition)



  • Activer le mode insertioni
  • Insérer au début de la ligne → I (i majuscule)
  • Activer le mode insertion, un caractère après le curseur → a
  • Insérer en fin de ligne → A
  • Insérer une ligne (en dessous du curseur)o
  • Insérer une ligne (au dessus du curseur) → O
  • Quitte le mode éditionEchap


Quitter / Enregistrer (mode commande)



  • Enregistrer SANS quitter:w
  • Quitter en enregistrant les modifications:wq ou :x ou ZZ
  • Quitter sans enregistrer les modifications:q!


Le déplacement (mode commande)



Il existe d'autres modes d'édition, comme le mode remplacement.

  • Aller en début de ligne → 0
  • Aller en fin de ligne → $
  • Ligne précédente (ou monter) → k (flèche haut avec vim)
  • Ligne suivante (ou descendre) → j (flèche bas avec vim)
  • Caractère précédent (ou aller à gauche) → h (flèche gauche avec vim)
  • Caractère suivant (ou aller à droite) → l (flèche droite avec vim)
  • Mot précédent → b
  • Mot suivant → w
  • Page précédenteCtrl+B (ou Page précédente avec vim)
  • Page suivanteCtrl+F(ou Page suivante avec vim)
  • Aller à la ligne nngg ou nG (où n est le numéro de ligne)
  • Aller à la première ligne : gg
  • Aller à la dernière ligneG


Remplacer (mode commande et passer en mode édition)



A titre personnel, je n'utilise que très rarement ce mode de remplacement.

  • Remplacer le caractère sous le curseur → r puis le caractère à insérer
  • Remplacer avec le texte saisi → R puis le texte à remplacer
  • Effacer la suite de la ligne et passer en mode insertion → C
  • Quitte le mode remplacement → Echap


Copier / Couper / Coller (mode commande)



  • Copier la ligne couranteyy
  • Copier n lignes à partir de la ligne courantenyy (Remplacer n par un nombre)
  • Coller (ligne en dessous le curseur)p
  • Coller (ligne au dessus le curseur) → P
  • Couper la ligne courantedd
  • Couper n lignes à partir de la ligne courantendd (Remplacer n par un nombre)


Effacer (mode commande)



  • Effacer le caractère courant → x
  • Effacer la ligne courantedd
  • Effacer n lignes à partir de la ligne courantendd (Remplacer n par un nombre)
  • Effacer le mot sous le curseur → dw
  • Effacer du curseur à la fin de la ligne → d$
  • Effacer du début de la ligne au curseur → d^


Rechercher (mode commande)



  • Recherche en avant du mot texte/texte
  • Recherche en arrière du mot texte → ?texte
  • Aller à l'occurrence suivanten
  • Aller à l'occurrence précédenteN


Divers (mode commande)



  • Annuler la dernière actionu
  • Modifier la casse du caractère → ~ (la tilde avec AltGR+2)


Remplacer du texte



Pour remplacer du texte sur 1 ligne :
Code BASH :
:s/ancienmot/nouveaumot/g

Pour remplacer 1 mot par un autre dans tout le fichier :
Code BASH :
:%s/ancienmot/nouveaumot/g


CAS SPECIAL : Supprimer le caractère ^M avec vi



Lorsqu’un fichier est édité sur un système Windows/DOS à la fin de chaque ligne le caractère « ^M » apparait.
Si vous souhaitez supprimer ce caractère sur l’ensemble du fichier avec l’éditeur vi voici la commande à utiliser:
Code BASH :
:%s/^M/\r/g

Il ne faut pas saisir ^M mais procéder ainsi :
Code BASH :
:%s/[ctrl+V][ctrl+M]/\r/g



Personnalisation et confort vim



Les commandes avancées du mode commandes



  • Afficher les numéros de ligne → :set number ( pour désactiver → :set nonumber )
  • Afficher la coloration syntaxique → :syntax on ( pour désactiver → :syntax off )
  • Entrer et sortir du mode "paste" (coller un texte indenté) → :sset paste ( pour désactiver → :set nopaste )
  • Indentation automatique → :set autoindent( pour désactiver → :set noautoindent )
  • Colorer toutes les occurrences d'un mot → * sur le mot qui est sous le curseur (pour désactiver : :noh )
  • Activer la coloration syntaxique d'un langage particulier → :set syntax=html


Changer la coloration syntaxique



Par défaut, la coloration syntaxique de vim peut ne pas être terrible (commentaires bleu très foncé).
Vous pouvez changer les couleurs avec la commande :color theme

Pour lister les thèmes (remplacer le 81 par la version de vim) :
Code BASH :
ls /usr/share/vim/vim81/colors/


Personnellement, j'aime bien le thème desert (couleurs similaires à nano).

Rendre persistantes les données



Pour rendre persistantes les informations, on peut éditer le fichier ~/.vimrc et y ajouter les lignes tapées.

Code BASH :
set number
set autoindent
syntax on
color desert



Programmation : sauter entre une ouverture et une fermeture de parenthèse, accolade



Si dans VIM, vous avez du code long, et que vous souhaitez aller d'une accolade à l'autre, il est possible de s'y rendre directement avec % en mode commande.

Exemple :

Code TEXT :
if ( $toto == $tata ) {
        echo "truc";
}
 


En se positionnant sur le } et en appuyant sur %, on revient au { en fin de ligne où il y a le texte $toto == $tata !

interagir entre vim et bash



Si on veut par exemple exécuter le script qu'on est en train d’écrire dans vim : :! ./%

Si on veut enregistrer un fichier système alors qu'on l'a édité en tant qu'utilisateur simple : :w !sudo tee %

Insérer le résultat d'une commande bash (exemple avec 'ls -l / | grep bin' ) dans vim en dessous de la ligne courante ; :r ! ls -l / | grep bin


Afficher les caractères invisibles (fin de ligne, tabulations)



Pour afficher les caractères invisibles, par exemple pour mieux repérer les tabulations des espaces, on pourra utiliser :
Code TEXT :
:set list



Afficher des colonnes virtuelles



Dans un fichier, on peut afficher des repères à un certain nombre de caractères.
Des colonnes rouges apparaissent.

Pour mettre un repère à 40 caractères :
Code TEXT :
:set colorcolumn=40


On peut abréger la commande avec cc et définir plusieurs colonnes :
Code TEXT :
:set cc=40,80



Créer un fichier chiffré



On peut, avec vim, créer un fichier qui sera protégé par mot de passe.

On utilisera pour cela :

Code BASH :
vim -x fichier.txt


La passphrase sera demandée.

Pour procéder au chiffrement d'un fichier non chiffré, on utilisera :X

Pour ne plus chiffrer le fichier, on utilisera :X et on laissera la passphrase vide.
Cette page a été vue 80801 fois