Outils pour utilisateurs

Outils du site


all:bibles:linux:vi

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

all:bibles:linux:vi [2024/06/14 11:10] – créée - modification externe 127.0.0.1all:bibles:linux:vi [2025/02/20 10:47] (Version actuelle) – [Dos2Unix] omeylhoc
Ligne 1: Ligne 1:
 +====== Editeur VI ======
 +
 +----
 +
 +===== Déplacements =====
 +
 +==== Au sein du fichier ====
 +
 +<code>
 +<Ctrl><f>    page suivante
 +<Ctrl><b>    page précédente
 +<Ctrl><d>    ½ page suivante
 +<Ctrl><u>    ½ page précédente
 +G            fin de fichier
 +:<n>         aller à la ligne n
 +<n>        avancer de n lignes
 +<n>        reculer de n lignes
 +{            paragraphe précédent
 +}            paragraphe suivant
 +z<Enter>     ligne courante en haut de l’écran
 +z.           ligne courante au milieu de l’écran
 +<n>z<Enter>  ligne n au milieu de l’écran
 +</code>
 +
 +==== Au sein d'une ligne ====
 +
 +<code>
 +0 début de ligne
 +^ début de ligne (pas les espaces)
 +$ fin de ligne
 +w déplacement un mot à droite
 +b déplacement d’un mot à gauche
 +) fin de phrase
 +( début de phrase
 +% recherche la parenthèse ou crochet correspondant
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:vi|Haut de page]]
 +
 +===== Modifications =====
 +
 +==== Insertion ====
 +
 +<code>
 +i           insertion devant le curseur
 +I           insertion en début de ligne
 +a           ajout après le curseur
 +A           ajout en fin de ligne
 +o           ajout ligne suivante
 +O           insertion ligne précédante
 +:r fichier  insert le fichier à la ligne suivante
 +</code>
 +
 +==== Suppression ====
 +
 +<code>
 +x         caractère courant
 +<n>     n caractères
 +dw        mot courant
 +<n>dw     n mots
 +dd        ligne courante
 +<n>dd     n lignes
 +d^        depuis le début de la ligne
 +d$        jusqu’à la fin de la ligne
 +:g/xx/  efface toutes les lignes contenant xx
 +:g!/xx/ efface toutes les lignes ne contenant pas xx
 +:v/xx/  efface toutes les lignes ne contenant pas xx
 +:g/^$/  efface toutes les lignes vides
 +</code>
 +
 +==== Remplacement ====
 +
 +<code>
 +r caractère courant
 +R mode remplacement
 +cw le mot courant
 +c$ ou C jusqu’à la fin de la ligne
 +c^ depuis le début de la ligne
 +s remplace 1 caractère et passe en insertion
 +</code>
 +
 +----
 +
 +===== Recherche/Remplacement =====
 +
 +==== Recherche ====
 +
 +<code>
 +/xxx         recherche en avant
 +?xxx         recherche en arrière
 +/^xxx        recherche en début de ligne
 +/[xy]zz      recherche xzz ou yzz
 +/[x-z]yy     recherche xyy à zyy
 +n            relance la dernière recherche
 +N            dernière recherche en sens inverse
 +`^xx         recherche xx en début de ligne
 +/lin[uU]?x/  recherche linux ou linUx
 +<AltGr><#>   recherche mot sous le curseur
 +<Shift><£>   recherche mot sous le curseur
 +</code>
 +
 +==== Remplacement ====
 +
 +<code>
 +:s/xx/yy        yy à la place de xx dans ligne courante
 +:s/xx/yy/     idem avec confirmation
 +:s/xx/yy/     remplace dans tout le fichier
 +:s/xx/yy/cg     idem avec confirmation
 +:g/xx/s//yy/  yy à la place de xx dans tout le fichier
 +:g/xx/s//yy/cg  yy à la place de xx avec confirmation dans tout le fichier
 +:n,m/xx/s//yy/g yy à la place de xx des lignes n à m
 +:%s/xx/yy/    yy à la place de xx dans tout le fichier
 +:%s/xx/yy/cg    yy à la place de xx avec confirmation dans tout le fichier
 +&               répète la précédente commande :s 
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:vi|Haut de page]]
 +
 +===== Buffer =====
 +
 +==== Mémorisation ====
 +
 +<code>
 +yy ou Y         mémorisation ligne courante
 +”xyy ou ”xY     idem dans le buffer x
 +nyy ou nY       mémorisation de n lignes
 +”xnyy ou ”xnY   idem dans le buffer x
 +y$              mémorisation de la fin de la ligne
 +mx              marque le début d’un bloc
 +y’x             mémorise depuis le début du bloc
 +</code>
 +
 +<note>
 +Si la référence x du buffer est une lettre majuscule, les mémorisations se font en ajout
 +</note>
 +
 +==== Utilisation ====
 +
 +<code>
 +p Ajout du buffer après
 +”xp Ajout du buffer x après
 +P Insertion du buffer avant
 +”xP Insertion du buffer x avant
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:vi|Haut de page]]
 +
 +===== Astuces =====
 +
 +==== Exécution commande ====
 +
 +:g exécute une commande sur les lignes correspondant à une expression régulière.
 +
 +<code>
 +:g/xx/    efface toutes les lignes contenant xx
 +:g!/xx/   efface toutes les lignes ne contenant pas xx
 +:g/^$/    efface les lignes vides
 +</code>
 +
 +==== Supprimer les débuts de lignes ====
 +
 +<code bash>
 +:%norm 10x      efface les 10 premières colonnes de toutes les lignes
 +:5,10 dw        efface le premier mot des lignes 5 à 10
 +</code>
 +
 +==== Modifications complexes ====
 +
 +<code bash>
 +:2,9norm f"i(^[f:r,$i)
 +</code>
 +
 +  * :2,9    on applique de la ligne 2 à la ligne 9 seulement
 +  * norm    on applique les commandes usuelles en mode commande
 +  * f"      on recherche la première "
 +  * i(      on insère une parenthèse ouvrante
 +  * ^[      équivalent de la touche <key>ESC</key> (on l'obtient avec la séquence <key>Ctrl</key><key>V</key> puis <key>ESC</key>)
 +  * f:      on recherche :
 +  * r,      on remplace les : par une virgule
 +  * $       on va en fin de ligne
 +  * i)      on insère une parenthèse fermante
 +
 +==== Dos2Unix ====
 +
 +Changer tous les <CRLF> par <LF> 
 +
 +<code bash>
 +:%s/<Ctrl><V>/<Ctrl><M>/g
 +</code>
 +
 +==== Visualiser en mode binaire ====
 +
 +=== VI ===
 +
 +<code bash>
 +vi -b <fichier>
 +</code>
 +
 +=== xxd ===
 +
 +<code bash>
 +xxd <fichier>
 +</code>
 +
 +=== hexdump ===
 +
 +<code bash>
 +hexdump -C <fichier>
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:vi|Haut de page]]
 +
 +===== Macro =====
 +
 +==== Enregistrer une macro ====
 +
 +<code>
 +q a I , ESC j q
 +</code>
 +
 +  * q : enregistrer une macro
 +  * a : nom du registre de la macro
 +  * A partir de là faire les actions à enregistrer. Dans l'exemple (I , ESC j) insertion en début de ligne d'une virgule puis on passe à la ligne suivante.
 +  * q : fin de l'enregistrement de la macro
 +
 +==== Exécuter une macro ====
 +
 +=== n fois ===
 +
 +Pour exécuter 5 fois la macro du registre a :
 +
 +<code>
 +5 @ a
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:vi|Haut de page]]
 +
 +===== Quitter / Sauvegarde =====
 +
 +<code>
 +:w             sauvegarde
 +:wq            sauvegarde et quitter
 +:x             sauvegarde et quitter
 +:w fichier     sauvegarde dans fichier
 +:n,mw fichier  sauvegarde dans fichier lignes n à m
 +:q             quitter
 +:q!            quitter sans sauver (abandon)
 +:e!fichier     abandon puis édition fichier
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:vi|Haut de page]]
 +
 +===== Commandes diverses =====
 +
 +<code>
 +.                          ré exécute la dernière commande
 +u                          undo : annule l’action précédente
 +<Ctrl><r>                  redo :refait l’action précédente
 +J                          join :concatène la ligne courante et la suivante
 +:!commande                 Exécution d’une commande shell
 +:!!commande                Le résultat de la commande est inséré après
 +:!sh                       shell (retour par exit ou <ctrld><d>)
 +<<                         décalage vers la gauche de shiftwidth caractères
 +>>                         décalage vers la droite de shiftwidth caractères
 +<Ctrl><G>                  affiche les infos sur le fichier (nom, nb de lignes, …)
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:vi|Haut de page]]
 +
 +===== Configuration en mode commande =====
 +
 +<code>
 +:set all pour visualiser les options
 +:NoMatchParen inhibition du match parenthesis ne fonctionne pas dans .vimrc car module pas encore chargé
 +:DoMatchParen activation du match parenthesis
 +:set mouse-=a   activer le copier/coller avec le click droit de la souris
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:vi|Haut de page]]
 +
 +===== Fichier de configuration =====
 +
 +Les options de l’éditeurs sont mémorisées dans le fichier <color #00a2e8>~/.exrc</color> ou <color #00a2e8>~/.vimrc</color> ou globalement sous <color #00a2e8>/etc/vim/vimrc</color>
 +
 +<code>
 +colorscheme delek         autre thème pour la coloration syntaxique
 +set tabstop=4             taille tabulation = 4 caractères
 +set shiftwidth=4          taille pour décallage = 4 caractères
 +set number                affiche les n° de ligne
 +set autoident             auto indentation du texte (taper <CTRL><D> en mode insertion pour revenir en arrière)
 +set showmode              affiche en bas de l’écran quand on est en mode insertion
 +set ic/set noic           recherche indépendante/dépendante de la caste
 +syn on                    coloration syntaxique
 +let loaded_matchparen = 1 évite le chargement du module qui fait le match parenthèse
 +autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o désactiver l’insertion automatique de commentaires.
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:vi|Haut de page]]
 +
 +===== Dépannage =====
 +
 +==== Mauvais fonctionnement du copier/coller à la souris ====
 +
 +=== Problème ===
 +
 +Quand on essaye de <coller> d'un click de souris, l'éditeur passe dans un mode visuel.
 +
 +=== Palliatif ===
 +
 +Utiliser la touche <SHIFT> lors du <Coller>
 +
 +=== Solution ===
 +
 +Le problème vient de l'absence du fichier de configuration. Créer un fichier <color #00a2e8>~/.vimrc</color> avec par exemple la ligne de coloration syntaxique pour vim :
 +
 +<code>
 +syn on
 +</code> 
 +
 +<note tip>Penser à créer le fichier /root/.vimrc pour les commandes vi passées avec sudo</note>
 +
 +----
 +
 +[[all:bibles:linux:vi|Haut de page]]