Vim: Jak automatycznie zsynchronizować niestandardowe reguły podświetlania składni, gdy zmienia się schemat kolorów?

1

Korzystam z VOoM (prawdopodobnie nie muszę dużo wiedzieć na ten temat, aby móc odpowiedzieć na moje pytanie, podam tylko te informacje w kontekście) i udało mi się napisać kilka niestandardowych reguł podświetlania składni dla określonej zawartości .

Po pierwsze, używam modeline, aby powiedzieć vimowi, że określony plik jest konturem VOoM, mam to na dole takich plików:

/* vim: set syntax=myvoom : */

Po drugie, mam plik /home/user/.vim/after/syntax/myvoom.vim , oto fragment z niego:

syn match voomTag "^tags:.*"
hi voomTag ctermfg=White ctermbg=Red guifg=White guibg=Red

W niektórych węzłach konspektu mam linie takie jak:

tags: foo, bar, baz

aby ułatwić wyszukiwanie, powyższa reguła podświetlania składni wyświetla tylko te linie z niestandardowym pierwszym planem / tłem.

Działa to zgodnie z oczekiwaniami w przypadku domyślnych kolorów kolorów ( : kolory kolorów w vimie zwracają wartość „domyślne”).

Kiedy chcę wypróbować niestandardowy schemat kolorów ( na przykład mustang ) i zmienić go, wykonując : colorscheme mustang , wyróżnienie składni dla moich linii znaczników jest utracone.

Chciałbym zrozumieć, dlaczego tak się dzieje.

Chciałbym również nauczyć się, jak automatycznie synchronizować te niestandardowe reguły składniowe (które są ogólne, a nie specyficzne dla określonego schematu kolorów) po zmianie schematu kolorów. Czy muszę to jakoś jawnie sprawdzić w pliku myvoom.vim? Jak szukanie, który schemat kolorów jest aktywny i ma niestandardowe reguły podświetlania składni dla różnych schematów kolorów, czy jest lepsze podejście?

Anonimowy Czyhacz
źródło

Odpowiedzi:

3

Powodem tego jest polecenie :highlight clear(patrz :help :highlight), które jest zwykle jednym z pierwszych poleceń wykonywanych przez colorscheme. To polecenie resetuje wszystkie podświetlenia, usuwając w ten sposób efekt :highlightpolecenia niestandardowego .

Aby to naprawić, musisz użyć jednego z :autocmd(zobacz help :autocmd) zdarzeń ColorScheme(patrz :help ColorScheme), aby wykonać polecenie po załadowaniu nowego schematu kolorów. Po zmianach myvoom.vimpowinieneś wyglądać tak:

augroup VoomTagHighlight
  autocmd! ColorScheme *
         \ syn match voomTag "^tags:.*" |
         \ hi voomTag ctermfg=White ctermbg=Red guifg=White guibg=Red
augroup END

Zobacz również pomóc na :augroupco :help :augroup.

Jeśli chcesz mieć różne podświetlenie w zależności od bieżącego schematu kolorów, użyj :highlight linkpolecenia (patrz :help :highlight-link) zamiast określania własnych kolorów. Na przykład połączenie go z Errorpodświetloną grupą wygląda następująco:

augroup VoomTagHighlight
  autocmd! ColorScheme *
         \ syn match voomTag "^tags:.*" |
         \ hi! link voomTag Error
augroup END
xaizek
źródło