Wyświetl końcowe spacje w vimie


11

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()

Zaznacz końcowe białe spacje

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:◦

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Plusy:

  • Łatwy w użyciu
  • Szybki

Cons:

  • Problem, jeśli :set cursorlinewłączony
  • Koloru dedykowanego dla list/trailnie 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

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

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

Jeśli nie lubisz czerwonego, wybierz inny kolor. Jeśli chcesz, aby kolor był zgodny z różnymi schematami kolorów, połącz z nazwą grupy kolorów zamiast używać określonego koloru, np :hi link ExtraWhitespace CursorLine. Zobaczyć :help hi-link.
— garyjohn

Odpowiedzi:


4

Pod względem wydajności żaden z nich nie powinien mieć znaczenia. Vim najczęściej grzęźnie w skomplikowanych wzorcach składniowych; wzór tutaj jest dość prosty.

Aby kolor podświetlenia był zgodny z wybranym schematem kolorów, użyj :hi linkdo istniejącej grupy; zwykle tak by było Error. Oczywiście, wszystko to ma znaczenie tylko wtedy, gdy często zmieniasz (całkiem różne) kolory; w przeciwnym razie użycie odpowiednich kolorów bezpośrednio (jak w rozwiązaniu 1) również byłoby w porządku.

Rozwiązanie 1: Ręcznie zaznacz końcowe spacje

Poszedłbym na to, ale matchadd()zamiast tego użyłem :match; pozostawia to drugie do niestandardowego wyróżnienia. Ponadto, clearmatches()jest zbyt gruba; usuwa wszystkie dopasowania, a zatem może wpływać na wtyczki. Możesz użyć / spojrzeć na moją wtyczkę ShowTrailingWhitespace, aby uzyskać czystą i wydajną implementację (która obejmuje także wyjątki dla niektórych typów plików). Tak, to znacznie większe rozwiązanie, ale nie zauważyłem jeszcze żadnego wpływu.

Rozwiązanie 2: Korzystanie z funkcji listy

Jest to przydatna funkcja sama w sobie, a jej stałe włączenie ma wpływ na położenie kursora na znakach Tab, więc nie poleciłbym tego.

Rozwiązanie 3: Korzystanie z funkcji ukrywania

Z pewnością wpłynie to na niektóre składnie i wtyczki korzystające z tej funkcji. Kiepski pomysł.


Tak więc z twojej odpowiedzi rozumiem, że istnieje takie rozwiązanie, które pozwala używać niestandardowego znaku Unicode do oznaczania dodatkowych spacji. To pytanie jest rzeczywiście trudniejsze, niż początkowo myślałem.
— nowox

Tak, niestandardowe znaki działają tylko z 'listchars'. Dla mnie podświetlenie jest więcej niż wystarczające (szczególnie w agresywnych kolorach).
— Ingo Karkat
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.