Dans VIM, comment diviser une ligne vraiment longue en plusieurs lignes?

Disons que je dispose d’une très longue ligne dans l’éditeur VIM (environ 300 caractères). Comment pourrais-je diviser en plusieurs lignes pour que les limites de mots se brisent grossièrement en 80 caractères?

Exemple:

This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line 

à

 This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a ... 

Vim le fait très facilement (séparer les lignes aux limites des mots).

 gq{motion} % format the line that {motion} moves over {Visual}gq % format the visually selected area gqq % format the current line ... 

Je vous suggère de vérifier :help gq et :help gw .

Si vous définissez également textwidth ( tw ), vous obtiendrez un saut de ligne automatique lorsque dépassé lors de la saisie. Il est également utilisé dans gq , mais si gq désactivé sur la taille de la fenêtre ou 79 en fonction de ce qui vient en premier.

 :set tw=80 

En définissant les options de format pour inclure la largeur du texte, vim se rompt automatiquement au réglage tw.

 :set fo+=t 

Commencez par configurer votre vim pour qu’il comprenne que vous voulez 80 caractères:

 :set tw=80 

alors, hilight la ligne:

 V 

et faire le reformater:

 gq 

Ce n’est pas vraiment lié à VIM, mais vous pouvez utiliser le programme fmt comme dans

 $ fmt myfile 

Si vous êtes sur * nix vous avez probablement un fold disponible.

Sélectionnez la région que vous voulez utiliser en v , vous pouvez alors casser des espaces de largeur 80 en utilisant:

!fold --spaces --width=80

C’est essentiellement la même chose que l’utilisation de gq .

Cependant, si vous voulez juste casser au caractère 80 et ne pas être limité aux espaces blancs, vous pouvez utiliser:

!fold --width=80

Si vous le souhaitez avec une seule touche, définissez simplement un mappage – j’ai utilisé

vmap !fold --width=80

Je devais reformater un fichier entier plutôt qu’une ligne. Comme Wernsey le fait remarquer, j’aurais pu utiliser «fmt», mais la séquence suivante dans vim a également fait l’affaire (en empruntant les différentes réponses ici):

  :setl tw=80 fo=t 1GVGgq 

Pour séparer les longues lignes du document complet sans supprimer les sauts de ligne existants, utilisez:

 :set formatoptions+=w :set tw=80 gggqG 

Pour les lignes de texte unies, mettez en surbrillance la zone en utilisant v en mode normal, puis appuyez sur

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

Cela appenda une nouvelle ligne à la fin de chaque 80ème caractère.

 :s/ replaces within the current select \v uses regular expressions (.{80}) selects 80 characters & placed them into group one \1\r replaces group one with group one and a newline 

Comme rapide et méchant, essayez peut-être la carte suivante:

 map q 080lwbels 

qui dit:

  • lancer une 0ème position de ligne,
  • passer au 80ème caractère à droite,
  • aller au début du mot suivant,
  • revenir au mot précédent,
  • aller à la fin du mot courant,
  • aller à droite et
  • substituer un CR à ce caractère.

Ensuite, si vous appuyez sur q et CR, la ligne sera divisée en morceaux sur la limite du mot.