Preocupações de layout de coluna Vim 80

Eu sinto que a maneira como eu faço a indicação de 80 colunas no Vim está incorreta: set columns=80 . Às vezes, também set textwidth mas gosto de ver e antecipar o estouro de linha com a alternativa de set columns .

Isso tem alguns efeitos colaterais infelizes – não posso set number por medo de dividir arquivos que tenham ordens diferentes de números de linha; ou seja, = 100 arquivos de linha exigirão dois valores de set columns diferentes por causa da coluna extra usada para o display de dígitos adicionais. Eu também inicio novas sessões (g) Vim ao invés de dividir janelas verticalmente, o que me obriga a usar a área de transferência do gerenciador de janelas – o vsplit me força a fazer set columns toda vez que abro ou fecho um painel aborrecimento.

Como você lida com a indicação de 80 caracteres quando deseja set numbers , dividir verticalmente, etc.?

   

Eu tenho isso configurado no meu .vimrc:

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

Isso destaca o fundo em um vermelho sutil para o texto que ultrapassa o limite de 80 colunas (de qualquer maneira, no modo GUI, no modo terminal, é menor).

A partir do vim 7.3, você pode usar set colorcolumn=80 ( set cc=80 para abreviar).

Como as versões anteriores não suportam isso, meu .vimrc usa:

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

Veja também a documentação online sobre a opção colorcolumn .

Maneira mais curta:

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

Eu prefiro:

 highlight ColorColumn ctermbg=gray set colorcolumn=80 

A resposta de Simon Howard é ótima. Mas /\%81v.\+/ falha ao destacar guias que excedam a coluna 81. Então eu fiz um pequeno ajuste, baseado nas coisas que encontrei na wiki VIM e na escolha de colors do HS acima:

 highlight OverLength ctermbg=darkred ctermfg=white guibg=#FFD9D9 match OverLength /\%>80v.\+/ 

E agora o VIM destacará qualquer coisa que exceda a coluna 80. Cheers!

insira a descrição da imagem aqui

Abordagem minimalista, não-over-the-top. Somente o 79º caractere de linhas que são muito longas é destacado. Ele supera alguns problemas comuns: funciona em novas janelas, palavras transbordando são destacadas corretamente.

 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 

Nota: observe a FileType scala,java isso limita isso aos arquivos de origem Scala e Java. Você provavelmente desejará personalizar isso. Se você omitir, isso funcionaria em todos os tipos de arquivo.

Uma boa maneira de marcar apenas o primeiro caractere saindo dos limites especificados:

 highlight ColorColumn ctermbg=magenta "set to whatever you like call matchadd('ColorColumn', '\%81v', 100) "set column nr 

Da palestra de Damian Conway.

Você também pode desenhar linha para ver 80 limite:

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

Resultado:

insira a descrição da imagem aqui

Versões mais recentes do vim permitem a :set numberwidth=x value, que define a largura da exibição do número da linha. Eu realmente não uso folding etc, então eu não sei sobre isso. Desenhar uma linha vertical fina está além das habilidades de um aplicativo de console. GVim pode permitir isso (eu não uso, então não posso comentar lá).

Você pode tentar isto:

 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 

Isso configurará dois destaques em cada buffer, um para caracteres nas 8 colunas antes de qualquer que seja a sua &textwidth definida e uma para os caracteres além dessa coluna. Dessa forma, você tem alguma antecipação. É claro que você pode ajustá-lo para usar uma largura diferente se quiser mais ou menos antecipação (que você paga na forma de perda de realce de syntax nessas colunas).

Eu tenho medo que você tenha colocado restrições no conjunto de soluções que, bem, deixam você com o conjunto nulo.

Usando :set textwidth=80 irá corrigir todos os problemas que você mencionou, exceto que você não pode ver facilmente o limite de linha chegando. Se você :set ruler , ativará a exibição da posição x, y na barra de status, que pode ser usada para ver em qual coluna você está.

Além disso, não sei o que dizer. É uma pena perder a coluna numérica, dobrar a coluna e dividir só porque você precisa :set columns=80 .

Bem, olhando para as colunas de ajuda, não está sendo feito para se mexer.

No console, geralmente é determinado pela configuração do console (isto é, é detectado automaticamente); na GUI, determina (e é determinado por) a largura das janelas gvim.

Então normalmente você deixa os consoles e gerenciadores de janela fazerem seus trabalhos comentando as set columns

Não tenho certeza do que você quer dizer com “ver e antecipar estouro de linha”. Se você deseja que o EOL seja inserido aproximadamente na coluna 80, use a set textwidth set wrapmargin ou o set wrapmargin ; se você quiser apenas um envoltório suave (ou seja, a linha está enrolada, mas não o EOL real), toque com o set linebreak e set showbreak .

este está fora do campo esquerdo, mas é um pequeno mapa para resize sua divisão atual para 80 caracteres se você tiver os números de linha em:

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

Você pode tentar isso para definir o tamanho da janela para permitir 80 caracteres de texto real. Isso ainda não funciona com divisões verticais.

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

Isso requer o vim 7+, 7.3 para o número relativo.