2014-12-29 17 views
5

Chcę, aby znaki non-ascii były wyświetlane zgodnie z omówieniem here, ale podświetlenie składni znika, gdy znak non-ascii znajduje się wewnątrz komentarza. Trochę badając problem, w podręczniku vim odkryłem, że element, który zaczyna się wcześniej, ma wyższy priorytet (trzecia pozycja). Od help :syn-priority:Ustaw element na wyższy priorytet priorytetowy na vim

Kiedy kilka elementów składni może dopasować stosowane są te zasady:

  1. Gdy wiele meczów lub regionu elementy zaczynają się w tym samym położeniu, element zdefiniowany ostatni ma pierwszeństwo.

  2. Słowo kluczowe ma wyższy priorytet niż elementy dopasowania i regionu.

  3. Pozycja, która rozpoczyna się na wcześniejszej pozycji ma pierwszeństwo przed przedmiotami, które zaczynają się w późniejszych pozycjach.

Obecnie używam to:

syntax match nonascii "[^\x00-\x7F]" 
highlight nonascii cterm=underline ctermfg=red ctermbg=none term=underline 

Próbowałem dać wyższy priorytet nonascii elementu meczu używając opcji nextgroup:

syntax match nonascii "[^\x00-\x7F]" nextgroup=Comment 

i contains opcje:

syntax match nonascii "[^\x00-\x7F]" contains=ALL 

ale to nie zadziałało. Próbowałem też tymczasowo wyłączyć komentarze (highlight clear Comment) bez pożądanego efektu (moje komentarze pojawiły się bez zaznaczenia, ale nonascii kontynuowali nieumieszczone). Czego mi brakuje?

Odpowiedz

5

Tak, twoja niestandardowa grupa składniowa nie jest dopasowana, ponieważ istnieje już dopasowanie do komentarzy (lub innych elementów składni z istniejącego skryptu składniowego).

Rozwiązaniem jest przekazanie Vimowi, że twoja grupa nonascii to , aby Vim próbował się tam dopasować (i to nie tylko na bezbarwnym najwyższym poziomie). Co komplikuje to, że grupa składniowa komentarzy zależy od skryptu składniowego, a zatem od typu pliku (te nazwy są dość regularne). W poniższym przykładzie użyłem nazwy dla plików C i Vimscript:

:syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment 
1

ktoś już odpowiedział na pytanie. Jednak w przypadku innych, które wciąż mają problemy, oto inne rozwiązanie, które pozwala wyróżnić znaki spoza zestawu ascii w komentarzach (lub dowolnej grupie w tej sprawie). To nie jest najlepsze, ale jest to tymczasowa poprawka.

One mogą spróbować:

:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained | 
      \ highlight nonascii ctermfg=yellow guifg=yellow 

To bardzo zbliżone do pierwotnego wdrożenia i inne rozwiązania. Możesz nawet usunąć contained, ale z dokumentacji może wynikać potencjalny problem z powtarzaniem się (jak rozumiem). Aby wyświetlić inne zdefiniowane wzory, sekcja zawiera je.

:help syn-containedin 
:help syn-contains 
Powiązane problemy