web-dev-qa-db-fra.com

Comment puis-je encapsuler du texte dans une certaine longueur dans Vim?

Parlons de mesures relatives. Mon Vim ressemble à:

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc

J'aimerais qu'il soit plus petit:

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc

Comment puis-je l'avoir? Et comment gérer la définition de la longueur d'un tel bloc?

Vous pouvez en fait faire deux choses:

  1. Laissez vim formater (c'est-à-dire changer) votre texte pour avoir des lignes plus courtes, en insérant des sauts de ligne
  2. Laisser les lignes telles quelles, mais afficher les encapsuler

Lequel veux-tu?

L'option 1 serait obtenue en définissant textwidth (par exemple :set textwidth=30 (d'après la réponse de Swaarop)). Vous pouvez ensuite reformater votre texte en le surlignant (en mode visuel) et en tapant gq. (textwidth peut être abrégé en tw, donc :set tw=30.)

L'option 2 peut être basculée en exécutant :set wrap/:set nowrap. Cela bouclera les lignes trop longues pour la fenêtre.

Les deux sont indépendants.

175
sleske

Une fois que vous avez défini la "largeur de texte", vous pouvez sélectionner du texte avec le mode visuel et appuyer sur gq pour bien l'encapsuler (vous pouvez également utiliser Q sur certaines configurations plus anciennes/héritées).

Quelques conseils utiles:

gqq (wrap the current line)
gq} (wrap this 'paragraph', i.e. until the next blank line)
:h gq
60
Vlad Dogaru

L'utilisation de fold (1) est une possibilité:

:%!fold -w5 

Résultat:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc
21
Fritz G. Mehner
:set textwidth=30
14
Swaroop C H

Si vous avez du texte sans espaces que vous souhaitez couper à une certaine longueur, il n'est ni nécessaire d'utiliser fold externe ni d'écrire votre propre formatexpr.

:%s/\(.\{80\}\)/\1\r/g

coupera toutes les lignes à 80 caractères.

8
kthy