
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 .vimrc
arquivo
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 :match
comando substitui o padrão do anterior; eles não são cumulativos! Por causa disso, existem :2match
variantes :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
~/.vimrc
funciona apenas na primeira janela; ou seja,:split
criará 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 .vimrc
para 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()