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
.Respostas:
Em termos de desempenho, nada disso deve fazer diferença. O Vim fica atolado em padrões complexos de sintaxe; o padrão aqui é bastante simples.
Para fazer com que a cor de destaque esteja de acordo com o esquema de cores escolhido, use
:hi link
para um grupo existente; Normalmente, isso seriaError
. Obviamente, nada disso importa apenas se você alternar frequentemente os esquemas de cores (bastante diferentes); caso contrário, usar cores adequadas diretamente (como na solução 1) também seria bom.Eu iria para isso, mas usando em
matchadd()
vez de:match
; isso deixa o último para realce personalizado. Além disso,clearmatches()
é muito grosseiro; ele exclui todas as correspondências e, portanto, pode afetar os plugins. Você pode usar / dar uma olhada no meu plug-in ShowTrailingWhitespace para uma implementação limpa e poderosa (que também inclui exceções para certos tipos de arquivos). Sim, é uma solução muito maior, mas ainda não notei nenhum impacto.Esse é um recurso útil por si só, e mantê-lo permanentemente afeta o posicionamento do cursor nos caracteres da guia, portanto, eu não recomendaria isso.
Isso certamente interferirá em algumas sintaxes e plugins usando o recurso. Péssima ideia.
fonte
'listchars'
. Para mim, o destaque é mais do que suficiente (especialmente com cores agressivas).