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

25

A maioria dos editores de texto e IDEs que eu uso atualmente tem um recurso onde eles podem exibir uma linha em um determinado comprimento de caracteres no buffer de texto. É útil quando você deseja manter linhas em um arquivo com um determinado tamanho.

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

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

Herms
fonte

Respostas:

38

para (g) vim, use o seguinte:

set colorcolumn=80

ou qualquer largura que você desejar. Funciona em ambos os vim & amp; gvim. Eu tenho o meu dentro de um IF, por isso é condicional com base em qual tipo de arquivos eu edito.

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

set textwidth=80
set colorcolumn=-2

seria eficaz desenhar a barra colorida na posição de caracteres 78. Claro, você pode ou não definir a largura de texto, por isso, 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.

lornix
fonte
Em que versão do Vim isso é suportado? Não está funcionando para mim no gvim 7.2.
Herms
Eu estou correndo 7.3. Acabei de puxar o código fonte e olhei, este comando foi introduzido em 7.3.
lornix
Funciona para mim no Ubuntu 12.04 com o vim 7.3. gvim 7.3 para janelas está disponível desde pelo menos outubro de 2010. @Herms você pode fazer isso a resposta?
poindexter
Seria bom se isso funcionasse ao usar várias janelas lado a lado. Meu monitor é amplo o suficiente para mostrar várias janelas seguidas, cada uma delas & gt; 80 caracteres, mas colorColumn só funciona na primeira janela (mais à esquerda).
Eno
3

Há um trecho em Google Code podes tentar:

augroup vimrc_autocmds
au!
    autocmd BufRead * highlight OverLength ctermbg=red ctermfg=white guibg=#592929 
    autocmd BufRead * match OverLength /\%81v.*/
augroup END
mcandre
fonte
Hmm, esse tópico sugere que o gvim do windows já suporta isso, mas não consigo descobrir como ligá-lo.
Herms
Há algum código para adicionar ao seu arquivo vimrc mais abaixo no segmento.
EBGreen
Parece que apenas muda o fundo para personagens que vão além dessa linha. Eu prefiro ter um guia sempre visível como outros editores têm.
Herms
Devido à natureza do gui, não tenho certeza de que isso seja possível no momento.
EBGreen
Isso não se adapta à largura de texto como solicitado na pergunta.
Steven Roose
2

Por um Resposta do StackOverflow :

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

Ajuste para se adequar ao seu gosto.

jtimberman
fonte
Hm, não bastante o que estou procurando (exibe apenas quando os caracteres passam da linha), mas é melhor que nada.
Herms
Isso não se adapta à largura de texto como solicitado na pergunta.
Steven Roose
1

Eu gosto lornix 'responder muito, mas eu não quero destacar a coluna o tempo todo , somente quando pelo menos uma linha exceder o limite de comprimento:

showing column when lines too long

Aqui está como eu 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
Matthias Braun
fonte
0

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

A coisa é, o vim pode fazer qualquer coisa com lugares onde haja personagens (sejam letras, números ou apenas espaços em branco). Mas não pode pintar um fundo em uma cor diferente (como você gostaria), se não houver nada lá. E antes de digitar algo, não há nada lá, por isso não é possível desenhar uma linha / margem.

Rook
fonte