Dove appartengono le regole di evidenziazione personalizzate?


11

Occasionalmente voglio sostituire la sintassi predefinita evidenziando colori e stili con le mie preferenze.

Immagino che il modo più appropriato per farlo sia quello di creare il mio schema di colori. Tuttavia ho un paio di domande.

  1. Se voglio impostare un punto culminante per un gruppo di sintassi specifico in una lingua specifica, questo appartiene al mio schema di colori o sarebbe meglio inserirlo after/syntax/[filetype].vim?

    highlight jsAssignExpIdent cterm=bold gui=bold
    

    Sembra un po 'strano inserire regole oscure specifiche della lingua nel sistema dei colori, poiché verranno caricate in qualsiasi lingua su cui sto lavorando, ma sembra anche peggio inserire regole di evidenziazione nel file di sintassi.

  2. A volte creo nuove regole di sintassi per una lingua specifica, in after/syntax/[filetype].vim. Nel caso in cui altri utenti desiderino utilizzare queste estensioni, sarebbe opportuno fornire lì le regole di evidenziazione predefinite che collegano ai comuni gruppi di evidenziazione predefiniti? Se un altro utente desidera sovrascrivere quel colore di evidenziazione, come dovrebbe farlo?

    ::::: after/syntax/asm.vim :::::
    
    syn match asmHexNumber /\(0x\|\$\)[0-9A-Fa-f]\+/
    highlight default link asmHexNumber Number
    

Risposte:


9

Prima domanda

Le definizioni di evidenziazione appartengono al tuo schema di colori. Il fatto che siano caricati per ogni buffer, indipendentemente dalla loro lingua, non dovrebbe essere affatto un problema.

Se non si desidera modificare il proprio schema di colori, è possibile inserire quelle definizioni di evidenziazione in plugin/myhighlights.vim:

function! MyHighlights()
    highlight ...
    highlight ...
endfunction

augroup MyHighlights
    autocmd!
    autocmd ColorScheme * call MyHighlights()
augroup END

Seconda domanda

Il tuo esempio è esattamente come dovresti fare e come fa ogni script di sintassi. Questo metodo consente allo sviluppatore di plug-in di definire valori predefiniti sani senza forzare colori specifici nella gola dell'utente.


Grazie per la conferma. Ma sono preoccupato se inserisco i highlight link ...comandi in un file di sintassi che sovrascriveranno le impostazioni dallo schema dei colori ogni volta che viene caricato un file con quel tipo di file. Forse dovrei farlo solohighlight link ... dopo aver verificato che non esiste alcuna regola di evidenziazione per quel nome?
joeytwiddle,

Ah, non devo preoccuparmi. I documenti di Vim dicono: Se ci sono già impostazioni di evidenziazione per il {from-group}, il collegamento non viene creato, a meno che "!" viene data. Per un comando ": highlight link" in un file di origine, non viene visualizzato un messaggio di errore. Questo può essere usato per saltare i collegamenti per i gruppi che hanno già impostazioni.
joeytwiddle,

Ma per le persone che modificano i propri schemi cromatici, un file highlight linknel colore può essere sovrascritto successivamente da un highlight linkfile in una sintassi. Per evitare ciò, al posto di un collegamento è possibile utilizzare argomenti reali (ctermbg, guifg, ...).
joeytwiddle,

L'utente dovrebbe avere l'ultima parola su quali colori vengono utilizzati per un determinato gruppo di evidenziazione. A tal fine, non è raro vedere definizioni di evidenziazione specifiche della lingua nei colori. Dovresti usarlo solo highlight link ...nello script della sintassi e lasciare che i tuoi utenti lo sovrascrivano se lo desiderano.
Romainl

La mia preoccupazione era che se gli utenti usano il highlight link ...loro sistema di colori, il file di sintassi potrebbe ripristinarlo in seguito con il suo highlight link .... Vedo ora che buoni file di sintassi evitano questo utilizzando highlight default link .... Probabilmente dovrebbe essere una correzione alla asmHexNumberregola nella mia domanda.
joeytwiddle,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.