Je sais qu'il existe des moyens de définir automatiquement la largeur du texte dans vim à l'aide set textwidth
(comme les problèmes de disposition des colonnes Vim 80 ). Ce que je recherche, c'est quelque chose de similaire à =
(la commande de mise en retrait), mais d'envelopper à 80. Le cas d'utilisation est parfois que vous modifiez du texte avec une largeur de texte et après avoir joint des lignes ou supprimé / ajouté du texte, il sort mal emballé.
Idéalement, cette commande réorganiserait complètement les lignes que je sélectionne et couperait les longues lignes tout en les ajoutant aux courtes. Un exemple:
long line is long!
short
Après avoir exécuté la commande (en supposant que l'habillage était de 13 cols):
long line is
long! short
Si ce n'est pas possible avec une vraie commande vim, peut-être y a-t-il un programme en ligne de commande qui fait cela que je peux diriger l'entrée?
Après avoir cherché, j'ai trouvé cette référence qui a plus d'options: http://www.cs.swarthmore.edu/help/vim/reformatting.html
par
. C'est fantastique!gq
- Gentleman's Quarterly . (Excuses pour l'homme anthropomorphisant, mais les œuvres mnémoniques.)Réponses:
Réglez
textwidth
sur 80 (:set textwidth=80
), déplacez-vous au début du fichier (cela peut être fait avec Ctrl- Homeougg
) et tapezgqG
.gqG
formate le texte à partir de la position actuelle et jusqu'à la fin du fichier. Il rejoindra automatiquement les lignes consécutives lorsque cela sera possible. Vous pouvez placer une ligne vierge entre deux lignes si vous ne souhaitez pas que ces deux soient réunies.la source
V}gq
. De cette façon, vous voyez ce que vous allez formater avant de le formater.q
en soi?set tw=80
au lieu deset textwidth=80
pour gagner du tempsset textwidth=76
vos lignes seront auto-enroulées lors de la frappe. Ma plainte est que cela ne fait rien aux lignes existantes en cours d'édition. MaisV}gq
est extrêmement utile à cet égard.V
passe en mode de sélection visuelle,}
sélectionne le saut de paragraphe suivant etgq
exécute le formateur actuel dessus (ou utilisezgw
pour appeler explicitement le formateur vi). En outre,{
sélectionneront vers le haut. Vous pouvez sélectionner l'ensemble du document et le format avecggVGgq
bien qu'il existe peut-être un moyen plus simple. Enregistrez cela en tant que macro en utilisant@
pour le rendre plus facile. Utilisezvipgq
pour fmt paragraphe actuel.La solution de Michael est la clé, mais je trouve le plus souvent que je veux reformater le reste du paragraphe actuel; pour ce comportement, utilisez
gq}
.la source
Vous pouvez utiliser
gq
avec n'importe quel opérateur de mouvement. Par exemple, si vous souhaitez uniquement reformater jusqu'à la fin de la ligne actuelle (c'est-à-dire pour envelopper la ligne sur laquelle se trouve votre curseur), vous pouvez utilisergq$
Vous pouvez également reformater en sélectionnant du texte en mode visuel (en utilisant `v et en vous déplaçant) puis en tapant gq.
Il existe également d'autres options pour forcer les lignes à boucler.
Si vous souhaitez que vim encapsule vos lignes pendant que vous y insérez du texte au lieu d'avoir à attendre la fin pour restructurer le texte, vous trouverez ces options utiles:
(Ne vous laissez pas distancer par
wrap
etlinebreak
, qui ne reformate que le texte affiché à l'écran, et ne modifie pas le texte dans le tampon)la source
wrapmargin
aide: Lorsque 'textwidth' est différent de zéro, cette option n'est pas utilisée.Grâce à un commentaire de DonaldSmith, j'ai trouvé cela, car l'
textwidth
option n'a pas reformaté ma longue ligne de texte (je convertissais le jeu avec des conversions hexadécimales)::%!fold -w 60
Cela a reformulé tout le dossier (qui était une ligne pour moi) en lignes de longueur 60.
la source
Si vous cherchez une méthode non-Vim , il y a toujours les commandes UNIX fmt et par .
Remarques:
par
dans sa webémission.Voici comment nous utiliserions les deux pour votre exemple.
Pour utiliser de l'intérieur de Vim:
Vous pouvez également définir
:formatprg
par ou fmt et remplacergq
. Pour plus d'informations, appelez à l':help formatprg
intérieur de Vim.la source
J'utilise presque toujours
gq
en mode visuel. Je dis à mes étudiants que cela signifie "Gentlemens 'Quarterly", un magazine pour les gens exigeants.la source