Destaque espaços em branco extras e coluna de comprimento fixo no VIM

Destaque espaços em branco extras e coluna de comprimento fixo no VIM

Quero destacar espaços em branco extras e colunas de comprimento fixo (por exemplo, 80 caracteres em uma linha) usando VIM

Eu criei duas regras vimrc no meu .vimrcarquivo

highlight ExtraWhitespacea ctermbg=darkred guibg=#382424
match ExtraWhitespacea /\s\+$/
highlight OverLength ctermbg=green ctermfg=white guibg=#592929
match OverLength /\%81v.\+/

Agora, o problema é que essas regras funcionam exatamente como eu quero, se aplicadas separadamente, mas não funcionarão juntas.

Estou faltando alguma coisa aqui? Como faço para depurar isso?

Responder1

O problema é que cada :matchcomando substitui o padrão do anterior; eles não são cumulativos! Por causa disso, existem :2matchvariantes :3match. Use um deles:

highlight ExtraWhitespace ctermbg=darkred guibg=#382424
match ExtraWhitespace /\s\+$/
highlight OverLength ctermbg=red guibg=#525252
2match OverLength /\%81v.\+/

Variantes adicionais podem ser criadas com a matchadd()função Vimscript.

Notas

  • Desde o Vim 7.3, existe uma opção integrada 'colorcolumn'que permite o destaque de coluna(s).
  • Sua configuração ~/.vimrcfunciona apenas na primeira janela; ou seja, :splitcriará uma janela que não possui esses destaques. Você pode corrigir isso via autocmds (ou usando a 'colorcolumn'opção).
  • Existem soluções mais robustas e elaboradas para destacar espaços em branco à direita, por exemplo, meuPlug-in ShowTrailingWhitespace. (A página do plugin contém links para plugins alternativos.)

Responder2

Pode ser que o seu esquema de cores tenha substituído sua configuração. Você pode adicionar essas linhas no final .vimrcpara evitar a substituição ou apenas adicionar estas linhas ao seu .vimrc:

" Highlight trailing white spaces
highlight ExtraWhitespace ctermbg=darkred guibg=#382424
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

" Highlight long lines
highlight OverLength ctermbg=green ctermfg=white guibg=#592929
match OverLength /\%81v.\+/
autocmd BufWinEnter * match OverLength /\%81v.\+/
autocmd InsertEnter * match OverLength /\%81v.\+/
autocmd InsertLeave * match OverLength /\%81v.\+/
autocmd BufWinLeave * call clearmatches()

informação relacionada