Mostrando uma cor de fundo diferente nos 80 caracteres anteriores do Vim


134

Vi preocupações com o layout da coluna do Vim 80 , mas a resposta lá destaca apenas o conteúdo real que ultrapassa a marca de 80 caracteres. Eu quero ter uma janela do Vim com mais de 100 colunas aberta com as 80 colunas mais à esquerda usando o plano de fundo normal e qualquer coisa além disso usando um plano de fundo ligeiramente diferente. O plano de fundo da janela do Vim deve ter uma cor diferente, não apenas o texto que ultrapassa o ponto de 80 caracteres. Isso indicaria o quão perto estou do ponto de 80 caracteres, sem precisar examiná-lo primeiro.

Eu não acho que isso seja possível no momento, mas pensei em perguntar por precaução.

Talvez isso possa ser feito com um plugin?

Exemplo TextMate de destaque da margem direita do Vim desejado

Ao selecionar "Realçar margem direita" nas preferências gerais do TextMate, você pode ver um exemplo do comportamento desejado do Vim.

Exemplo destacado da margem direita do TextMate


Respostas:


223

Se você tiver o Vim> = v7.3, basta adicioná-lo ao seu .vimrcpara destacar 81 e seguintes (então 80 é sua última coluna válida):

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

Se você não vir um ColorColumndestaque , talvez não tenha uma cor de destaque definida. Adicione isto (ajuste de acordo com suas preferências):

highlight ColorColumn ctermbg=235 guibg=#2c2d27

Agora, gosto de destacar as colunas 80 e 120 e assim por diante, por isso tenho marcadores de "aviso" e "perigo" separados. Você pode fazer isso assim:

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

Exemplo

Aqui está uma captura de tela do GVim editando o meu .vimrc.

GVim editando meu arquivo .vimrc

Eu uso a fonte Ubuntu Mono 11 e o esquema de cores molokai . Você pode encontrar minha configuração do vim e todos os meus arquivos de ponto no GitHub.


3
colorcolumn é limitado a 256 definições, por :help colorcolumn... além disso, minha configuração parece estar truncada por algum tempo ao usar sua técnica de junção, embora não seja possível procurar na fonte do vim para descobrir qual é esse tamanho. Além disso, o vim analisa o valor dessa configuração como uma string toda vez que entra em uma janela, inicializa um buffer etc., portanto, essa é uma maneira cara de atingir o resultado desejado.
precisa saber é o seguinte

15
Seus arquivos de ponto estão QUENTES.
obfk

1
Obrigado por postar isso, era exatamente o que eu estava procurando! Apenas mais uma pergunta, existe uma maneira de não definir essas regras para um tipo específico de arquivo (.md)?
David Dias

1
@DavidDias Sure! Você pode fazer algo como autocmd FileType markdown let &colorcolumn=""desmarcá-lo completamente.
Justin Force

1
link atualizado para a configuração do vim
reergymerej

78

Destaque 81 coluna

:set textwidth=80
:set colorcolumn=+1

Você também pode fazer alguns estilos:

:hi ColorColumn guibg=#2d2d2d ctermbg=246

2
Isso também é possível realçar até 256 colunas, mas infelizmente é preciso uma lista de colunas para destacar e não existe uma abreviação para isso, então você teria que fazer algo como :set colorcolumn=+1,+2,+3,+4,+5,+6etcetera, possivelmente até o +256mais amplo você acha que gostaria da sua margem certa. No entanto, isso destacará apenas as linhas existentes no buffer, nem todas as linhas na janela.
Mkomitee 11/08/11

1
@ Tangent Dislexic: Por que não destacar as primeiras 80 colunas?
Brice

1
Eu não tinha pensado nisso. Defina o plano de fundo com a cor que você deseja usar para destacar> 80 colunas e defina a cor da coluna para todas as colunas de 1 a 80 e defina o grupo de destaque para a cor da cor que você deseja que o plano de fundo normal seja.
Mkomitee

2
Uma pergunta, enquanto eu posso definir a cor corretamente, digitando, :hi colorcolumn ...ela não parece funcionar quando a coloco no meu .vimrc. Você sabe como fazer isso?
amigos estão dizendo sobre robbrit

Estou vendo o mesmo problema que o robbrit - Se eu executar o comando de destaque no modo ex, ele ficará bem, mas se eu o tiver no meu arquivo vimrc, ele destruirá o meu
esquema de cores

16

Solução proposta no comentário acima. Destaque primeiro o plano de fundo e depois destaque o ColorColumn preto como uma sobreposição. Defina sua coluna de cores para as linhas de 1 a 80.

hi Normal guibg=#32322f ctermbg=236
hi NonText guibg=#32322f ctermbg=236
hi ColorColumn guibg=#000000 ctermbg=0
let &colorcolumn=join(range(1,80),",")

1
Isso é simples, mas brilhante. Obrigado!
ataque aéreo

8

experimentar:

:/\%>80v./+

marcará +80 caracteres como erro


Tão inteligente em uma pitada. Eu gosto porque se adapta às mudanças de tema. Obrigado.
Benjamin

0

Eu não acho que é possível ter o que você quer, mas eu sigo essa pergunta, já que estou interessado nisso.

Talvez, eu esteja afirmando o óbvio, mas você pode configurar a highligth nas colunas 70 + para obter uma indicação de quão perto você está da coluna 80.


0

Para aqueles que usam o onedark.vim como eu e desejam uma solução publicada por Conner, adicionei essas linhas ao meu arquivo vimrc

let &colorcolumn=join(range(1,80),",")
let g:onedark_color_overrides = {
  \ "black": {"gui": "#2C323C", "cterm": "236", "cterm16": "8"},
  \ "cursor_grey": {"gui": "#282C34", "cterm": "235", "cterm16": "0"}
  \ }

Acabei de trocar os dois valores, peguei no código fonte do onedark

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.