web-dev-qa-db-fra.com

Rendre VIM afficher une ligne au bord de la touche TEXTWIDTH

La plupart des éditeurs de texte et IDes que j'utilise ces jours-ci ont une fonctionnalité où ils peuvent afficher une ligne à une certaine longueur de caractère dans la mémoire tampon de texte. C'est utile lorsque vous souhaitez garder des lignes dans un fichier sous une certaine longueur.

Y a-t-il un moyen d'obtenir Vim de le faire, de préférence à l'aide de la valeur déjà définie textwidth? Les lignes s'enrarteront automatiquement à ce stade, mais j'aimerais vraiment pouvoir voir où il se trouve aussi.

Au cas où il importe, j'utilise principalement GVIM sur Windows, mais j'aimerais que la solution fonctionne à travers les versions VIM.

26
Herms

pour (g) Vim, utilisez ce qui suit:

set colorcolumn=80

ou quelle que soit la largeur que vous souhaitez. Travaille dans Vim & Gvim. J'ai le mien dans un si, il est donc conditionné sur le type de fichiers que je modifie.

Vous pouvez également utiliser A + X/-X sur la position de base de la colonne +/- de & textwidth.

set textwidth=80
set colorcolumn=-2

serait efficace la barre de couleur à la position de caractère 78. Bien sûr, vous pouvez ou non définir TextWidth vous-même, il peut donc être 0 (par défaut). J'utilise le formulaire de position absolue.

Vous pouvez également modifier la couleur utilisée si vous le souhaitez:

highlight ColorColumn ctermbg=green guibg=orange

(Je ne recommande pas ces couleurs cependant)

Cette option a été ajoutée dans (g) VIM 7.3.

43
lornix

Il y a un extrait à code Google Vous pouvez essayer:

augroup vimrc_autocmds
au!
    autocmd BufRead * highlight OverLength ctermbg=red ctermfg=white guibg=#592929 
    autocmd BufRead * match OverLength /\%81v.*/
augroup END
3
mcandre

Par A Stackoverflow Réponse :

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

Ajustez-vous à votre goût.

2
jtimberman

J'aime Lornix 'réponse beaucoup, mais je ne veux pas mettre en surbrillance la colonne tout le temps , seulement quand au moins Une ligne dépasse la limite de longueur:

showing column when lines too long

Voici comment je le fais pour mes fichiers Haskell:

augroup HaskellCommands
autocmd!
  " When a Haskell file is read or the text changes in normal or insert mode,
  " draw a column marking the maximum line length if a line exceeds this length
  autocmd BufRead,TextChanged,TextChangedI *.hs call ShowColumnIfLineTooLong(80)
augroup END

" Color the column marking the lengthLimit when the longest line in the file
" exceeds the lengthLimit
function! ShowColumnIfLineTooLong(lengthLimit)
  " See https://stackoverflow.com/questions/2075276/longest-line-in-vim#2982789
  let maxLineLength = max(map(getline(1,'$'), 'len(v:val)'))

  if maxLineLength > a:lengthLimit
    highlight ColorColumn ctermbg=red guibg=red
    " Draw the vertical line at the first letter that exceeds the limit
    execute "set colorcolumn=" . (a:lengthLimit + 1)
  else
    set colorcolumn=""
  endif
endfunction
1
Matthias Braun

Cela a souvent été discuté sur #vim et dans certains forums. En ce qui concerne les choses maintenant, ce n'est pas possible. La solution mentionnée est donc votre seule option, AFAIK.

La chose est que Vim peut faire n'importe quoi avec des endroits où il y a des personnages (ils sont des lettres, des chiffres ou simplement des espaces bleus simples). Mais il ne peut pas peindre un arrière-plan d'une couleur différente (comme vous le souhaitez), s'il n'y a rien là-bas. Et avant de taper quelque chose, il n'y a rien, donc il ne peut donc pas dessiner une ligne/marge.

0
Rook