De temps à autre, lors de l’écriture de scripts, il m’arrive d’accompagner l’appui de la touche espace de sa voisine, la touche « ALT-GR » ce qui du coup crée une espace insécable, invisible sur le moment jusqu’à ce que le script plante (la plupart du temps après un « pipe – ALT-GR + 8 »)…
Heureusement, grâce à Vim, il est possible d’afficher certains caractères spéciaux via les variables « list » et « listchars ».
« list » permet d’activer l’affichage des caractères spéciaux, on l’active en tapant « set list » et on le désactive en tapant « set list! » ou « set nolist ».
« listchars » contient la liste des caractères spéciaux à afficher séparés par des virgules (le « c » après le « : » étant le caractère de remplacement à afficher) :
- Fin de ligne : « eol:c »
- Tabulation : « tab:xy » (« x » étant le premier caractère de la tabulation, « y » étant le reste qui peut varier)
- Espaces de fin de ligne : « trail:c »
- Débordement à droite de la ligne par rapport à l’écran : « extends:c »
- Débordement à gauche de la ligne par rapport à l’écran : « precedes:c »
- Espace insécable : « nbsp:c »
Voici, pour exemple, les paramètres provenant de mon fichier « ~/.vimrc » :
" Affiche les caractères spéciaux
set listchars=nbsp:¤,tab:>-,trail:¤,extends:>,precedes:<
set list
Avant :

Après:

Sympa, non ? Merci vim !
J’ai pour habitude d’afficher de jolis commentaires bien démarqués du code source afin de pouvoir les lire très rapidement sans devoir les chercher. Hors, selon les langages de programmation, ceux-ci ne s’écrivent pas de la même façon. Je vous propose donc une petite macro (à placer dans votre « ~/.vimrc ») permettant d’habiller facilement vos commentaires ; celle-ci étant accessible grâce à la touche F8 en mode normal.
Voici la macro en question :
map <F8> :call Comment()<CR>
function! Comment()
let ext = expand("%:e")
if ext == 'html' || ext == 'htm'
execute "normal yyPPI<!--^[lDjI ^[j^DI-->^[j"
return
endif
if ext == 'php' || ext == 'js'
execute "normal I// ^[A //^[yyPv$r/yyjpj"
return
endif
if ext == 'txt'
execute "normal I| ^[A |^[yyPr+lv$r-$r+yyjpj"
return
endif
if ext == 'tex'
execute "normal I% ^[A %^[yyPr%lv$r/$r%yyjpj"
return
endif
if ext == 'c' || ext == 'cpp' || ext == 'cc' || ext == 'h' || ext == 'hpp'
execute "normal yyPPI/*^[lDjI ^[j^DI*/^[j"
return
endif
" Style de commentaire par défaut
if ext == 'sh' || ext == 'py' || ext == 'pl' || 1
execute "normal I# ^[A #^[yyPr#lv$r/$r#yyjpj"
return
endif
endfunction
J’ai deux petites remarques à faire :
- « ^[ » correspond à « ECHAP » que l’on écrit en appuyant sur « CTRL+V » puis « ECHAP »;
- le style de commentaire par défaut doit être sur la dernière ligne à cause du test « || 1 » qui dans tous les cas validera la condition.
Voici le résultat obtenu selon le format de fichier :
-
Extension du fichier html ou htm :
<!--
Hello GNU Squad !
-->
-
Extension du fichier php ou js :
///////////////////////
// Hello GNU Squad ! //
///////////////////////
-
Extension du fichier txt :
+-------------------+
| Hello GNU Squad ! |
+-------------------+
-
Extension du fichier tex :
%///////////////////%
% Hello GNU Squad ! %
%///////////////////%
-
Extension du fichier c, cpp, h ou hpp :
/*
Hello GNU Squad !
*/
-
Extension du fichier sh, py, pl et tout le reste :
#///////////////////#
# Hello GNU Squad ! #
#///////////////////#
À vous d’agrémenter ou de modifier selon vos besoins, si vous avez besoin d’aide, n’hésitez-pas à passer par les commentaires