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


