Chciałbym mieć ładny i słodki pokaz końcowych białych znaków w moim terminalowym vimie. Pozwoliłoby mi to je usunąć przed zamknięciem pliku.
Wiem, że to pytanie jest dość popularne i już znalazłem dziesiątki odpowiedzi na SO. Niestety nie znalazłem jeszcze satysfakcjonującego ...
Spróbuję więc podsumować zebrane informacje i znalezione rozwiązania.
Rozwiązanie 1: Ręcznie zaznacz końcowe spacje
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()
Plusy:
- Łatwy w użyciu
- Szybki
- Kompatybilny z
cursorline
Cons:
- Wybrany kolor nie jest zgodny z innymi schematami kolorów, ponieważ kolor jest ustawiany ręcznie na
red
- Duże czerwone bloki tła nie są zbyt estetyczne
Rozwiązanie 2: Korzystanie z funkcji listy
set list
set listchars+=trail:◦
Plusy:
- Łatwy w użyciu
- Szybki
Cons:
- Problem, jeśli
:set cursorline
włączony - Koloru dedykowanego dla
list/trail
nie można konfigurować. Musi być taki sam jak inne listy
Rozwiązanie 3: Korzystanie z funkcji ukrywania
syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2
set concealcursor=nv
highlight Conceal ctermfg=red
Plusy:
- Ładniejsze niż pierwsze rozwiązanie
Cons:
- Tło nie jest takie samo jak tło kursora
- Może kolidować z innymi zasadami ukrywania
- Wybrany kolor nie zawsze jest zgodny ze schematem kolorów
- Nie jest kompatybilny ze starszą wersją Vima
Moje pytanie
Które z wymienionych rozwiązań jest najbardziej odpowiednie pod względem wydajności i kompatybilności oraz w jaki sposób mogę uzyskać wszystkie zalety i wady?
Innymi słowy, chciałbym znaleźć rozwiązanie, w którym:
- Końcowy kolor podświetlenia jest zgodny z wybranym schematem kolorów
- Ten kolor jest wyraźnie widoczny, ale nie jest zbyt agresywny dla oczu
- Kompatybilny z
cursorline
(tło i pierwszy plan) `- Kompatybilny z innymi wtyczkami, które mogą używać funkcji ukrywania
- Znak końcowy można ustawić na dowolny znak Unicode
:hi link ExtraWhitespace CursorLine
. Zobaczyć:help hi-link
.