2014-12-29 20 views
5

Desidero che i caratteri non ascii mostrino come discusso here, ma l'evidenziazione della sintassi scompare quando il carattere non ascii si trova all'interno di un commento. Esaminando un po 'il problema, ho scoperto nel manuale di vim che un articolo che inizia prima ha una priorità più alta (3 ° elemento). Da help :syn-priority:Impostare l'elemento su priorità più alta di evidenziazione su vim

Quando diversi elementi di sintassi possono corrispondere, vengono utilizzate queste regole:

  1. Quando più corrispondere o regione voci iniziano nella stessa posizione, la voce definita ultima ha la priorità.

  2. Una parola chiave ha la priorità su elementi di corrispondenza e area.

  3. Un elemento che inizia in una posizione precedente ha la priorità su elementi che iniziano in posizioni successive.

Attualmente sto usando questo:

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

ho cercato di dare maggiore priorità alla voce partita nonascii utilizzando le opzioni nextgroup:

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

e contains opzioni:

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

ma non ha funzionato. Ho anche provato a disabilitare temporaneamente i commenti (highlight clear Comment) senza l'effetto desiderato (i miei commenti sono stati pubblicati senza evidenziazione, ma i non divulgati hanno continuato a essere evidenziati). Cosa mi manca?

risposta

5

Sì, il gruppo di sintassi personalizzato non corrisponde perché esiste già una corrispondenza per i commenti (o altri elementi di sintassi dello script di sintassi esistente).

La soluzione è comunicare a Vim che il gruppo nonascii è tali gruppi, in modo che Vim tenti di corrispondere a tale indirizzo (e non solo al livello superiore non colorato). La cosa più complicata è che il gruppo di sintassi per i commenti dipende dallo script di sintassi e quindi dal tipo di file (quelli con nomi sono abbastanza regolari). Nell'esempio seguente, ho utilizzato i nomi per i file C e Vimscript:

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

Qualcuno ha già risposto alla domanda. Tuttavia, per gli altri che hanno ancora problemi, ecco un'altra soluzione per evidenziare i caratteri non ascii nei commenti (o qualsiasi gruppo nella questione). Non è il massimo, ma è una soluzione temporanea.

Si può provare:

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

E 'molto vicino l'implementazione originale e altra soluzione. È anche possibile rimuovere contained, ma, dalla documentazione, potrebbe esserci un potenziale problema di recidiva (come ho capito). Per visualizzare altri modelli definiti, la sezione syn-contains potrebbe contenerlo.

:help syn-containedin 
:help syn-contains 
Problemi correlati