it-swarm-pt.tech

Faça com que o Vim exiba uma linha na borda da largura de texto definida

A maioria dos editores de texto e IDEs que uso atualmente têm um recurso em que podem exibir uma linha com um determinado comprimento de caractere no buffer de texto. É útil quando você deseja manter as linhas em um arquivo com um determinado comprimento.

Existe alguma maneira de fazer com que o Vim faça isso, de preferência usando o valor textwidth já definido? As linhas serão quebradas automaticamente nesse ponto, mas eu realmente gostaria de poder ver onde elas estão.

Caso seja importante, estou usando principalmente o gVim no Windows, mas adoraria se a solução funcionasse em todas as versões do Vim.

26
Herms

para (g) vim, use o seguinte:

set colorcolumn=80

ou qualquer largura que você desejar. Funciona em vim e gvim. Eu tenho o meu dentro de um IF, então é condicional com base no tipo de arquivo que edito.

Você também pode usar um + x/-x para basear a posição da coluna +/- de & largura do texto.

set textwidth=80
set colorcolumn=-2

seria eficaz desenhar a barra colorida na posição 78 do char. Claro, você pode ou não definir a largura do texto, então pode ser 0 (padrão). Eu uso o formulário de posição absoluta.

Você também pode alterar a cor usada se desejar:

highlight ColorColumn ctermbg=green guibg=orange

(Eu não recomendo ESSAS cores embora)

Esta opção foi adicionada em (g) vim 7.3.

43
lornix

Há um snippet em Google Code você pode tentar:

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

Por resposta StackOverflow :

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

Ajuste de acordo com seu gosto.

2
jtimberman

Eu gosto muito lornix 'answer , mas não quero destacar a coluna o tempo todo , apenas quando pelo menos uma linha excede o limite de comprimento:

showing column when lines too long

Veja como faço isso para meus arquivos 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

Isso foi frequentemente discutido no #vim e em alguns fóruns. Até onde as coisas estão agora, não é possível. Portanto, a solução mencionada é sua única opção, afaik.

O fato é que o vim pode fazer qualquer coisa com lugares onde há caracteres (sendo letras, números ou apenas espaços em branco). Mas não pode pintar um fundo com uma cor diferente (como você gostaria), se não houver nada lá. E antes de você digitar algo, não há nada lá, então não pode desenhar uma linha/margem.

0
Rook