Como posso configurar uma régua em uma coluna específica?

50

Ao codificar em idiomas diferentes, costumo restringir minhas linhas a um comprimento específico (geralmente 79 ou 80 caracteres).

Eu já vi isso em outros editores através do uso de uma régua (linha sólida exibida na coluna) ou alterando a cor do texto para indicar que ele foi revisado.

Como o Vim pode indicar quando estou aproximando ou ultrapassando 79 caracteres em uma única linha?

Kevin Brown
fonte

Respostas:

64

Você pode exibir uma régua em uma linha específica usando a opção :set colorcolumn( :set ccabreviada), disponível apenas no Vim 7.3 ou posterior.

set colorcolumn=80

Isso definirá a cor de fundo dessa coluna para vermelho, fornecendo uma régua visual para trabalhar.

Imagem da coluna de cores padrão definida como 80

Se você quiser usar uma cor diferente de vermelho (o que realmente se destaca), altere a cor configurando o highlightpara ColorColumn.

highlight ColorColumn ctermbg=0 guibg=lightgrey

Cor personalizada para a coluna

Você pode definir a cor para as versões terminais do Vim usando o ctermargumento e as versões da GUI do Vim usando o guibgargumento O 0é o valor do código de escape ASCII para preto, que fica cinza quando iluminado (por padrão). O valor lightgreyé usado para versões da GUI do Vim, como gVim, para alterar a cor do plano de fundo para um cinza claro.

Kevin Brown
fonte
10
Você pode até ter várias colunas de cores separadas por vírgula!
200_success
4
Combine isso com join & range, e você poderá ter várias colunas coloridas com muito pouco código. Meu .vimrc possui:execute "set colorcolumn=" . join(range(81,335), ',')
Cody Poll
19

Como um adendo à resposta de Kevin, você pode ter várias colunas coloridas. Quando codifico, às vezes tenho um limite "flexível" em 80 colunas e um limite "rígido" em 120 colunas. Então, eu quero uma linha em 80 e, em seguida, todas as colunas após 120 sejam coloridas.

Eu faço isso com

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

Obviamente, isso pode ser facilmente modificado para outras preferências.

davidlowryduda
fonte
14

O Vim 7.3 traz a colorcolumnopção, conforme detalhado muito bem em outras respostas.

No entanto, se você não tiver a versão 7.3 por qualquer motivo, ainda poderá obter uma indicação visual de que está excedendo uma contagem de colunas específica usando a matchfuncionalidade do vim (consulte :help matchpara obter detalhes).

Essencialmente, os comandos match permitem criar realces persistentes para o texto que corresponde a uma determinada expressão regular. :match ColorColumn "\%80v."destacará o texto na coluna 80 com o grupo "ColorColumn". É claro que você pode substituir qualquer grupo de destaque e qualquer valor da coluna. Se você deseja uma indicação visual forte, a expressão "\%>79v.\+"destacará a coluna 80 e além.

( \%80vsignifica "correspondência na coluna virtual 80" e \%>79vsignifica " após a coluna virtual 79; consulte :help /\%cpara saber mais.)

Essa abordagem será destacada apenas quando houver caracteres reais presentes nas colunas especificadas, no entanto, o que a torna visualmente menos consistente que colorcolumn.


fonte
4
Pessoalmente, acho melhor a abordagem menos consistente de matches, pois destaca apenas as linhas em que estou excedendo o limite de 80 colunas, em vez de mostrar uma (para mim) uma grande linha vermelha intrusiva à direita da tela. Daí em meu vimrc para Python eu uso call matchadd('ColorColumn', '\(\%80v\|\%100v\)')(80 e 100 sendo os comprimentos sugeridas em PEP 8)
jalanb