web-dev-qa-db-fra.com

Vim 80 concerne la disposition des colonnes

J'ai l'impression que la façon dont je fais l'indication 80 colonnes dans Vim est incorrecte: set columns=80. Parfois, j’ai aussi set textwidth mais j’aime bien voir et anticiper le débordement de ligne avec l’alternative set columns.

Cela a des effets secondaires malheureux - je ne peux pas set number de peur de se séparer entre des fichiers contenant des ordres de numéros de ligne différents; c'est-à-dire <100 fichiers de ligne et> = 100 fichiers de ligne nécessiteront deux valeurs set columns différentes en raison de la colonne supplémentaire utilisée pour l'affichage des chiffres supplémentaires. Je commence également de nouvelles sessions (g) Vim au lieu de scinder les fenêtres verticalement, ce qui me force à utiliser le Presse-papiers du gestionnaire de fenêtres - vsplits me force à faire set columns à chaque fois que j'ouvre ou ferme un volet. commencer une nouvelle session est moins compliqué.

Comment gérez-vous l'indication de 80 caractères lorsque vous souhaitez set numbers, scinder verticalement, etc.?

407
cdleary

J'ai ceci mis en place dans mon .vimrc:

highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.\+/

Cela met en évidence l'arrière-plan dans un rouge subtil pour le texte qui dépasse la limite de 80 colonnes (subtile en mode interface graphique, de toute façon - en mode terminal, c'est moins vrai).

572
Simon Howard

A partir de vim 7.3, vous pouvez utiliser set colorcolumn=80 (set cc=80 en abrégé).

Comme les versions antérieures ne le supportent pas, mon .vimrc utilise à la place:

if exists('+colorcolumn')
  set colorcolumn=80
else
  au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
endif

Voir aussi la documentation en ligne sur l'option colorcolumn) .

756
Jeremy W. Sherman

Chemin plus court:

match ErrorMsg '\%>80v.\+'
54
Maksim Vi.

Je préfère:

highlight ColorColumn ctermbg=gray
set colorcolumn=80
45
wieczorek1990

La réponse de Simon Howard est excellente. Mais /\%81v.\+/ ne parvient pas à mettre en évidence les onglets dépassant la colonne 81. J'ai donc fait un petit Tweak, basé sur ce que j'ai trouvé sur wiki VIM et le choix de couleurs de HS ci-dessus:

highlight OverLength ctermbg=darkred ctermfg=white guibg=#FFD9D9
match OverLength /\%>80v.\+/

Et maintenant, VIM mettra en évidence tout ce qui dépasse la colonne 80. A la vôtre!

28
Z.Zen

enter image description here

Approche minimaliste, pas exagérée. Seul le 79ème caractère des lignes trop longues est mis en surbrillance. Il résout quelques problèmes courants: travaux sur les nouvelles fenêtres, les mots en débordement sont mis en évidence correctement.

augroup collumnLimit
  autocmd!
  autocmd BufEnter,WinEnter,FileType scala,Java
        \ highlight CollumnLimit ctermbg=DarkGrey guibg=DarkGrey
  let collumnLimit = 79 " feel free to customize
  let pattern =
        \ '\%<' . (collumnLimit+1) . 'v.\%>' . collumnLimit . 'v'
  autocmd BufEnter,WinEnter,FileType scala,Java
        \ let w:m1=matchadd('CollumnLimit', pattern, -1)
augroup END

Remarque: notez le FileType scala,Java, ce qui le limite aux fichiers source Scala et Java. Vous voudrez probablement personnaliser cela. Si vous deviez l'omettre, cela fonctionnerait sur tous les types de fichiers.

15

Vous pouvez également tracer une ligne pour voir la limite de 80:

let &colorcolumn=join(range(81,999),",")
let &colorcolumn="80,".join(range(400,999),",")

Résultat:

enter image description here

12
0x8BADF00D

Une bonne façon de marquer uniquement le premier caractère sortant des limites spécifiées:

highlight ColorColumn ctermbg=Magenta "set to whatever you like
call matchadd('ColorColumn', '\%81v', 100) "set column nr

De Damian Conway's conversation .

12
Shanded

Les versions les plus récentes de vim autorisent une valeur :set numberwidth=x, qui définit la largeur de l'affichage du numéro de ligne. Je n'utilise pas vraiment le pliage, etc., alors je n'en saurais rien. Tracer une fine ligne verticale dépasse toutefois les capacités d'une application console. GVim peut permettre cela (je ne l'utilise pas, donc je ne peux pas commenter là-bas).

7
Matthew Scharley

Vous pouvez essayer ceci:

au BufWinEnter * if &textwidth > 8
\ | let w:m1=matchadd('MatchParen', printf('\%%<%dv.\%%>%dv', &textwidth+1, &textwidth-8), -1)
\ | let w:m2=matchadd('ErrorMsg', printf('\%%>%dv.\+', &textwidth), -1)
\ | endif

Cela mettra en surbrillance deux surlignages dans chaque mémoire tampon, un pour les caractères des 8 colonnes avant quelle que soit la valeur définie pour votre &textwidth, et un pour les caractères situés au-delà de cette colonne. De cette façon, vous avez une certaine anticipation. Bien sûr, vous pouvez le modifier pour utiliser une largeur différente si vous voulez plus ou moins d'anticipation (ce que vous payez sous la forme d'une perte de surbrillance de la syntaxe dans ces colonnes).

5

Je crains que vous n’ayez imposé des contraintes sur l’ensemble des solutions qui vous laisseraient avec l’ensemble des valeurs nulles.

Utiliser :set textwidth=80 résoudra tous les problèmes que vous avez mentionnés sauf vous ne pouvez pas voir facilement la limite de ligne à venir. Si vous :set ruler, vous activez l'affichage de la position x, y sur la barre d'état, que vous pouvez utiliser pour voir la colonne dans laquelle vous vous trouvez.

A part ça, je ne sais pas quoi vous dire. C'est dommage de perdre la colonne des nombres, de plier la colonne et de se scinder simplement parce que vous devez :set columns=80.

5
Lucas Oman

Eh bien, en regardant dans les colonnes d'aide, ce n'est pas vraiment une chose à faire.

Dans la console, il est généralement déterminé par les paramètres de la console (c’est-à-dire qu’il est détecté automatiquement); dans l'interface graphique, il détermine (et est déterminé par) la largeur des fenêtres gvim.

Donc, normalement, vous laissez simplement les consoles et les gestionnaires de fenêtres faire leur travail en commentant le set columns

Je ne suis pas sûr de ce que vous entendez par "voir et anticiper le débordement de lignes". Si vous souhaitez insérer EOL approximativement dans la colonne 80, utilisez soit set textwidth ou set wrapmargin; si vous voulez juste un retour à la ligne souple (c’est-à-dire que la ligne est renvoyée, mais pas la fin de vie), jouez avec set linebreak et set showbreak.

3
Ding-Yi Chen

celle-ci est en dehors du champ gauche mais c'est une jolie petite carte pour redimensionner votre division actuelle à 80 caractères si vous avez les numéros de ligne sur:

" make window 80 + some for numbers wide  
noremap <Leader>w :let @w=float2nr(log10(line("$")))+82\|:vertical resize <c-r>w<cr> 
2
ErichBSchulz

Vous pouvez essayer ceci pour définir la taille de la fenêtre afin d’autoriser 80 caractères de texte. Cela ne fonctionne toujours pas avec les divisions verticales cependant.

let &co=80 + &foldcolumn + (&number || &relativenumber ? &numberwidth : 0)

Cela nécessite vim 7+, 7.3 pour relativenumber.

1
Mike L