Exibir espaços à direita no vim

Exibir espaços à direita no vim

Eu gostaria de ter uma exibição agradável e agradável de espaços em branco 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 um satisfatório...

Por isso tentarei resumir as informações coletadas e as soluções que encontrei.

Solução 1: destacar 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()

Destacar espaços em branco à direita

Prós:

  • Fácil de usar
  • Rápido
  • Compatível comcursorline

Contras:

  • A cor escolhida não é compatível com outros esquemas de cores porque a cor é definida manualmente comored
  • 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:◦

insira a descrição da imagem aqui insira a descrição da imagem aqui

Prós:

  • Fácil de usar
  • Rápido

Contras:

  • Problema se :set cursorlineativado
  • A cor dedicada list/trailnão é configurável. Tem que ser igual aos outros listchars

Solução 3: usando o recurso de ocultação

syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2 
set concealcursor=nv
highlight Conceal ctermfg=red

insira a descrição da imagem aqui insira a descrição da imagem aqui

Prós:

  • Mais bonito que a primeira solução

Contras:

  • O plano de fundo não é igual ao plano de 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 versões mais antigas 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, gostaria de encontrar uma solução onde:

  • A cor final do destaque concorda com o esquema de cores escolhido
  • Esta cor é claramente visível, mas não muito agressiva aos olhos
  • Compatível com cursorline(fundo e primeiro plano)`
  • Compatível com outros plugins que podem usar ocultar
  • O caractere final pode ser definido como qualquer caractere Unicode

Responder1

Em termos de desempenho, nada disso deve fazer diferença. O Vim fica atolado principalmente em padrões de sintaxe complexos; o padrão aqui é bastante simples.

Para fazer com que a cor de destaque esteja de acordo com o esquema de cores escolhido, utilize :hi linkum grupo existente; normalmente, isso seria Error. É claro que tudo isso só importa se você mudar os esquemas de cores (bem diferentes) com frequência; caso contrário, usar cores adequadas diretamente (como na sua solução 1) também seria adequado.

Solução 1: destacar manualmente os espaços finais

Eu aceitaria isso, mas usando matchadd()em vez de :match; isso deixa o último para destaque personalizado. Além disso, clearmatches()é muito grosseiro; ele excluitodoscorresponde e, portanto, pode afetar plug-ins. Você pode usar / dar uma olhada no meuPlug-in ShowTrailingWhitespacepara uma implementação limpa e poderosa (que também inclui exceções para determinados tipos de arquivos). Sim, é uma solução muito maior, mas ainda não notei nenhum impacto.

Solução 2: usando o recurso de lista

Este é um recurso útil por si só, e mantê-lo permanentemente tem efeitos no posicionamento do cursor nos caracteres Tab, então eu não recomendaria isso.

Solução 3: usando o recurso de ocultação

Isso certamente irá interferir em algumas sintaxes e plugins que usam o recurso. Péssima ideia.

informação relacionada