« Vim » : différence entre les versions

De Wiki doc

Aucun résumé des modifications
(→‎Quelque commandes : Correction de la phrase de présentation + remplacement d'une prime inversée par une prime)
 
(6 versions intermédiaires par le même utilisateur non affichées)
Ligne 2 : Ligne 2 :
[[Fichier:Vim logo.svg|100px]]
[[Fichier:Vim logo.svg|100px]]


[https://fr.wikipedia.org/wiki/Vim Vim] est un éditeur de texte, clone de [https://fr.wikipedia.org/wiki/Vi_(logiciel) vi], signifiant "VI aMélioré" permettant d'éditer des documents de type texte (notamment des fichiers de configuration) dans un terminal ou une console (shell). Il ne nécessite pas d'interface graphique pour être exécuté, ce qui en fait un excellent outil sur un serveur, dépourvu d'[[:Category:Environnements bureau|environnements bureau]].
[https://fr.wikipedia.org/wiki/Vim Vim] est un éditeur de texte, bifurcation de [https://fr.wikipedia.org/wiki/Vi_(logiciel) vi], signifiant "VI aMélioré" permettant d'éditer des documents de type texte (notamment des fichiers de configuration) dans un terminal ou une console (''shell''). Il ne nécessite pas d'interface graphique pour être exécuté, ce qui en fait un excellent outil sur un serveur, dépourvu d'[[:Category:Environnements bureau|environnements de bureau]].
 
=Installation=
=Installation=
  # apt install vim
  apt install vim


=Comportement=
=Comportement=
Ligne 15 : Ligne 16 :


==Mode interactif==
==Mode interactif==
Lorsque Vim est exécuté, il est par défaut en mode interactif. Ce mode permet d'utiliser des combinaisons de touche pour interagir avec le texte du document en cours d'édition. Il est par exemple possible, en une combinaison, de couper 4 lignes de texte et de les coller dans un autre emplacement du document, voir dans un autre document.
Lorsque ''Vim'' est exécuté, il est par défaut en mode interactif. Ce mode permet d'utiliser des combinaisons de touche pour interagir avec le texte du document en cours d'édition. Il est par exemple possible, en une combinaison, de couper 4 lignes de texte et de les coller dans un autre emplacement du document, voir dans un autre document.


<span style="color:red;">Mettre un tableau avec les touches qu'on utilise souvent avec le mode interactif</span>
<span style="color:red;">Mettre un tableau avec les touches qu'on utilise souvent avec le mode interactif</span>
Ligne 22 : Ligne 23 :
Le mode insertion est le mode classique d'édition de texte. C'est celui dans lequel on tape du texte comme dans n'importe quel autre éditeur.
Le mode insertion est le mode classique d'édition de texte. C'est celui dans lequel on tape du texte comme dans n'importe quel autre éditeur.


Pour revenir au mode interactif, il faut presser la touche <source lang="bash" inline><Echap></source>.
Pour revenir au mode interactif, il faut presser la touche <code><Echap></code>.


==Mode commande==
==Mode commande==
Ce mode permet d’interagir avec Vim par l'intermédiaire de commandes. Ces dernières vont permettres d'enregistrer le document, quitter Vim, importer un document dans un autre, passer des expressions régulières, activer des options et bien d'autres choses...
Ce mode permet d’interagir avec ''Vim'' par l'intermédiaire de commandes. Ces dernières vont permettre d'enregistrer le document, quitter ''Vim'', importer un document dans un autre, passer des expressions régulières, activer des options et bien d'autres choses...


On entre une commande en étant au préalable en mode interactif et en tapant <source lang="bash" inline>:</source>.
On entre une commande en étant au préalable en mode interactif et en tapant <code>:</code>.


===Quelque commandes===
===Quelque commandes===
Activer l'affichage des numéros de lignes
Activer l'affichage des numéros de lignes
<source lang="vim">
<syntaxhighlight lang="vim">
se nu
se nu
</source>
</syntaxhighlight>
 
désactiver l'affichage des numéros de lignes
désactiver l'affichage des numéros de lignes
<source lang="vim">
<syntaxhighlight lang="vim">
se nu!
se nu!
</source>
</syntaxhighlight>
 
Activer la coloration syntaxique
Activer la coloration syntaxique
<source lang="vim">
<syntaxhighlight lang="vim">
syn on
syn on
</source>
</syntaxhighlight>
 
Désactiver la coloration syntaxique
Désactiver la coloration syntaxique
<source lang="vim">
<syntaxhighlight lang="vim">
syn off
syn off
</source>
</syntaxhighlight>
 
Afficher la ligne où se trouve le curseur
Afficher la ligne où se trouve le curseur
<source lang="vim">
<syntaxhighlight lang="vim">
set cursorline
set cursorline
</source>
</syntaxhighlight>
 
Masquer le trait de soulignement
Masquer le trait de soulignement
<source lang="vim">
<syntaxhighlight lang="vim">
set cursorline!
set cursorline!
</source>
</syntaxhighlight>
 
Commenter plusieurs lignes
Commenter plusieurs lignes
<source lang="vim">
<syntaxhighlight lang="vim">
,+4 s/^/#/g
,+4 s/^/#/g
</source>
</syntaxhighlight>
 
Dé-commenter plusieurs lignes
Dé-commenter plusieurs lignes
<source lang="vim">
<syntaxhighlight lang="vim">
.,+4 s/^#//g
.,+4 s/^#//g
</source>
</syntaxhighlight>
Plus simple, pour commenter (après une sélection des lignes à commenter en mode visuel bloc <source lang="bash" inline><maj>+<v></source> et un appui sur <source lang="bash" inline>:</source>)
 
<source lang="vim">
Plus simple, pour commenter (après une sélection des lignes à commenter en mode visuel bloc <code><maj>+<v></code> et un appui sur <code>:</code>)
<syntaxhighlight lang="vim">
s/^/#
s/^/#
</source>
</syntaxhighlight>
Dé-commenter (après sélection <source lang="bash" inline><maj>+<v></source> + <source lang="bash" inline>:</source>)
 
<source lang="vim">
Dé-commenter (après sélection <code><maj>+<v></code> + <code>:</code>)
<syntaxhighlight lang="vim">
s/#//
s/#//
</source>
</syntaxhighlight>
ou <source lang="bash" inline><maj>+<v></source> puis <source lang="bash" inline><x></source>.
 
ou <code><maj>+<v></code> puis <code><x></code>.


Ajouter en fin de ligne (après sélection <source lang="bash" inline><maj>+<v></source> + <source lang="bash" inline>:</source>)
Ajouter en fin de ligne (après sélection <code><maj>+<v></code> + <code>:</code>)
<source lang="vim">
<syntaxhighlight lang="vim">
s/$/\ :\  
s/$/\ :\  
s/$/;
s/$/;
</source>
</syntaxhighlight>
Ajouter au niveau du curseur (après sélection <source lang="bash" inline><ctrl>+<v></source> + <source lang="bash" inline>:</source>)
 
<source lang="vim">
Ajouter au niveau du curseur (après sélection <code><ctrl>+<v></code> + <code>:</code>)
<syntaxhighlight lang="vim">
s/\%V/\ :
s/\%V/\ :
s/\%V/^I
s/\%V/^I
</source>
</syntaxhighlight>


<span style="color:red;">vim ajouter à partir du curseur (À trouver) http://andrewradev.com/2011/05/08/vim-regexes/</span>
<span style="color:red;">vim ajouter à partir du curseur (À trouver) http://andrewradev.com/2011/05/08/vim-regexes/</span>
Ligne 88 : Ligne 100 :


Remplacer un mot par un autre
Remplacer un mot par un autre
<source lang="vim">
<syntaxhighlight lang="vim">
%s/Mot_initial/Nouveau_mot/g
%s/Mot_initial/Nouveau_mot/g
</source>
</syntaxhighlight>
 
Changer encodage caractère
Changer encodage caractère
<source lang="vim">
<syntaxhighlight lang="vim">
set fileencoding=latin1
set fileencoding=latin1
set fileencoding=utf-8
set fileencoding=utf-8
</source>
</syntaxhighlight>
Auto complétion CSS (une fois renseigné, faire <source lang="bash" inline><ctrl>+<x></source> + <source lang="bash" inline><ctrl>+<o></source>)
 
<source lang="vim">
Auto complétion ''CSS'' (une fois renseigné, faire <code><ctrl>+<x></code> + <code><ctrl>+<o></code>)
<syntaxhighlight lang="vim">
set omnifunc=csscomplete#CompleteCSS
set omnifunc=csscomplete#CompleteCSS
</source>
</syntaxhighlight>
Exécuter une commande ''bash'' sans quitter ''vim''
 
<source lang="vim">
Exécuter une [[Shell bash|commande Bash]] sans quitter ''Vim''
<syntaxhighlight lang="vim">
!Commande_À_Exécuter
!Commande_À_Exécuter
</source>
</syntaxhighlight>
Importer fichier depuis ''vim''
 
<source lang="vim">
Importer un fichier depuis ''Vim''
<syntaxhighlight lang="vim">
r Chemin_fichier
r Chemin_fichier
</source>
</syntaxhighlight>
 
Indentation automatique
Indentation automatique
<source lang="vim">
<syntaxhighlight lang="vim">
se ai
se ai
</source>
</syntaxhighlight>
Permettre un copier/coller avec <source lang="vim" inline>se ai</source>
 
<source lang="vim">
Permettre un copier/coller respectant l'indentation avec <code>se ai</code>
<syntaxhighlight lang="vim">
se paste
se paste
</source>
</syntaxhighlight>
Activer/désactiver <source lang="vim" inline>se paste</source> en appuyant sur <source lang="bash" inline><F2></source>
 
<source lang="vim">
Activer/désactiver <code>se paste</code> en appuyant sur <code><F2></code>
<syntaxhighlight lang="vim">
set pastetoggle=<F2>
set pastetoggle=<F2>
</source>
</syntaxhighlight>
 
Insensibilité à la casse (utile pour le mode recherche notamment)
Insensibilité à la casse (utile pour le mode recherche notamment)
<source lang="vim">
<syntaxhighlight lang="vim">
se ic
se ic
</source>
</syntaxhighlight>
 
Activer le curseur de sélection avec la souris
Activer le curseur de sélection avec la souris
<source lang="vim">
<syntaxhighlight lang="vim">
se mouse=a
se mouse=a
</source>
</syntaxhighlight>
 
Désactiver le curseur de sélection avec la souris
Désactiver le curseur de sélection avec la souris
<source lang="vim">
<syntaxhighlight lang="vim">
se mouse=
se mouse=
</source>
</syntaxhighlight>
 
Scinder l'écran pour ouvrir un autre fichier horizontalement
Scinder l'écran pour ouvrir un autre fichier horizontalement
<source lang="vim">
<syntaxhighlight lang="vim">
split [Nom_fichier] ou :sp
split [Nom_fichier] ou :sp
</source>
</syntaxhighlight>
 
En vertical
En vertical
<source lang="vim">
<syntaxhighlight lang="vim">
vspli ou :vsp
vspli ou :vsp
</source>
</syntaxhighlight>
{{info|Le couple <source lang="bash" inline><ctrl-w> + flèche</source> permet de passer d'un fichier à l'autre. }}
 
{{info|Le couple <code><ctrl-w> + flèche</code> permet de passer d'un fichier à l'autre. }}
 
Redéfinir l'espace de l'indentation (pour passer de 8 espaces à 3)
Redéfinir l'espace de l'indentation (pour passer de 8 espaces à 3)
<source lang="vim">
<syntaxhighlight lang="vim">
set tabstop=3
set tabstop=3
set shiftwidth=3
set shiftwidth=3
set softtabstop=3
set softtabstop=3
</source>
</syntaxhighlight>
 
Convertir des indentation "espace" en indentation "tabulation"
Convertir des indentation "espace" en indentation "tabulation"
<source lang="vim">
<syntaxhighlight lang="vim">
%retab!
%retab!
</source>
</syntaxhighlight>
Créer et gérer des onglets
Créer et gérer des onglets
<source lang="vim">
<syntaxhighlight lang="vim">
tabnew [nom_fichier]
tabnew [nom_fichier]
</source>
</syntaxhighlight>
 
Se déplacer dans les onglets
Se déplacer dans les onglets


En avant : <source lang="vim" inline>gt</source>, en arrière : <source lang="vim" inline>gT</source>.
En avant : <code>gt</code>, en arrière : <code>gT</code>.


Ouvrir plusieurs fichier dans un onglets chacun (à exécuter dans ''bash'') :
Ouvrir plusieurs fichiers dans un onglet chacun (à exécuter dans ''Bash'') :
  vim -p fichier1 fichier2 fichier3
  vim -p fichier1 fichier2 fichier3
Convertir du texte en majuscule ou en minuscule
Convertir du texte en majuscule ou en minuscule
* Inverser la casse : sélectionner le texte avec <source lang="bash" inline>ctrl+v</source> et faire un <source lang="bash" inline>~</source>
* Inverser la casse : sélectionner le texte avec <code>ctrl+v</code> et faire un <code>~</code>
 
ou
ou
* On peut utiliser <source lang="bash" inline>U</source> pour mettre en majuscule ou <source lang="bash" inline>u</source> pour mettre en minuscule
 
* On peut utiliser <code>U</code> pour mettre en majuscule ou <code>u</code> pour mettre en minuscule
 
Masquer les commentaires d'un fichier (à ajouter dans un [[#fichiers de configuration|fichier de configuration]])
Masquer les commentaires d'un fichier (à ajouter dans un [[#fichiers de configuration|fichier de configuration]])
<source lang="vim">
<syntaxhighlight lang="vim">
set fdm=expr
set fdm=expr
set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0
set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0
</source>
</syntaxhighlight>
Pour '''déplier''' temporairement un bloc de commentaires (un bloc correspondant dans ce cas à plusieurs lignes consécutives commençant par le caractère '''#'''), placez votre curseur sur le pli correspondant au bloc compacté et tapez <source lang="bash" inline>zo</source> (ou pressez simplement sans sélection pour agir sur tout le document), et <source lang="bash" inline>zm</source> pour '''le replier'''. Si vous avez déplié plusieurs blocs, vous pouvez '''tous les replier''' d'un coup avec <source lang="bash" inline>zM</source> ; à l'inverse, vous pouvez '''déplier tous les blocs''' d'un seul coup avec <source lang="bash" inline>zi</source>.
 
Pour '''déplier''' temporairement un bloc de commentaires (un bloc correspondant dans ce cas à plusieurs lignes consécutives commençant par le caractère '''#'''), placez votre curseur sur le pli correspondant au bloc compacté et tapez <code>zo</code> (ou pressez simplement sans sélection pour agir sur tout le document), et <code>zm</code> pour '''le replier'''. Si vous avez déplié plusieurs blocs, vous pouvez '''tous les replier''' d'un coup avec <code>zM</code> ; à l'inverse, vous pouvez '''déplier tous les blocs''' d'un seul coup avec <code>zi</code>.
 
Utiliser Vim en tant qu'éditeur hexadécimale ([http://pellelatarte.fr/2010/10/utiliser-vi-en-editeur-hexadecimal/ source])
%!xxd
Revenir à la normal
%!xxd -r
 
{{attention|Un enregistrement en mode hexadécimale enregistrera le texte comme tel, il faudra alors désactiver ce mode et réenregistrer le document pour revenir à la normal.}}
 
Garder la position du curseur là où il était à la [https://askubuntu.com/questions/202075/how-do-i-get-vim-to-remember-the-line-i-was-on-when-i-reopen-a-file fermeture] du fichier
<syntaxhighlight lang="vim">
if has("autocmd")
au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
</syntaxhighlight>


===Désactiver les fonctions agaçantes===
===Désactiver les fonctions agaçantes===
Avec les mises à jour de Vim, de plus en plus de fonctions inutiles et contres-productivent sont installées par défaut (Debian Stretch, si tu m'entend...). Ce qui suit a pour but de rendre Vim de nouveau utilisable comme dans le bon vieux temps.
Avec les mises à jour de ''Vim'', de plus en plus de fonctions inutiles et contres-productives sont installées par défaut (''Debian Stretch'', si tu m'entends...). Ce qui suit a pour but de rendre ''Vim'' de nouveau utilisable comme dans le bon vieux temps.


Désactiver l'ajout automatique de commentaires ([https://superuser.com/questions/271023/vim-can-i-disable-continuation-of-comments-to-the-next-line source])
Désactiver l'ajout automatique de commentaires ([https://superuser.com/questions/271023/vim-can-i-disable-continuation-of-comments-to-the-next-line source])
<source lang="vim">
<syntaxhighlight lang="vim">
set formatoptions-=cro
set formatoptions-=cro
</source>
</syntaxhighlight>
 
Désactiver la gestion de la souris (qui empêche le copier/coller !)
Désactiver la gestion de la souris (qui empêche le copier/coller !)
<source lang="vim">
<syntaxhighlight lang="vim">
set mouse=
set mouse=
</source>
</syntaxhighlight>
 
===Corrections de bogues===
====Corriger le problème des flèches qui affichent A B C D====
De façon totalement aléatoire et sur certaines configurations, l'utilisation des flèches au clavier enclenche automatiquement le monde insertion et tape les lettres A, B, C ou D en fonction de la flèche pressée. Il semble que la façon de régler ce problème diffère selon les configurations. Une liste impressionnante de palliatifs est trouvable [https://vim.fandom.com/wiki/Fix_arrow_keys_that_display_A_B_C_D_on_remote_shell ici]. La solution [https://vim.fandom.com/wiki/Fix_arrow_keys_that_display_A_B_C_D_on_remote_shell#Solution_24 n°24] a réglée celui rencontré sur une Debian 12 installée via ''PXE'' comme des centaines d'autres chaque années dans mon infrastructure (celle-là a décidée de me faire chier).
 
Il faut re-cartographier les touches fléchées en ajoutant ceci dans le <code>~/.vimrc</code> :
nnoremap <silent> <ESC>OA <UP>
nnoremap <silent> <ESC>OB <DOWN>
nnoremap <silent> <ESC>OC <RIGHT>
nnoremap <silent> <ESC>OD <LEFT>
inoremap <silent> <ESC>OA <UP>
inoremap <silent> <ESC>OB <DOWN>
inoremap <silent> <ESC>OC <RIGHT>
inoremap <silent> <ESC>OD <LEFT>


=Presses papiers=
=Presses papiers=
Vim possèdes plusieurs presses papiers (buffers) qui peuvent être exploiter afin de poutrer sévère lors d'une édition de texte. Il y en a un par lettre de l'alphabet. Ils s'utilisent en '''mode interactif''' avec les touches <source lang="bash" inline>"<lettre><raccourci></source> de cette manière :
''Vim'' possèdes plusieurs presses papiers appelés registres (''register'' ou ''buffers'') qui peuvent être exploités afin de maintenir plusieurs copier/coller en mémoires. Il y en a un par lettre de l'alphabet. Ils s'utilisent en '''mode interactif''' avec les touches <code><">+<lettre>+<raccourci></code> de cette manière :
 
{{attention|Le contenu des presses papiers est sauvegardé même après avoir quitté ''Vim'' (ces informations sont stockés dans le fichier <code>~/.viminfo</code>). Ceci peut avoir des conséquences en terme de confidentialité des informations. Au besoin, pensez à utiliser le registre poubelle ainsi que la suppression du contenu des registres expliqué plus bas.}}


Copier des lignes dans des presses papiers différents
Copier des lignes dans des presses papiers différents


<source lang="bash" inline>"ayy</source>, <source lang="bash" inline>"byy</source>, <source lang="bash" inline>"cyy</source>.
<code>"ayy</code>, <code>"byy</code>, <code>"cyy</code>.
 
Coller des lignes depuis des presses papiers différents
 
<code>"ap</code>, <code>"bp</code>, <code>"cp</code>.
 
Pour ajouter une ligne à un presse papier, il faut préciser la lettre du presse papier voulu, en majuscule <code>"Byy</code>.
 
Pour copier/coller en prenant en compte le presse papier par défaut (celui que l'on à lors d'un simple <code>yy</code>)


Coller des lignes depuis des presses papiers  différents
<code>"+yy</code> copie une ligne pour le presse papier par défaut, et <code>"+p</code> colle le presse papier par défaut (ceci n'a aucun intérêt...).


<source lang="bash" inline>"ap</source>, <source lang="bash" inline>"bp</source>, <source lang="bash" inline>"cp</source>.
Registre poubelle (équivalent du /dev/null). Permet de supprimer des lignes sans les conserver dans un registre
<code>"_dd</code>


Pour ajouter une ligne à un presse papier, il faut préciser la lettre du presse papier voulu, en majuscule <source lang="bash" inline>"Byy</source>.
Pour vider le [https://stackoverflow.com/questions/19430200/how-to-clear-vim-registers-effectively contenu] d'un registre, il faut utiliser la commande <code>:let @a = ''</code> en remplaçant la lettre par celle de votre registre ( utiliser <code>"</code> pour le registre par défaut).


Pour copier/coller en prenant en compte le presse papier global (celui que l'on à lors d'un simple <source lang="bash" inline>yy</source>)
=Historique=
L'historique de l'éditeur est parsemé dans le fichier <code>~/.viminfo</code>.


<source lang="bash" inline>"+yy</source> copie une ligne pour le presse papier global, et <source lang="bash" inline>"+p</source> colle le presse papier global.
Pour [https://unix.stackexchange.com/questions/204689/how-to-clear-search-and-command-history-in-vim purger] intégralement celui des recherches, il est possible de faire <code>:call histdel('/')</code>. Pour celui des commandes, on fera <code>:call histdel(':')</code>.  


Buffer poubelle (équivalent du /dev/null)
Il est également possible de ne supprimer qu'une entrée en particulier via un motif: <code>:call histdel(":", "MOT_CLÉ_CONTENU_DANS_VOTRE_COMMANDE")</code>.
<source lang="bash" inline>"_dd</source>


=Macros=
=Macros=
Ligne 208 : Ligne 281 :


Créer des macros
Créer des macros
<source lang="bash" inline>q+<lettre></source> pour passer en mode enregistrement.
<code>q+<lettre></code> pour passer en mode enregistrement.
 
<code>q</code> pour terminer l'enregistrement.


<source lang="bash" inline>q</source> pour terminer l'enregistrement.
<code>@+<lettre></code> pour la jouer (ça fait comme un presse papier).


<source lang="bash" inline>@+<lettre></source> pour la jouer (ça fait comme un presse papier).
=Fichiers de configuration=
=Fichiers de configuration=
Les fichiers de configuration de Vim permettent de définir des paramètres activés à chaque lancement de l'éditeur. Il en existe deux type :
Les fichiers de configuration de ''Vim'' permettent de définir des paramètres activés à chaque lancement de l'éditeur. Il en existe deux types :
* Un général, actif pour tout les utilisateurs du système : <source lang="bash" inline>/etc/vim/vimrc</source>
* Un général, actif pour tout les utilisateurs du système : <code>/etc/vim/vimrc</code>
*Un courant, pour chaque utilisateurs en particulier : <source lang="bash" inline>~/.vimrc</source>
* Un courant, pour chaque utilisateurs en particulier : <code>~/.vimrc</code>
Il suffit de renseigner des commandes Vim (sans les ''':''') dans ces fichiers pour que leur effet soit permanent.
Il suffit de renseigner des commandes Vim (sans les ''':''') dans ces fichiers pour que leur effet soit permanent.
Pour exécuter ''Vim'' tout en [https://evanhahn.com/ignore-vimrc-with-vim/ ignorant] les fichiers de configuration :
vim -u NONE
=Greffons=
=Greffons=
Il est possible d'ajouter des fonctionnalités supplémentaires à Vim par l'intermédiaire de greffons (plugins). Il sont à mettre (selon le même principe que le vimrc) dans le répertoire général <source lang="bash" inline>/etc/vim/</source> ou dans <source lang="bash" inline>~/.vim/</source> pour les rendre spécifiques à chaque utilisateur.
Il est possible d'ajouter des fonctionnalités supplémentaires à ''Vim'' par l'intermédiaire de greffons (''plugins''). Il sont à mettre (selon le même principe que le ''vimrc'') dans le répertoire général <code>/etc/vim/</code> ou dans <code>~/.vim/</code> pour les rendre spécifiques à chaque utilisateur.


==Greffons que j'utilise==
==Greffons que j'utilise==
Pour une configuration adaptée à un développement ''WEB'', les informations de ce [https://gitea.ycharbi.fr/ycharbi/vim-dev-web dépôt] peuvent-êtres utiles.
===Emmet===
===Emmet===
Orienté programmation web, le greffon [http://emmet.io/ Emmet] (anciennement Zen Coding) permet, en utilisant une syntaxe (très) raccourcie, d'écrire du code HTML et CSS de façon extrêmement efficace. De plus, il est disponible sur une [http://emmet.io/download/ multitude d'éditeurs]. Il s'installe de la façon suivante :
Orienté programmation web, le greffon [http://emmet.io/ Emmet] (anciennement ''Zen Coding'') permet, en utilisant une syntaxe (très) raccourcie, d'écrire du code ''HTML'' et ''CSS'' de façon extrêmement efficace. De plus, il est disponible sur une [http://emmet.io/download/ multitude d'éditeurs]. Il s'installe de la façon suivante :
# Télécharger Emmet depuis les [https://github.com/mattn/emmet-vim sources]
 
# Décompresser les répertoires '''autoload''' et '''plugin''' dans <source lang="bash" inline>~/.vim/</source>
# Télécharger ''Emmet'' depuis les [https://github.com/mattn/emmet-vim sources]
Pour utiliser Emmet, il faut écrire dans un fichier les différentes [http://docs.emmet.io/cheat-sheet/ expressions possibles] et faire la combinaison de touches (en mode interactif) <source lang="bash" inline><c-y>,</source> (faire '''ctrl + y''' et ensuite sur ''',''')
# Décompresser les répertoires '''autoload''' et '''plugin''' dans <code>~/.vim/</code>
 
 
Pour utiliser ''Emmet'', il faut écrire dans un fichier les différentes [http://docs.emmet.io/cheat-sheet/ expressions possibles] et faire la combinaison de touches (en mode interactif) <code><c-y>,</code> (faire '''ctrl + y''' et ensuite sur ''',''').
 
===IndentLine===
===IndentLine===
IndentLine permet d'afficher une ligne verticale marquant le niveau d'indentation de votre code. Il est très utile notamment lorsque les bloques de code sont imbriqués sur énormément de niveau (rendant le repérage visuel extrêmement difficile). Il s'installe de la façon suivante :
''IndentLine'' permet d'afficher une ligne verticale marquant le niveau d'indentation de votre code. Il est très utile notamment lorsque les bloques de code sont imbriqués sur énormément de niveau (rendant le repérage visuel extrêmement difficile). Il s'installe de la façon suivante :
# Télécharger IndentLine depuis les [https://github.com/Yggdroot/indentLine sources]
 
# Décompresser le répertoire '''plugin''' dans <source lang="bash" inline>~/.vim/</source>
# Télécharger ''IndentLine'' depuis les [https://github.com/Yggdroot/indentLine sources]
# Ajouter dans le vimrc ce paramètre (l'espace de fin est important) : <source lang="bash" inline>set list lcs=tab:\|\ </source>
# Décompresser le répertoire '''plugin''' dans <code>~/.vim/</code>
# Ajouter dans le ''.vimrc'' ce paramètre (l'espace de fin est important) : <code>set list lcs=tab:\|\ </code>
 
==Gestionnaire de greffons==
==Gestionnaire de greffons==
===Vim-plug===
===Vim-plug===
Télécharger le greffon
Télécharger le greffon
  curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Ajouter les greffons à installer et utiliser dans le .vimrc
 
<source lang="vim">
Ajouter les greffons à installer et ajouter dans le ''vimrc''
<syntaxhighlight lang="vim">
call plug#begin()
call plug#begin()
Plug 'junegunn/vim-easy-align'
Plug 'junegunn/vim-easy-align'
Ligne 244 : Ligne 331 :
Plug 'hzchirs/vim-material'
Plug 'hzchirs/vim-material'
call plug#end()
call plug#end()
</source>
</syntaxhighlight>
 
''On trouve les noms de ces greffons sur leur page GIT.''
''On trouve les noms de ces greffons sur leur page GIT.''
Installer les greffons mis dans le .vimrc (aller dans vim)
 
Installer les greffons mis dans le ''vimrc'' (aller dans <code>vim</code>)
  :PlugInstall
  :PlugInstall
{{info|Tout est mis dans <source lang="bash" inline>.vim</source>. Le paquet '''git''' est nécessaire.}}
 
Un exemple de .vimrc
{{info|Tout est mis dans <code>.vim</code>. Le paquet <code>git</code> est nécessaire.}}
<source lang="vim">
 
Un exemple de ''.vimrc''
<syntaxhighlight lang="vim">
se nu
se nu
se termguicolors
se termguicolors
Ligne 271 : Ligne 362 :
colorscheme vim-material
colorscheme vim-material
let g:airline_theme='material'
let g:airline_theme='material'
</source>
</syntaxhighlight>
 
====Sources de la section====
====Sources de la section====
* https://github.com/junegunn/vim-plug
* https://github.com/junegunn/vim-plug
* http://vimcolors.com/
* http://vimcolors.com/
=Couleurs 24bits=
=Couleurs 24bits=
Pour avoir des couleurs plus sympas avec VIM (remplace le ''syn on''), il faut utiliser ''se termguicolors''. Attention, il faut que le terminal utilisé soit compatible. [https://gist.github.com/XVilka/8346728 Cette page Github] peut aider à déterminer si c'est le cas.
Pour avoir des couleurs plus sympas avec ''Vim'' (remplace le ''syn on''), il faut utiliser ''se termguicolors''. Attention, il faut que le terminal utilisé soit compatible. [https://github.com/termstandard/colors Cette page Github] peut aider à déterminer si c'est le cas.
 
=Sources=
=Sources=
* http://cfennajoui.net/vim/traduit/html/usr_30.txt.php
* http://cfennajoui.net/vim/traduit/html/usr_30.txt.php
* http://www.blogduwebdesign.com/developpement-vim/vim-astuce-pour-le-copier-coller/605
* http://www.blogduwebdesign.com/developpement-vim/vim-astuce-pour-le-copier-coller/605
* http://qsdqsd.free.fr/Vim/Vim_-_Un_pas_en_avant.html
* http://qsdqsd.free.fr/Vim/Vim_-_Un_pas_en_avant.html

Dernière version du 27 janvier 2024 à 13:01

Vim est un éditeur de texte, bifurcation de vi, signifiant "VI aMélioré" permettant d'éditer des documents de type texte (notamment des fichiers de configuration) dans un terminal ou une console (shell). Il ne nécessite pas d'interface graphique pour être exécuté, ce qui en fait un excellent outil sur un serveur, dépourvu d'environnements de bureau.

Installation

apt install vim

Comportement

Vim possède 5 modes :

  1. Le mode interactif
  2. Le mode insertion
  3. Le mode commande
  4. Le mode visuel
  5. Le mode recherche

Mode interactif

Lorsque Vim est exécuté, il est par défaut en mode interactif. Ce mode permet d'utiliser des combinaisons de touche pour interagir avec le texte du document en cours d'édition. Il est par exemple possible, en une combinaison, de couper 4 lignes de texte et de les coller dans un autre emplacement du document, voir dans un autre document.

Mettre un tableau avec les touches qu'on utilise souvent avec le mode interactif

Mode insertion

Le mode insertion est le mode classique d'édition de texte. C'est celui dans lequel on tape du texte comme dans n'importe quel autre éditeur.

Pour revenir au mode interactif, il faut presser la touche <Echap>.

Mode commande

Ce mode permet d’interagir avec Vim par l'intermédiaire de commandes. Ces dernières vont permettre d'enregistrer le document, quitter Vim, importer un document dans un autre, passer des expressions régulières, activer des options et bien d'autres choses...

On entre une commande en étant au préalable en mode interactif et en tapant :.

Quelque commandes

Activer l'affichage des numéros de lignes

se nu

désactiver l'affichage des numéros de lignes

se nu!

Activer la coloration syntaxique

syn on

Désactiver la coloration syntaxique

syn off

Afficher la ligne où se trouve le curseur

set cursorline

Masquer le trait de soulignement

set cursorline!

Commenter plusieurs lignes

,+4 s/^/#/g

Dé-commenter plusieurs lignes

.,+4 s/^#//g

Plus simple, pour commenter (après une sélection des lignes à commenter en mode visuel bloc <maj>+<v> et un appui sur :)

s/^/#

Dé-commenter (après sélection <maj>+<v> + :)

s/#//

ou <maj>+<v> puis <x>.

Ajouter en fin de ligne (après sélection <maj>+<v> + :)

s/$/\ :\ 
s/$/;

Ajouter au niveau du curseur (après sélection <ctrl>+<v> + :)

s/\%V/\ :
s/\%V/^I

vim ajouter à partir du curseur (À trouver) http://andrewradev.com/2011/05/08/vim-regexes/

Placer des curseur là ou on veut pour pouvoir utiliser les regex d'en haut de façon ultra puissante

Remplacer un mot par un autre

%s/Mot_initial/Nouveau_mot/g

Changer encodage caractère

set fileencoding=latin1
set fileencoding=utf-8

Auto complétion CSS (une fois renseigné, faire <ctrl>+<x> + <ctrl>+<o>)

set omnifunc=csscomplete#CompleteCSS

Exécuter une commande Bash sans quitter Vim

!Commande_À_Exécuter

Importer un fichier depuis Vim

r Chemin_fichier

Indentation automatique

se ai

Permettre un copier/coller respectant l'indentation avec se ai

se paste

Activer/désactiver se paste en appuyant sur <F2>

set pastetoggle=<F2>

Insensibilité à la casse (utile pour le mode recherche notamment)

se ic

Activer le curseur de sélection avec la souris

se mouse=a

Désactiver le curseur de sélection avec la souris

se mouse=

Scinder l'écran pour ouvrir un autre fichier horizontalement

split [Nom_fichier] ou :sp

En vertical

vspli ou :vsp

INFORMATION

Le couple <ctrl-w> + flèche permet de passer d'un fichier à l'autre.

Redéfinir l'espace de l'indentation (pour passer de 8 espaces à 3)

set tabstop=3
set shiftwidth=3
set softtabstop=3

Convertir des indentation "espace" en indentation "tabulation"

%retab!

Créer et gérer des onglets

tabnew [nom_fichier]

Se déplacer dans les onglets

En avant : gt, en arrière : gT.

Ouvrir plusieurs fichiers dans un onglet chacun (à exécuter dans Bash) :

vim -p fichier1 fichier2 fichier3

Convertir du texte en majuscule ou en minuscule

  • Inverser la casse : sélectionner le texte avec ctrl+v et faire un ~

ou

  • On peut utiliser U pour mettre en majuscule ou u pour mettre en minuscule

Masquer les commentaires d'un fichier (à ajouter dans un fichier de configuration)

set fdm=expr
set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0

Pour déplier temporairement un bloc de commentaires (un bloc correspondant dans ce cas à plusieurs lignes consécutives commençant par le caractère #), placez votre curseur sur le pli correspondant au bloc compacté et tapez zo (ou pressez simplement sans sélection pour agir sur tout le document), et zm pour le replier. Si vous avez déplié plusieurs blocs, vous pouvez tous les replier d'un coup avec zM ; à l'inverse, vous pouvez déplier tous les blocs d'un seul coup avec zi.

Utiliser Vim en tant qu'éditeur hexadécimale (source)

%!xxd

Revenir à la normal

%!xxd -r

ATTENTION

Un enregistrement en mode hexadécimale enregistrera le texte comme tel, il faudra alors désactiver ce mode et réenregistrer le document pour revenir à la normal.

Garder la position du curseur là où il était à la fermeture du fichier

if has("autocmd")
	au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif

Désactiver les fonctions agaçantes

Avec les mises à jour de Vim, de plus en plus de fonctions inutiles et contres-productives sont installées par défaut (Debian Stretch, si tu m'entends...). Ce qui suit a pour but de rendre Vim de nouveau utilisable comme dans le bon vieux temps.

Désactiver l'ajout automatique de commentaires (source)

set formatoptions-=cro

Désactiver la gestion de la souris (qui empêche le copier/coller !)

set mouse=

Corrections de bogues

Corriger le problème des flèches qui affichent A B C D

De façon totalement aléatoire et sur certaines configurations, l'utilisation des flèches au clavier enclenche automatiquement le monde insertion et tape les lettres A, B, C ou D en fonction de la flèche pressée. Il semble que la façon de régler ce problème diffère selon les configurations. Une liste impressionnante de palliatifs est trouvable ici. La solution n°24 a réglée celui rencontré sur une Debian 12 installée via PXE comme des centaines d'autres chaque années dans mon infrastructure (celle-là a décidée de me faire chier).

Il faut re-cartographier les touches fléchées en ajoutant ceci dans le ~/.vimrc :

nnoremap <silent> <ESC>OA <UP>
nnoremap <silent> <ESC>OB <DOWN>
nnoremap <silent> <ESC>OC <RIGHT>
nnoremap <silent> <ESC>OD <LEFT>
inoremap <silent> <ESC>OA <UP>
inoremap <silent> <ESC>OB <DOWN>
inoremap <silent> <ESC>OC <RIGHT>
inoremap <silent> <ESC>OD <LEFT>

Presses papiers

Vim possèdes plusieurs presses papiers appelés registres (register ou buffers) qui peuvent être exploités afin de maintenir plusieurs copier/coller en mémoires. Il y en a un par lettre de l'alphabet. Ils s'utilisent en mode interactif avec les touches <">+<lettre>+<raccourci> de cette manière :

ATTENTION

Le contenu des presses papiers est sauvegardé même après avoir quitté Vim (ces informations sont stockés dans le fichier ~/.viminfo). Ceci peut avoir des conséquences en terme de confidentialité des informations. Au besoin, pensez à utiliser le registre poubelle ainsi que la suppression du contenu des registres expliqué plus bas.

Copier des lignes dans des presses papiers différents

"ayy, "byy, "cyy.

Coller des lignes depuis des presses papiers différents

"ap, "bp, "cp.

Pour ajouter une ligne à un presse papier, il faut préciser la lettre du presse papier voulu, en majuscule "Byy.

Pour copier/coller en prenant en compte le presse papier par défaut (celui que l'on à lors d'un simple yy)

"+yy copie une ligne pour le presse papier par défaut, et "+p colle le presse papier par défaut (ceci n'a aucun intérêt...).

Registre poubelle (équivalent du /dev/null). Permet de supprimer des lignes sans les conserver dans un registre "_dd

Pour vider le contenu d'un registre, il faut utiliser la commande :let @a = en remplaçant la lettre par celle de votre registre ( utiliser " pour le registre par défaut).

Historique

L'historique de l'éditeur est parsemé dans le fichier ~/.viminfo.

Pour purger intégralement celui des recherches, il est possible de faire :call histdel('/'). Pour celui des commandes, on fera :call histdel(':').

Il est également possible de ne supprimer qu'une entrée en particulier via un motif: :call histdel(":", "MOT_CLÉ_CONTENU_DANS_VOTRE_COMMANDE").

Macros

Définir l'intérêt des macros...

Créer des macros q+<lettre> pour passer en mode enregistrement.

q pour terminer l'enregistrement.

@+<lettre> pour la jouer (ça fait comme un presse papier).

Fichiers de configuration

Les fichiers de configuration de Vim permettent de définir des paramètres activés à chaque lancement de l'éditeur. Il en existe deux types :

  • Un général, actif pour tout les utilisateurs du système : /etc/vim/vimrc
  • Un courant, pour chaque utilisateurs en particulier : ~/.vimrc

Il suffit de renseigner des commandes Vim (sans les :) dans ces fichiers pour que leur effet soit permanent.

Pour exécuter Vim tout en ignorant les fichiers de configuration :

vim -u NONE

Greffons

Il est possible d'ajouter des fonctionnalités supplémentaires à Vim par l'intermédiaire de greffons (plugins). Il sont à mettre (selon le même principe que le vimrc) dans le répertoire général /etc/vim/ ou dans ~/.vim/ pour les rendre spécifiques à chaque utilisateur.

Greffons que j'utilise

Pour une configuration adaptée à un développement WEB, les informations de ce dépôt peuvent-êtres utiles.

Emmet

Orienté programmation web, le greffon Emmet (anciennement Zen Coding) permet, en utilisant une syntaxe (très) raccourcie, d'écrire du code HTML et CSS de façon extrêmement efficace. De plus, il est disponible sur une multitude d'éditeurs. Il s'installe de la façon suivante :

  1. Télécharger Emmet depuis les sources
  2. Décompresser les répertoires autoload et plugin dans ~/.vim/


Pour utiliser Emmet, il faut écrire dans un fichier les différentes expressions possibles et faire la combinaison de touches (en mode interactif) <c-y>, (faire ctrl + y et ensuite sur ,).

IndentLine

IndentLine permet d'afficher une ligne verticale marquant le niveau d'indentation de votre code. Il est très utile notamment lorsque les bloques de code sont imbriqués sur énormément de niveau (rendant le repérage visuel extrêmement difficile). Il s'installe de la façon suivante :

  1. Télécharger IndentLine depuis les sources
  2. Décompresser le répertoire plugin dans ~/.vim/
  3. Ajouter dans le .vimrc ce paramètre (l'espace de fin est important) : set list lcs=tab:\|\

Gestionnaire de greffons

Vim-plug

Télécharger le greffon

curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Ajouter les greffons à installer et ajouter dans le vimrc

call plug#begin()
Plug 'junegunn/vim-easy-align'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'hzchirs/vim-material'
call plug#end()

On trouve les noms de ces greffons sur leur page GIT.

Installer les greffons mis dans le vimrc (aller dans vim)

:PlugInstall

INFORMATION

Tout est mis dans .vim. Le paquet git est nécessaire.

Un exemple de .vimrc

se nu
se termguicolors
set pastetoggle=<F2>

"L'indentation passe à 3 caractères
set tabstop=3
set shiftwidth=3
set softtabstop=3

"Activer les greffons
call plug#begin()
   Plug 'junegunn/vim-easy-align'
   Plug 'vim-airline/vim-airline'
   Plug 'vim-airline/vim-airline-themes'
   Plug 'hzchirs/vim-material'
call plug#end()

"Appliquer le thème vim-matérial
colorscheme vim-material
let g:airline_theme='material'

Sources de la section

Couleurs 24bits

Pour avoir des couleurs plus sympas avec Vim (remplace le syn on), il faut utiliser se termguicolors. Attention, il faut que le terminal utilisé soit compatible. Cette page Github peut aider à déterminer si c'est le cas.

Sources