269 votes

commandes de vim pour restructurer/force de texte à 80 colonnes

Je sais qu'il existe des moyens pour régler automatiquement la largeur du texte dans vim à l'aide de set textwidth (comme http://stackoverflow.com/questions/235439/vim-80-column-layout-concerns). Ce que je cherche, c'est quelque chose de similaire = (retrait de la ligne de commande), mais pour l'envelopper de 80. L'exemple d'utilisation: parfois, vous modifiez le texte avec textwidth et après des lignes de jonction ou la suppression/ajout de texte il sort mal emballé.

Idéalement, cette commande pourrait réorganiser complètement les lignes que j'ai sélectionner et couper les longues lignes, tout en ajoutant à court. Un exemple:

ligne longue est longue!
court

Après l'exécution de la commande (en supposant que l'enveloppe a été 13 cols):

longue ligne est
long! court

Si ce n'est pas possible avec une vraie commandes de vim, peut-être il ya un programme de ligne de commande qui fait ce que je peux tuyau de l'entrée?

EDIT: merci michael, après googler cette commande j'ai trouvé cette référence qui a un peu plus d'options: http://www.cs.swarthmore.edu/help/vim/reformatting.html

422voto

Michael Madsen Points 30610

Ensemble textwidth à 80, déplacer vers le début du fichier (peut être fait avec Ctrl-Home ou gg), et le type gqG.

gqG formats le texte à partir de la situation actuelle et à la fin du fichier. Il va rejoindre automatiquement lignes consécutives lorsque cela est possible. Vous pouvez placer une ligne vide entre deux lignes, si vous ne voulez pas de ces deux être réunis.

105voto

Alex Hirzel Points 697

Michael solution est la clé, mais j'ai le plus souvent trouver je veux reformater le reste de la le paragraphe en cours; pour ce problème, utilisez l' gq}.

40voto

JohnGH Points 141

Vous pouvez utiliser gq avec n'importe quel mouvement opérateurs. Par exemple, si vous ne voulez reformater à la fin de la ligne courante (c'est à dire à enrouler la ligne que votre curseur est sur), vous pouvez utiliser gq$

Vous pouvez aussi reformater en sélectionnant le texte en mode visuel (à l'aide de l'option ` - v et le déplacement), puis en tapant gq.

Il y a d'autres options pour forcer les lignes pour envelopper trop.

Si vous voulez vim pour envelopper vos lignes pendant que vous êtes à l'insertion de texte dans au lieu d'avoir à attendre jusqu'à la fin de restructurer le texte, vous trouverez ces options utiles:

:set textwidth=80
:set wrapmargin=2

(Ne pas se perdre en wrap et linebreak, qui ne reformater le texte affiché sur l'écran, et de ne pas modifier le texte dans le tampon)

15voto

Ehtesh Choudhury Points 1395

Si vous êtes à la recherche pour un non-Vim , il y a toujours les commandes UNIX de l'esf et par.

Notes:

  • Je ne peux pas commenter sur l'Unicode, il peut ou peut ne pas se comporter différemment.
  • @nelstrom l'a déjà mentionné à l'aide de par dans son émission.

Voici comment nous pourrions utiliser à la fois pour votre exemple.

$ echo -e 'long line is long!\nshort' > 3033423.txt
$ cat 3033423.txt
long line is long!
short
$ fmt -w 13 3033423.txt
long line is
long!  short
$ par 13gr 3033423.txt
long line is
long! short

À utiliser à partir de l'intérieur de Vim:

:%! fmt -w 13
:%! par 13gr

Vous pouvez également définir :formatprg de la valeur nominale ou de l'esf et de la remplacer gq. Pour plus d'info, appelez - :help formatprg à l'intérieur de Vim.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X