Je voudrais avoir un affichage agréable et doux de l'espace blanc arrière dans mon terminal vim. Cela me permettrait de les supprimer avant de fermer le fichier.
Je suis conscient que cette question est assez populaire et j'ai déjà trouvé des dizaines de réponses sur SO. Malheureusement je n'en ai pas encore trouvé de satisfaisant ...
Je vais donc essayer de résumer les informations recueillies et les solutions que j'ai trouvées.
Solution 1: surlignez manuellement les espaces de fin
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()
Avantages:
- Facile à utiliser
- Vite
- Compatible avec
cursorline
Les inconvénients:
- La couleur choisie n'est pas compatible avec d'autres schémas de couleurs car la couleur est définie manuellement sur
red
- Les gros blocs de fond rouges ne sont pas très esthétiques
Solution 2: utilisation de la fonction de liste
set list
set listchars+=trail:◦
Avantages:
- Facile à utiliser
- Vite
Les inconvénients:
- Problème si
:set cursorline
activé - La couleur dédiée à
list/trail
n'est pas configurable. Doit être le même que les autres listchars
Solution 3: utilisation de la fonction de masquage
syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2
set concealcursor=nv
highlight Conceal ctermfg=red
Avantages:
- Plus jolie que la première solution
Les inconvénients:
- L'arrière-plan n'est pas le même que l'arrière-plan du curseur
- Peut interférer avec d'autres règles de dissimulation
- Couleur choisie pas toujours compatible avec la palette de couleurs
- Non compatible avec l'ancienne version de Vim
Ma question
Laquelle des solutions énumérées est la plus appropriée en termes de performances et de compatibilité et comment puis-je obtenir tous les avantages et aucun des inconvénients?
En d'autres termes, je voudrais trouver une solution où:
- La couleur de fin de surbrillance correspond à la couleur choisie
- Cette couleur est clairement visible mais pas trop agressive pour les yeux
- Compatible avec
cursorline
(arrière-plan et premier plan) `- Compatible avec d'autres plugins qui peuvent utiliser dissimuler
- Le caractère de fin peut être défini sur n'importe quel caractère Unicode
:hi link ExtraWhitespace CursorLine
. Tu vois:help hi-link
.Réponses:
En termes de performances, rien de tout cela ne devrait faire la différence. Vim est principalement embourbé par des modèles de syntaxe complexes; le modèle ici est assez simple.
Pour que la couleur de surbrillance corresponde au schéma de couleurs choisi, utilisez
:hi link
un groupe existant; généralement, ce seraitError
. Bien sûr, tout cela n'a d'importance que si vous changez souvent de couleurs (assez différentes); sinon, utiliser des couleurs appropriées directement (comme dans votre solution 1) serait bien aussi.J'irais pour cela, mais en utilisant
matchadd()
au lieu de:match
; cela laisse ce dernier pour un surlignage personnalisé. Aussi,clearmatches()
c'est trop grossier; il supprime toutes les correspondances et peut donc affecter les plugins. Vous pouvez utiliser / jeter un œil à mon plugin ShowTrailingWhitespace pour une implémentation propre et puissante (qui inclut également des exceptions pour certains types de fichiers). Oui, c'est une solution beaucoup plus importante, mais je n'ai pas encore remarqué d'impact.C'est une fonctionnalité utile en soi, et le garder en permanence a des effets sur le positionnement du curseur sur les caractères Tab, donc je ne le recommanderais pas.
Cela va sûrement interférer avec certaines syntaxes et plugins utilisant la fonctionnalité. Mauvaise idée.
la source
'listchars'
. Pour moi, la mise en évidence est plus que suffisante (surtout avec des couleurs agressives).