Vim 80 problèmes de disposition de la colonne

J’ai l’impression que la manière dont je fais l’indication de 80 colonnes dans Vim est incorrecte: set columns=80 . Parfois, je set textwidth également set textwidth mais j’aime pouvoir voir et anticiper le débordement de ligne avec l’alternative de set columns .

Cela a des effets secondaires regrettables – je ne peux pas set number par crainte de fractionnement entre des fichiers ayant des ordres de numéros de lignes différents; C’est-à-dire que = 100 fichiers de ligne nécessiteront deux valeurs de set columns différentes set columns raison de la colonne supplémentaire utilisée pour l’affichage des chiffres supplémentaires. Je commence aussi de nouvelles sessions (g) Vim au lieu de séparer les fenêtres verticalement, ce qui me force à utiliser le presse-papiers du gestionnaire de fenêtres – vsplit me force à set columns chaque fois que j’ouvre ou ouvre un volet. tracas.

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

    J’ai cette configuration dans mon fichier .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 GUI, de toute façon – en mode terminal, c’est moins).

    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 prennent pas en charge, 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 .

    Manière plus courte:

     match ErrorMsg '\%>80v.\+' 

    Je préfère:

     highlight ColorColumn ctermbg=gray set colorcolumn=80 

    La réponse de Simon Howard est géniale. Mais /\%81v.\+/ ne parvient pas à mettre en évidence les tabs qui dépassent la colonne 81. Donc j’ai fait un petit tweak, basé sur ce que j’ai trouvé sur le wiki de VIM et sur 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. Bravo!

    entrer la description de l'image ici

    Approche minimaliste, pas sur-le-top. Seul le 79ème caractère des lignes trop longues est mis en évidence. Il résout quelques problèmes courants: fonctionne 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 

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

    Une belle manière de ne marquer que 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 l’ entretien de Damian Conway.

    Vous pouvez également dessiner une ligne pour voir 80 limite:

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

    Résultat:

    entrer la description de l'image ici

    Les nouvelles versions 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, donc je ne le saurais pas. Tracer une ligne verticale mince dépasse toutefois les capacités d’une application console. GVim peut autoriser cela (je ne l’utilise pas, donc je ne peux pas commenter).

    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 évidence deux surlignages dans chaque tampon, un pour les caractères dans les 8 colonnes avant que vos &textwidth soient définis, 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 souhaitez plus ou moins d’anticipation (que vous payez sous la forme de perte de la coloration syntaxique dans ces colonnes).

    Je crains que vous ayez mis des contraintes sur l’ensemble de solutions qui, bien, vous laisse avec l’ensemble nul.

    Utiliser :set textwidth=80 corrigera 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 activez l’affichage de la position x, y dans la barre d’état, que vous pouvez utiliser pour voir la colonne dans laquelle vous vous trouvez.

    En dehors de cela, je ne sais pas quoi vous dire. C’est dommage de perdre la colonne des nombres, la colonne de pliage et la division juste parce que vous devez :set columns=80 .

    Eh bien, en regardant les colonnes d’aide, il n’est pas vraiment difficile de jouer avec.

    Dans la console, il est généralement déterminé par le paramètre de la console (c.-à-d. 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 les set columns

    Je ne suis pas sûr de ce que vous entendez par “voir et anticiper le dépassement de ligne”. Si vous voulez que EOL soit inséré grossièrement dans la colonne 80, utilisez set textwidth ou set wrapmargin ; Si vous voulez simplement un emballage souple (c’est-à-dire que la ligne est enveloppée, mais pas la finalité réelle), jouez avec set linebreak et set showbreak .

    celui-ci est hors champ de gauche mais c’est une jolie petite carte pour redimensionner votre split actuel à 80 caractères si vous avez les numéros de ligne sur:

     " make window 80 + some for numbers wide noremap w :let @w=float2nr(log10(line("$")))+82\|:vertical resize w 

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

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

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