Linux:Utilisation de vim

Un article de Djjnet.

Sommaire

Introduction

Voyons l'utilisation basique de Vim pour l'édition de fichier dans un terminal (connexion ssh par exemple). Vim est une version améliorée de l'éditeur plus ancien vi.

Pour lancer vim, il suffit de lancer :

vim fichier

ou plusieurs fichiers directement :

vim fichier1 fichier2

Généralement, vous pouvez lancer directement vi qui est souvent configuré en tant que lien symbolique vers vim :

vi fichier

Il est aussi possible de lancer l'édition d'un nouveau fichier après avoir lancé vim :

vim
:e fichier

ou

:edit fichier

Il faut d'abord bien comprendre qu'il y a deux modes, celui des commandes et celui de l'édition.

Passage entre les deux modes :

  • Edition -> commandes :
Touche ECHAP
  • Commandes -> édition :
Touche i, o ou a

Commandes de bases

  • i : passer en mode d'édition (insert)
  • I : passer en mode d'édition en allant au début de la ligne courante (insert)
  • a : passer en mode d'édition juste après le caractère courant (append)
  • A : passer en mode d'édition en allant à la fin de la ligne courante (append)
  • o : passer en mode d'édition en ajoutant une nouvelle ligne après la ligne courante
  • O : passer en mode d'édition en ajoutant une nouvelle ligne avant la ligne courante
  • dd : couper la ligne courante
  • yy : copier la ligne courante
  • p : coller le presse-papier courant à la ligne suivante
  • P : coller le presse-papier courant à la ligne précédente
  • 3yy : copier 3 lignes depuis la ligne courante
  • 3dd : couper 3 lignes depuis la ligne courante
  • u : annuler la dernière modification
  •  :undo 3 : annuler les 3 dernières modifications
  • ctrl+r : refaire une modification annulée
  •  :earlier 15m : revenir dans l'état de modifications 15 minutes plus tôt
  •  :w : enregistrer
  •  :wq : enregistrer et quitter
  •  :q : quitter sans modification
  •  :q! : forcer à quitter sans enregistrer les modifications
  •  :x : équivalent de :wq

Lors de l'édition de plusieurs fichiers :

  •  :n : passer au fichier suivant
  •  :N : passer au fichier précédent

Commandes de déplacement

  • hjkl : respectivement : gauche, bas, haut et droite
  • 2h : 2 caractères à gauche
  • 3k : 3 lignes vers le haut
  • 5j : 5 lignes vers le bas
  • 4l : 4 caractères vers la droite
  • ctrl+o : position précédente
  • ctrl+f : page suivante
  • ctrl+b : page précédente
  •  :253 : aller à la 253ième ligne, 253 est un exemple
  •  % : si le curseur est sur un caractère [](){}, % permet de trouver le symbôle associé.
  • Shift+g : aller à la fin du fichier
  • gg : aller au début du fichier
  • w : aller au prochain mot
  • 2w : aller 2 mots plus loin
  • b: aller au mot précédent
  • 2b : aller 2 mots avant
  •  : prochaine occurrence du mot sous le curseur
  • # : précédente occurrence du mot sous le curseur
  • ( : début de la phrase courante
  • ) : début de la phrase suivante
  • { : début du paragraphe courant
  • } : début du paragraphe suivant

Modification

  • x : effacer le caractère courant
  • r : remplacer un caractère (r puis un caractère, remplace le caractère sous le curseur par celui tapé)
  • R : remplacer plusieurs caractères (R puis N caractères, remplace N caractère par ceux tapés)
  • J : Joindre la ligne suivante à la fin de la ligne courante
  • 80ih[Esc] : Insérer 80 caractère h
  • d$ : suppression de la position courante jusqu'à la fin de la ligne
  • dw : suppression d'un mot
  • d3 : suppression de 3 caractères
  • ~ : convertir les majuscules en minuscule et inversement et cela pour la sélection courante (le caractère sous le curseur ou toute la sélection du mode visuel)

Recherche

  • /texte : rechercher la première occurrence de texte
  • n : rechercher l'occurrence suivante de la dernière recherche
  • N : rechercher l'occurrence précédente de la dernière recherche

Options de recherche :

  •  :set incsearch : rechercher au fur et à mesure que le texte de recherche est indiqué à vim
  •  :set ignorecase : rechercher sans prendre en compte les majuscules

Pratique

  • . : répète la dernière commande
  • [Ctrl]+p : en mode édition, complète le mot en fonction de ceux déjà tapé. Taper plusieurs fois [Ctrl]+p s'il y a plusieurs possibilités.
  • gq} : remettre en forme un texte en fonction de la valeur de tw jusqu'à la fin du paragraphe
  • gq/--[Espace][Entrée] : idem mais jusqu'au texte --[Espace]
  •  :!commande : exécuter une commande shell sans quitter vim par exemple pour faire :!ls -l
  •  :split nomfichier2.txt : diviser l'écran en deux pour éditer un deuxième fichier. Pour passer d'un fichier à l'autre : [Ctrl]+w+w
  •  :r!commande : insérer le résultat d'une commande dans le fichier en cours d'édition
  •  :r /etc/hosts : insérer le contenu du fichier /etc/hosts dans le fichier en cours d'édition

Ouvrir en lecture seule un fichier, idéal pour la consultation de gros fichiers :

  • vim -R fichier

ou après ouverture :

  •  :set ro

Options d'édition

Mode collage :

:set paste

Ignorer la casse (Majuscule/Minuscule) :

:set ic

Sensible à la casse (par défaut) :

:set noic

Colloration syntaxique :

:syntax on/off

Retour chariot automatique :
Afficher la valeur actuelle :

:set tw

-> textwidth=0 alors pas de retour chariot

:set tw=72

Indentation :

:set shiftwidth=8
  • == : indentation de la ligne courante en fonction des lignes alentour
  • 6== : indentation de 6 lignes depuis le curseur

Modifier le caractère retour chariot d'un fichier :

:set ff=unix  //to unix file
:set ff=dos   //to windows file

Sed dans vim

Remplacer texte par nouveautexte sur l'ensemble du fichier :

:1,$s/texte/nouveautexte/ équivalent à :%s/texte/nouveautexte/

S'il y a plusieurs occurences par ligne :

:1,$s/texte/nouveautexte/g

Uniquement pour les lignes 10 à 20 :

:10,20s/texte/nouveautexte/

Entre la ligne courante et les 4 prochaines lignes :

:.;+4s/texte/nouveautexte/

Suppression de la ligne 5 à la fin si le modif chaine est trouvé :

:5,$g/chaine/d