**Récapitulatif vim**
Le charme de [[http://fr.wikipedia.org/wiki/Vim|vim]] : des années d'utilisations et toujours quelque chose de nouveau...
====== Commandes générales ======
* Entrer en mode insertion. i ou a
* Pour sortir du mode insertion ou de n'importe quel mode. Echap
* Sauvegarder. :w
* Quitter sans sauvegarder. :q!
* Quitter. :q
* Sauvegarder et quitter. :wq
* Sauvegarder et quitter. :x
* Afficher les numéros de ligne. :set nu ou :set number
* Pour enlever l'affichage des numéros de lignes (inverse de :set nu). :set nonumber
* Permettre le collage tel quel notamment depuis le Web. :set paste
* Annuler une opération. Echap puis u
* Rétablir une annulation. Ctrl + R
* Utiliser la commande ''view'' au lieu de la commande vim ouvrir un fichier uniquement en lecture (écriture impossible).
* vim en lecture seule (view) vim -R
====== Copier/coller/supprimer/sélectionner des lignes ======
* Copier/coller : **yy puis p**
* Couper/coller : **dd puis p**
* Copier/coller n lignes : **n yy puis p**
* Couper/coller n lignes : **n dd puis p**
* Coller 5 fois : **5 p**
* Supprimer 10000 lignes après le curseur. 10000 dd
* Supprimer 10000 lignes avant le curseur. :.,-10000d
Répondre Y et appuyer sur entrée.
* Supprimer une plage de lignes (ici de la 8 a la 14). :8,14d
* Supprimer une ligne. D
* Couper à droite du curseul : d$
* Coller à droite du curseur : echap p
===== Sélection de texte =====
* Sélection par block. Ctrl + v
* Sélection ligne par ligne (toute la ligne). Shift + v ou V
* Indenter : >>
* Indenter les 8 lignes suivantes : 8>>
* Désindenter : <<
* Désindenter en combinant une sélection : Ctrl + v et >>
* Couper un mot : **dw**
* Copie deux mots : **2 y w**
* Supprimer la fin de la ligne à partir du curseur : Shift + d ou D
===== Multiple ouverture de fichiers =====
vim -p fichier-1 fichier-2 fichier-n
Ouvrir un onglet supplémentaire
:tabedit nom-fichier
Passer d'un onglet à l'autre
g + t
dans le sens inverse
g + T
Aller directement à l'onglet n
:tabmove n
====== Se déplacer dans le texte ======
===== Sans les flèches avec la méthode vim =====
* Up : **k**
* Bas : **j**
* Left : **h**
* Right : **l**
===== A une ligne précise ou dans les extrêmes =====
* Aller a la ligne 50. :50
* Aller a la fin du fichier. :$
* Aller tout en haut. gg
* Aller tout en bas. G
====== Utilisation du shell ======
* Rester dans vi pour accéder a la commande Linux. :!cdebash
* Mettre le résultat de la commande Linux dans vi à l'endroit du curseur. :r!cdebash
====== Utiliser des buffers ======
* Ouvrir un fichier supplémentaire. :e fichiersupplementaireaouvrir
===== Se deplacer dans les buffers =====
* Buffer next. :bn
* Buffer delete. :bd
====== Utiliser des onglets ======
* Ouvrir un nouveau fichier dans un autre onglet. :tab new cheminnouveaufichier
* Se déplacer d'un onglet à l'autre. :tabn** ou **:tabp
ou encore **gt**.
====== Ecrans multiples ======
* Découper l'écran en deux. :split
* Fermer un écran. :close
* vim + :e
* Ensuite :bn ou :bp pour passer de l'un a l'autre
* :vsplit
* Ctrl + ww pour passer de l'un a l'autre
* Ctrl + n pour lister les options disponibles sur l'ensemble des fichiers ouverts
====== Configuration vim via vimrc ======
On peut faire des gabarits dans ''/home/utilisateur/.vimrc''. Ce fichier est en complément de ''/etc/vimrc'' qui est le fichier de configuration globale.
* Lorsqu'on tape ''m'' il remplacera par la commande : map m :!clear; grep -E 'class \|def ' %
* Lorsqu'on tape '',em'' en mode insertion, le contenu définit est remplacé par {\em } : imap ,em {\em }ha
* Idem avec une page XHTML préconfigurée accessible avec ,xhtml en insertion : imap ,xhtml "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Hello worldi i ikkA
* Configurer vi pour qu'il fasse un espace a la place des tabulations (important pour Python basé sur les indentations) : set sts=2
* To allow the selected copy/paste in vim on Debian 9, edit the following lines in the ''/usr/share/vim/vim80/defaults.vim'' to change mouse=a by mouse=r
" Set the mouse mode to 'r'
if has('mouse')
set mouse=r
endif
===== Fichier vimrc =====
* Exemple de fichier ''vimrc'' utilisé notamment pour le développement Web avec Python : [[vimrc]]
====== Substituer/traitement par lot ======
===== Options courantes de traitement par lot =====
* Toutes les lignes : **%**
* Substitute : **s**
* Gourmant (tout le texte) : **g**
* Demander confirmation (ex : :%s/blanc/noir/gc) : **c**
===== Substitution et ajout par regex =====
* Substituer dans tout le texte un mot par un autre (ici blanc par noir). :%s/blanc/noir/g
* Substituer un mot par un autre sur une plage de ligne (ici de la 4 a la 12). 4,12s/blanc/noir/gc
Le "c" sert à demander confirmation.
* Ajouter un "#" devant toutes les lignes. :%s/^/#/
* Ajouter un "#" devant la plage de lignes spécifiée (ici de la 5 a la 11). :5,11s/^/#/
* Supprimer les "#" en début de ligne sur toutes les lignes. :%s/^#//
* Ajouter un commentaire "#" en début de ligne sur des lignes sélectionnées.
Faire un Ctrl+v verticalement au début sur toutes les lignes (les sélectionner simplement)
Shift+i
#
Echap
* Remplacer des zones de texte par un seul caractère.
Faire un Ctrl+v sur tout le texte qu'on veut (le sélectionner simplement)
r + lettre qu'on veut mettre à la place
* Supprimer toutes les lignes qui commencent par ";". g/^;/d
* Supprimer les lignes vides. g/^$/d
===== Supprimer les caractères MS-DOS ^M avec vim =====
Pour convertir un fichier ouvert avec vim au format UNIX, il suffira d'utiliser la commande suivante.
:set ff=unix
Ou celle-ci, si l'on souhaite utiliser le format MS-DOS :
:set ff=dos
Pour ceux qui veulent en savoir plus, ff est un raccourci pour fileformat. La commande suivante marchera aussi.
:set fileformat=unix
===== Options intéressantes =====
Couleur pour un fichier ini ou yaml
:set ft=dosini
:set ft=yaml
Appliquer le retour a la ligne pour voir tout le texte
:set wrap pour retour a la ligne
Afficher visuellement les colonnes en déplaçant le curseur
:set cuc
Commande pipée directement à vim avec des options sur la ligne de commande
oc export svc docker-registry | vim - :set ft=yaml nowrap
====== Help ======
* Accéder a l'aide interactive : **:help**
* Pour cliquer : **Ctrl ]**
* Pour revenir : **Ctrl T**