Configurez à quelle colonne `gq` se termine?

9

Par défaut, l'utilisation gqavec une commande de mouvement enveloppe le texte décrit par la commande de mouvement sur 79 colonnes. (Je suis relativement nouveau dans vi/ vimdonc je ne connais pas la terminologie correcte.) Comment puis-je configurer le nombre de colonnes de sorte qu'il encapsule plutôt un nombre différent de colonnes?

Par exemple, supposons que j'ai ce texte:

This is text for illustration.

Je voudrais pouvoir configurer la colonne wrap à 29 pour que si mon curseur est dans la ligne et que je l'exécute, gqipil se transforme en:

This is text for
illustration.

J'utilise gVim sur Ubuntu GNOME 17.04, si cela fait une différence.


EDIT: Je cherche un moyen d'envelopper manuellement certaines sections de texte à la longueur de ligne donnée sans affecter les autres, car il y a des cas où je suis d'accord pour dépasser la limite. Pour développer l'exemple précédent, si mon document ressemble à ceci:

This is text for illustration.

This is some other text for illustration.

Et je cours gqipavec mon curseur dans la première ligne, je voudrais obtenir:

This is text for
illustration.

This is some other text for illustration.

Ensuite, si je commence à taper sur une nouvelle ligne en dessous, j'aimerais que cette ligne ne soit pas affectée de la même manière par la limite.

Mon cas d'utilisation consiste à écrire des documents LaTeX: j'aimerais pouvoir envelopper des paragraphes de prose sur un certain nombre de colonnes à la demande, mais dans certains cas où j'écris de longues équations ou des tableaux, je veux que ces lignes rester plus longtemps que la limite.

jdw1996
la source

Réponses:

6

Vous pouvez le faire en définissant textwidthet en supprimant tde formatoptions.

set textwidth=29
set formatoptions-=t

Vous devez également avoir l' qoption activée dans votre formatoptionspour l'utiliser gq. Cela semble toujours être pour moi, mais vous voudrez peut-être ajouter un set formatoptions+=qpour être du bon côté.

Cela ne devrait pas être un problème avec votre cas d'utilisation actuel, mais l' coption encapsule automatiquement les commentaires, donc si vous ne le souhaitez pas set formatoptions-=c.

Pour plus d'informations, voir:

:help formatoptions " Not much info.
:help fo-table      " All the options in detail.
gib
la source
0

Il existe deux façons de procéder: définir 'textwidth'la largeur de votre texte en caractères ou en colonnes; définissant 'wrapmargin'la largeur de la marge de droite en caractères ou en colonnes. Par exemple, pour encapsuler votre texte sur une largeur de 29 caractères ou colonnes:

set textwidth=29

Voir

:help 'textwidth`
:help 'wrapmargin'
:help 10.7
garyjohn
la source
Merci pour votre réponse, mais ce n'est pas exactement ce que je cherchais. Je souhaite pouvoir envelopper manuellement certaines sections de texte sans en affecter d'autres. Pour moi, ces deux options enveloppent automatiquement le nouveau texte que j'entre. Je mettrai à jour la question pour mieux l'expliquer.
jdw1996
Vim n'a pas de méthode intégrée pour le faire. La gqcommande ne prévoit pas de définir la largeur d'habillage par appel; il suit textwidthet textwidths'applique à l'ensemble du tampon, pas seulement à certaines lignes. Si vous êtes d'accord pour encapsuler manuellement les sections que vous souhaitez encapsuler, vous pouvez écrire une fonction qui: enregistre la valeur actuelle de textwidth; mis textwidthà 29; effectuer gqsur les lignes sélectionnées; restaurer la valeur de textwidth. Attribuez ensuite cette fonction à formatexpr. Alternativement, vous pouvez utiliser un programme externe tel que fmtpour formater les lignes sélectionnées.
garyjohn
OK je vois. Je vais étudier l'écriture d'une telle fonction. Merci!
jdw1996