Intéressé par des cours d'informatique en ligne ?
Visitez mon nouveau site
https://www.yesik.it !
Dans un éditeur de texte comme vim, une même ligne logique terminée par un retour à la ligne peut s'enrouler sur plusieurs lignes écran.
Quand on utilise l'éditeur de texte vim pour taper du texte au kilomètre, une chose pénible est de devoir insérer manuellement les retours à la ligne ... au bout de chaque ligne. En effet, en l'absence de retour à la ligne explicite, le texte est inséré dans une très longue ligne logique qui s'enroule sur plusieurs lignes écran.
Heureusement, vim possède (au moins) deux manières de formater automatiquement les lignes à la bonne longueur. Soit lors de la saisie. Soit après coup.
Sommaire
Formatage lors de la saisie: l'option textwidth
Une fois la largeur du texte définie avec :set textwidth, vim insère automatiquement un retour à la ligne quand le texte dépasse cette limite.
La solution pour vous simplifier la vie lors de la saisie est d'utiliser l'option textwidth. Avec elle, il est possible de définir explicitement une longueur de ligne maximale, et dans ce cas, tout texte non blanc tapé au delà de la limite déclenche l'insertion automatique d'un retour à la ligne. Bien entendu, la rupture se fait sur une frontière de mot (une espace).
La valeur de textwidth est définie à l'aide de la commande :set:
:set textwidth=14
À partir de maintenant, si vous tapez une ligne de plus de 14 caractères, un retour sera inséré devant le mot qui dépasse. Notez que si vous insérez plus de textwidth caractères sans espace, aucun retour n'est inséré.
Pour plus de détails sur textwidth, je vous renvoie sur l'aide en ligne de vim:
sh$ vim -c ":help textwidth" *'textwidth'* *'tw'* 'textwidth' 'tw' number (default 0) local to buffer {not in Vi} Maximum width of text that is being inserted. A longer line will be broken after white space to get this width. A zero value disables this. 'textwidth' is set to 0 when the 'paste' option is set. When 'textwidth' is zero, 'wrapmargin' may be used. See also 'formatoptions' and |ins-textwidth|. When 'formatexpr' is set it will be used to break the line. NOTE: This option is set to 0 when 'compatible' is set.
Reformatage après modification: la commande gq
textwidth dans Vim — L'option textwidth permet de formater automatiquement le texte lors de la saisie.
Le formatage n'est pas maintenu automatiquement lors de l'édition: une modification en début de ligne peut faire dépasser le texte à la fin. Et les lignes trop courtes ne sont pas jointes automatiquement.
Si insérer automatiquement les retours à la ligne est pratique lors de la saisie initiale du texte, c'est vite problématique lors des éditions: en effet, les retours à la ligne ne sont pas ajustés dynamiquement. Ce qui ruine rapidement la mise en forme dès que l'on change la longueur d'une ligne de texte.
La solution est dans la commande gq. Celle-ci reformate le texte en joignant les lignes trop courtes et en rajoutant des retours à la ligne pour honorer textwidth. Pour citer encore l'aide en ligne:
sh$ vim -c ':help gq" *gq* gq{motion} Format the lines that {motion} moves over. Formatting is done with one of three methods: 1. If 'formatexpr' is not empty the expression is evaluated. This can differ for each buffer. 2. If 'formatprg' is not empty an external program is used. 3. Otherwise formatting is done internally. In the third case the 'textwidth' option controls the length of each formatted line (see below). If the 'textwidth' option is 0, the formatted line length is the screen width (with a maximum width of 79). The 'formatoptions' option controls the type of formatting |fo-table|. The cursor is left on the first non-blank of the last formatted line. NOTE: The "Q" command formerly performed this function. If you still want to use "Q" for formatting, use this mapping: >
Comme vous pouvez le constater, gq attend un déplacement (motion) pour déterminer l'étendu du texte à reformater. Pour reformater le texte entre la position actuelle du curseur et la fin du document (G), vous utiliserez la commande:
gqG
Pour reformater l'intégralité d'un document vous devrez d'abord atteindre la première ligne (1G):
1GgqG
Pour reformater le paragraphe actuel, vous devrez d'abord vous positionner à son début ({), puis reformater jusqu'à la fin du paragraphe (}):
{gq}
Dans ce dernier cas, il est aussi possible d'utiliser l'opérateur de sélection de paragraphe (ap) ce qui produira sensiblement le même résultat que précédemment en formatant le paragraphe courant:
gqap
Ce ne sont là que quelques exemples. L'aide en ligne de vim contient un descriptif complet de toutes les commandes de déplacement:
sh$ vim -c ":help motion.txt" *motion.txt* For Vim version 7.1. Last change: 2006 Dec 07 VIM REFERENCE MANUAL by Bram Moolenaar Cursor motions *cursor-motions* *navigation* These commands move the cursor position. If the new position is off of the screen, the screen is scrolled to show the cursor (see also 'scrolljump' and 'scrolloff' options). 1. Motions and operators |operator| 2. Left-right motions |left-right-motions| 3. Up-down motions |up-down-motions| 4. Word motions |word-motions| 5. Text object motions |object-motions| 6. Text object selection |object-select| 7. Marks |mark-motions| 8. Jumps |jump-motions| 9. Various motions |various-motions| ...