Eu gostaria de ter uma exibição agradável e doce do espaço em branco à direita no meu terminal vim. Isso me permitiria removê-los antes de fechar o arquivo.
Estou ciente de que esta pergunta é bastante popular e já encontrei dezenas de respostas no SO. Infelizmente ainda não encontrei uma satisfatória ...
Então, tentarei resumir as informações coletadas e as soluções que encontrei.
Solução 1: realçar manualmente os espaços finais
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
Prós:
- Fácil de usar
- Rápido
- Compatível com
cursorline
Contras:
- Cor escolhida incompatível com outros esquemas de cores porque a cor é definida manualmente como
red
- Grandes blocos de fundo vermelho não são muito estéticos
Solução 2: usando o recurso de lista
set list
set listchars+=trail:◦
Prós:
- Fácil de usar
- Rápido
Contras:
- Problema se
:set cursorline
ativado - A cor dedicada para
list/trail
não é configurável. Tem que ser o mesmo que os outros listchars
Solução 3: Usando o recurso ocultar
syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2
set concealcursor=nv
highlight Conceal ctermfg=red
Prós:
- Mais bonita que a primeira solução
Contras:
- O fundo não é o mesmo que o fundo da linha do cursor
- Pode interferir com outras regras de ocultação
- A cor escolhida nem sempre é compatível com o esquema de cores
- Não é compatível com a versão mais antiga do Vim
Minha pergunta
Qual das soluções enumeradas é a mais adequada em termos de desempenho e compatibilidade e como posso obter todos os prós e nenhum dos contras?
Em outros termos, eu gostaria de encontrar uma solução em que:
- A cor final de destaque concorda com o esquema de cores escolhido
- Esta cor é claramente visível, mas não muito agressiva para os olhos
- Compatível com
cursorline
(plano de fundo e primeiro plano) `- Compatível com outros plugins que podem usar ocultar
- O caractere final pode ser definido como qualquer caractere Unicode
:hi link ExtraWhitespace CursorLine
,. Veja:help hi-link
.