Vi / Vim

De The Linux Craftsman
Révision datée du 28 novembre 2023 à 15:22 par Jc.forton (discussion | contributions) (→‎Au niveau fichier)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Introduction

Création d'un fichier texte

vi ou vim (alias sous CentOS) est un éditeur en mode console peu convivial certes, mais ultra puissant et qui s'utilise de la manière suivante:

vi <nom_fichier>

Après l’appui sur la touche entrer, le prompt disparaît pour laisser place à une série de tilde (~) qui indiquent que les lignes sont vides.

Les modes

Permutation

Il y a deux modes dans vi:

  • le mode saisie;
  • le mode commande.

Par défaut il est en mode commande et :

  • la touche insert ou i permet de passer en mode insertion ;
  • la touche Echap permet de revenir au mode commande.

Lorsque l'on est en mode insertion un nouvel appui sur la touche insert permet de passer en mode replace (remplacement).

Répétitions

n<commande>

Par exemple dd efface une ligne et 5dd efface 5 lignes

Quitter...

...en sauvant

Lorsque l'on a fini d'éditer son fichier texte, on peut le sauver en repassant en mode commande (touche Echap) et en tapant:

:wq

ou bien

:x

ou encore en appuyant deux fois sur la touche Z (deux Z majuscules)

...en abandonnant les modifications

Si l'on a fait une erreur et que l'on veut quitter sans sauver, on peut le faire en repassant en mode commande (touche Echap) et en tapant:

:q!

Éditer

Undo

u permet de défaire une modification

Repeat

. permet de répéter la dernière commande d’édition

Effacer

  • x permet d’effacer le caractère courant
  • c permet d’effacer le texte et de passer en mode insertion:
    • cw → change du curseur jusqu’à la fin du mot
    • c$ → change jusqu’à la fin de la ligne
    • cc → change la ligne courante

Couper

  • d permet de couper grâce à l’appui de:
    • dw → coupe du curseur jusqu’à la fin du mot
    • dd → coupe la ligne complète
    • d$ → coupe du curseur à la fin de la ligne
    • d^ → coupe du curseur au premier caractère non vide (pas une tabulation ou un espace)
    • d0 → coupe du curseur jusqu’au début de la ligne

Copier

y permet de copier grâce à l’appui de:

  • yw → copie du curseur à la fin du mot (nyw copie les n mots)
  • yy ou Y → (yank) copie la ligne courante dans le buffer (nyy copie les n lignes)
  • y0 → copie du curseur jusqu’au début de la ligne

Coller

  • p → colle les lignes copiées en dessous du curseur
  • P → colle les lignes copiées au-dessus du curseur

Suppressions

Dans tout le fichier

  • g/^#/d → permet de supprimer les lignes commençant par #
  • g/^$/d → permet de supprimer les lignes vides (sans espace ni tabulation)

Sur la ligne

  • dfX → permet de supprimer du curseur jusqu'au caractère X
  • dtX → permet de supprimer du curseur jusqu'au caractère X non inclue

Insertion

  • o → permet d'insérer une ligne en-dessous du curseur
  • O → permet d'insérer une ligne au-dessus du curseur

Remplacements

Au niveau fichier

  • :s/toto/titi/g → permet de remplacer toutes les occurrences (grâce au /g) de toto par titi sur la ligne du curseur
  • :%s/toto/titi/g → permet de remplacer toutes les occurrences (grâce au /g) de toto par titi dans tout le document (grâce au %)
  • :1,5/toto/titi/g → permet de remplacer toutes les occurrences (grâce au /g) de toto par titi de la ligne 1 à la ligne 5 (grâce au 1,5)

Au niveau curseur

  • x → permet de supprimer le caractère sur le curseur
  • rX → permet de remplacer le caractère sur le curseur par X
  • R → permet de passer en mode remplacement

Placements

Dans la globalité du fichier

  • A → permet de placer le curseur en mode insert à la fin de la ligne courante
  • :X ou XG → permet de se déplacer à la ligne X du fichier
  • G → permet de se déplacer à la fin du fichier
  • `` → permet de revenir à la position précédente

Sur la partie présente à l'écran

  • H → déplace le curseur à la première ligne visible à l'écran (HOME)
  • M → déplace le curseur au milieu de l'écran (MIDDLE)
  • L → déplace le curseur à la dernière ligne visible à l'écran (LAST)
  • zz → centre l'écran sur le curseur

Sur la ligne

  • W → déplace le curseur sur le mot suivant sans tenir compte de la ponctuation
  • w → déplace le curseur sur le mot suivant
  • B → déplace le curseur sur le mot précédent sans tenir compte de la ponctuation
  • b → déplace le curseur sur le mot précédent
  • ^ → déplace le curseur sur le premier caractère non vide (pas une tabulation ou un espace)
  • 0 → déplace le curseur au début de la ligne
  • $ → déplace le curseur à la fin de la ligne

Recherche

  • /coucou → permet de placer le curseur sur la prochaine occurrence de coucou
  • n → permet de passer à l'occurence suivante (next)
  • fX permet de recherche le caractère X en avant en appuyant sur ;
  • FX permet de recherche le caractère X en arrière en appuyant sur ;

Astuces

Exécution

  • ! → permet d’exécuter une commande depuis vi, cela démarrera un Shell interactif.
  • :sh → permet de passer l’éditeur de texte en arrière plan pour avoir un shell et ctrl+d permet de le reprendre

Récupération

Si le système crash, il est possible de récupérer les changements grâce à l'option -r (recovery) de vi :

# vi -r <mon_fichier>