web-dev-qa-db-fra.com

Habillage souple à 80 caractères dans Vim dans une fenêtre de largeur arbitraire

Je veux utiliser la fonctionnalité soft wrap de Vim (:set wrap) pour envelopper du code à 80 caractères, quelle que soit la largeur réelle de ma fenêtre.

Je n'ai pas encore trouvé le moyen de le faire - tout en douceur semble être lié à la largeur de la fenêtre

  • textwidth et wrapmargin sont tous les deux destinés à un habillage rigide (ils insèrent des caractères de nouvelle ligne dans le fichier)
  • fractionnement vertical en plusieurs fenêtres et utilisation de :vertical resize 80 (éventuellement avec :set breakat= pour autoriser les pauses sur n'importe quel caractère) sur l'une de ces œuvres (même si c'est un peu hackish), mais elle s'interrompt avec :set number car les numéros de ligne occupent un nombre variable de colonnes (en fonction de la longueur du fichier) et font partie des 80.

Y a-t-il un moyen de faire cela dans vim? Cela ne semble pas prometteur, selon d'autres sources .

Pour le moment, mon approximation consiste simplement à utiliser /^.\{80}\zs.\+ comme recherche par défaut, de sorte qu'elle soit au moins en surbrillance. J'ai pensé à ajouter un élément :syntax pour cet élément, mais cet élément ne fonctionnait pas lorsqu'il chevauchait d'autres éléments de syntaxe. J'ai donc abandonné cette idée.

112
rampion

Vous pourriez 

  • définir une largeur minimale importante pour la colonne de numéros de ligne via :set numberwidth=6 et 
  • alors vous pourriez redimensionner votre fenêtre avec :set columns=86 (ou avec la souris) à la taille appropriée. 

Si vous modifiez un fichier contenant un million de lignes, vous rencontrerez peut-être des problèmes, mais cela est peu probable. Vous gaspillez ainsi 6 colonnes d’écran immobilier. Donc, il y a encore toutes sortes de problèmes.

Vous pouvez mettre en évidence au-delà de la 80e colonne en utilisant :match comme il est dit ici et ici .

Au-delà de cela, je ne vois aucun moyen de le faire. On dirait que ce serait une fonctionnalité intéressante de Nice.

34
Brian Carper

Je n'ai pas de solution au problème, mais en ce qui concerne le marquage d'une colonne, à partir de Vim 7.3 (publié le 2010-08-15), :set colorcolumn=80 surlignera la colonne 80. La couleur dépend de votre fichier de syntaxe.

Voir La disposition des colonnes de Vim 80 concerne , :h colorcolumn .

16
ftvs

Essaye ça:

set columns=80
autocmd VimResized * if (&columns > 80) | set columns=80 | endif
set wrap
set linebreak
set showbreak=+++

Vous pouvez supprimer la if (&columns > 80) | si toujours voulez 80 colonnes.

13
eborisch

Avez-vous essayé 'linebreak'?

        *'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
  'linebreak' 'lbr' boolean (default off)
        local to window
        {not in Vi}
        {not available when compiled without the  |+linebreak|
        feature}
If on Vim will wrap long lines at a character in 'breakat' rather
than at the last character that fits on the screen.  Unlike
'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
it only affects the way the file is displayed, not its contents.  The
value of 'showbreak' is used to put in front of wrapped lines.
This option is not used when the 'wrap' option is off or 'list' is on.
Note that <Tab> characters after an <EOL> are mostly not displayed
with the right amount of white space.
1
TK.

Il n'y a pas de bonne façon de le faire. Nous pouvons pirater un setlocal softwrap de fortune avec autocmd si nous modifions @eborisch answer. Si nous redimensionnons chaque fois que nous entrons dans un tampon et que nous redimensionnons à une longueur particulière lorsque la variable locale softwrap est définie, nous obtenons le comportement souhaité. 

Supposons que nous voulions retourner à 80 colonnes, nous pouvons écrire ce qui suit dans .vimrc.

augroup softwrap
    autocmd VimResized * if (exists('b:softwrap') && &columns > 80) | set columns=80 | endif
    autocmd BufEnter * set columns=999
augroup END

Pour activer le mode pour un tampon particulier, utilisez les commandes suivantes: 

let b:softwrap=1
set columns=80
0
durum