Vim 80 préoccupations relatives à la disposition des colonnes

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

cela a quelques effets secondaires malheureux -- Je ne peux pas set number par crainte de se partager entre les fichiers qui ont des ordres différents de nombres de ligne; c.-à-d. = 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 aussi de nouvelles sessions Vim (g)au lieu de couper les fenêtres verticalement, ce qui me force à utiliser le presse-papiers du gestionnaire de fenêtres -- vsplit s me force à faire set columns chaque fois que j'ouvre ou ferme un volet, donc commencer une nouvelle session est moins embêtant.

comment gérer l'indication de 80 caractères lorsque vous voulez set numbers , fractionnement vertical, etc.?

388
demandé sur Jon Seigel 2008-10-25 02:14:01

14 réponses

j'ai cette installation dans mon .vimrc:

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

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

549
répondu Simon Howard 2010-04-14 11:43:41

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

puisque les versions précédentes ne supportent pas cela, mon .vimrc utilise à la place:

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

Voir aussi de la documentation en ligne sur le colorcolumn option .

739
répondu Jeremy W. Sherman 2014-08-30 04:26:32

plus Court chemin:

match ErrorMsg '\%>80v.\+'
50
répondu Maksim Vi. 2013-01-27 23:48:08

je préfère:

highlight ColorColumn ctermbg=gray
set colorcolumn=80
33
répondu wieczorek1990 2017-08-22 14:17:40

la réponse de Simon Howard est excellente. Mais /\%81v.\+/ ne met pas en évidence les onglets qui dépassent la colonne 81 . Donc j'ai fait un petit ajustement, basé sur les trucs que j'ai trouvé sur vim wiki 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. Acclamations!

25
répondu Z.Zen 2010-07-22 04:31:55

enter image description here

Minimaliste, pas-au-dessus de la démarche. Seul le 79ème caractère des lignes trop longues est mis en évidence. Il surmonte quelques problèmes courants: les travaux sur de nouvelles fenêtres, les mots débordants 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

Note: notez le FileType scala,java cela limite cela aux fichiers source Scala et Java. Vous voudrez probablement personnaliser ceci. Si vous l'omettiez, cela fonctionnerait sur tous les types de fichiers.

13
répondu Dominykas Mostauskis 2014-05-30 18:05:21

une belle façon de marquer juste 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 parler .

12
répondu Shanded 2015-06-08 21:15:26

vous pouvez aussi 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

11
répondu 0x8BADF00D 2015-05-15 17:14:08

les nouvelles versions de vim permettent 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, donc je ne sais pas ce sujet. Le dessin d'une ligne verticale mince est au-delà des capacités d'une application de console cependant. GVim peut autoriser cela (je ne l'utilise pas, donc je ne peux pas le commenter).

5
répondu Matthew Scharley 2008-10-24 23:31:17

j'ai bien peur que vous ayez mis des contraintes sur le jeu de solutions qui, bien, vous laissent avec le jeu nul.

L'utilisation de :set textwidth=80 va corriger tous les problèmes que vous avez mentionnés sauf que vous ne pouvez pas facilement voir la limite de ligne à venir. Si vous :set ruler , vous activerez l'affichage de position x,y sur la barre d'état, que vous pouvez utiliser pour voir dans quelle colonne vous êtes.

à part ça, Je ne sais pas quoi vous dire. C'est une honte de perdre la colonne Nombre, plier colonne et se divise juste parce que vous devez :set columns=80 .

4
répondu Lucas Oman 2008-10-24 22:39:59

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

qui mettra en place deux highlights dans chaque buffer, un pour les caractères dans les 8 colonnes avant quoi que votre &textwidth soit défini, et un pour les caractères 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 (que vous payez sous forme de perte de mise en évidence syntaxique dans ces colonnes).

4
répondu Aristotle Pagaltzis 2008-10-25 05:39:41

Eh bien, en regardant les colonnes d'aide, ce n'est pas vraiment être fait pour jouer avec.

dans console, il est généralement déterminé par le réglage de la console (c'est-à-dire qu'il est détecté automatiquement) ; dans GUI, il détermine (et est déterminé par) la largeur des fenêtres gvim.

donc normalement vous laissez juste 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 voulez dire par " voir et anticiper la ligne de débordement". Si vous voulez que la fin de semaine soit insérée à peu près à la colonne 80, utilisez soit set textwidth ou set wrapmargin ; si vous voulez juste une enveloppe souple (c.-à-d. que la ligne est enveloppée, mais pas de fin de semaine réelle), alors jouez avec set linebreak et set showbreak .

3
répondu Ding-Yi Chen 2010-09-28 03:56:40

celui-ci est hors champ de gauche mais c'est une belle 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
répondu ErichBSchulz 2012-12-29 13:21:05

vous pouvez essayer ceci pour définir la taille de la fenêtre pour permettre 80 caractères de texte réel. Cela ne fonctionne toujours pas avec fentes verticales.

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

cela nécessite vim 7+, 7.3 Pour relativenumber.

1
répondu Mike L 2010-12-13 17:38:26