Vim : stocker une configuration spéciale pour éditer un fichier directement dans ce fichier

À l'origine, je voulais présenter dans ce billet comment faire de l'édition de texte sous Vim. Je me suis finalement résigné à un article moins rébarbatif (si, si, croyez-moi), mais qui vous sera au moins aussi utile je l'espère. Pour l'édition de texte, je vous laisse vous rendre comme des grands sur :help usr_25.

Commencez par taper :help et descendez en bas de la page (avec par exemple G, pour ceux qui ne connaissent pas la touche) et constatez la présence d'une ligne un peu étrange.

vim:tw=78:fo=tcq2:isk=!-~,^*,^|,^":ts=8:ft=help:norl:

Tiens tiens, c'est quoi ça ?

Essayons :help vim… magie, nous apprenons que cette petite ligne s'appelle une modeline. Au passage, le saviez-vous, si vous tapez :help sujet suivi de Ctrl-D (avant d'appuyer sur Entrée), Vim vous présentera toutes les entrées de l'aide qui parlent de sujet.

Une modeline donc, c'est une petit ligne qui permet de stocker dans un fichier la configuration de Vim désirée pour ce fichier. Très pratique si vous décidez par exemple d'avoir une tabulation de 2 espaces dans un fichier PHP alors que d'habitude vous utilisez une tabulation de largeur 4. Le but n'est pas d'insérer une ligne de ce type dans chaque fichier (reportez vous plutôt à filetype si vous voulez changer globalement la configuration de Vim pour tous vos fichiers PHP), mais bien de changer le comportement pour quelques fichiers isolés.
Par l'exemple :

 vim:shiftwidth=2:tabstop=2
// vim:shiftwidth=2:tabstop=2
/* vim:set shiftwidth=2:tabstop=2: */

Les deux lignes du dessous ci-dessus montrent qu'il est possible d'entourer cette ligne magique de texte, ce qui permet de la placer par exemple dans les commentaires de votre code, et donc d'éviter les erreurs de syntaxe… Plutôt pratique !

Notez bien qu'il faut au moins un espace avant le vim: initial, et que la syntaxe diffère légèrement si vous voulez pouvoir rajouter du texte après votre modeline.

Pour manipuler certains fichiers de texte par exemple, j'aime utiliser les options suivantes :

 vim:fo=troaqwn1:tw=78:sw=2:sts=2:et:js:ai:lcs=nbsp:⋅:list:spl=fr:spell:

En bref, dans l'ordre :

  • formatoptions : je vous invite à taper :help fo-table pour comprendre toutes les options. a en particulier se charge de reformater les lignes automatiquement. w, autre option très intéressante, détermine que toute ligne qui ne finit pas par un espace annonce un nouveau paragraphe. Sans ça le reformatage automatique considèrera tous les blocs de textes qui ne sont pas séparés par une ligne vide (saut de ligne) comme des paragraphes solidaires… et ce n'est pas ma notion naturelle de paragraphe ;
  • textwidth détermine au bout de combien de caractères maximum la ligne est coupée en deux ;
  • shiftwidth indique la taille d'une tabulation ;
  • softtabstop indique combien d'espaces sont considérés comme une tabulation (ici supprimer 2 espaces en début de lignes se fera en un seul appui sur la touche retour arrière, comme si vous aviez une tabulation à la place) ;
  • expandtab insère des espaces au lieu de tabulations ;
  • joinspaces ajoute deux espaces et non un seul après les signes de ponctuation marquant une fin de phrase lorsque vous utilisez J pour joindre plusieurs lignes. J'aime beaucoup mettre deux espaces entre mes phrases ; c'est plus anglo-saxon que français, mais je trouve que c'est plus lisible.
  • autoindent indente une nouvelle ligne au même niveau que la précédente ;
  • pour listchars et list voyez Vim : afficher les espaces insécables ou d'autres caractères exotiques
  • spl=fr spell active la correction orthographique en Français (voyez La correction orthographique sous Vim)

Encore une fois, je vous recommande fortement de passer par :help usr_25 mais aussi de touiller les options ci-dessus pour mieux comprendre les possibilités d'édition de texte sous Vim (centrer un texte, le jutifier, manipuler des tableaux, …)

Si vous créez souvent des fichiers dans lesquels vous désirez une modeline de votre choix, vous pouvez rédiger un modèle (template) avec cette ligne. Je vous redirige par exemple vers un article de fredgnix. Attention, dans l'article, ne vous trompez pas, il faut lire 0r (avec un zéro) et pas Or (avec un O).

Voilà, j'espère que ça vous servira. Évitez juste d'en abuser si vous travaillez en équipe sur des fichiers, les autres risquent de vous en vouloir.

Vus : 405
Publié par djibux : 113