Come funziona l'evidenziazione della sintassi in breve:
Nella syntax/<filetype>.vimsintassi le regole sono definite con il :syntaxcomando. Questo comando definisce, bene, la sintassi. Dice "se il testo corrisponde a questa espressione regolare, è una stringa" e così via. Per fare ciò, assegna un gruppo di evidenziazione . Essa non dice nulla circa i colori in quanto tali.
:highlightdice "evidenzia questo gruppo con questi colori". Questo viene fatto nella combinazione di colori , non nel file di sintassi. Ci sono un sacco di gruppi Evidenziare predefiniti ( String, Function, Speciale così via), che tutte le combinazioni di colori dovrebbero definire.
Tuttavia, non sei assolutamente limitato a questi gruppi predefiniti e puoi creare tutti i gruppi che desideri (ma i file di sintassi predefiniti in genere non lo fanno).
Il indent/<filetype>.vimfile controlla il rientro automatico. Ad esempio per Ruby dice "la riga dopo defdovrebbe aumentare il livello di rientro" e "la riga dopo enddovrebbe diminuire il livello di rientro di un livello". Non fa nulla con l'evidenziazione dei colori o della sintassi.
Perché diversi linguaggi di programmazione vengono evidenziati in modo diverso? In parte a causa dell'estetica personale e delle opinioni di chi l'ha scritto. Ad esempio in Ruby il Typegruppo di evidenziazione viene utilizzato per i nomi delle classi. Ma potrebbe anche essere stato Functiono qualcos'altro. Perché è Type? Probabilmente perché l'autore ha pensato che avesse un aspetto migliore nella sua combinazione di colori.
Ma soprattutto, le lingue hanno semantica e sensibilità diverse. In Ruby, selfè una parola chiave speciale. Non puoi fare self = "foo"o def self(). Questi sono errori. Ma questo non è il caso di Python. È solo un'altra variabile senza proprietà speciali. fare:
x = Object()
x.foo()
è veramente "tradotto" da Python in:
Object.foo(x)
Il nome selfè solo convenzione (adottato quasi universalmente) ma puoi nominarlo come preferisci; def x(this):o def x(xxx):sono ugualmente validi. Puoi anche usare il nome selfovunque tu voglia; self = 'foo'e def self():stanno perfettamente bene.
Direi che selfnon dovrebbe essere evidenziato, in quanto non è né una parola chiave speciale, né una variabile predefinita (come str). Non c'è traccia della parola selfnel file di sintassi, quindi sembra che l'autore abbia ragionato lo stesso :-)
Se si desidera selfevidenziare, è necessario creare una regola di sintassi per esso:
:syn keyword pythonBuiltin self
Il pythonBuiltinnome del gruppo è già definito nel file di sintassi predefinito e collegato al Functiongruppo di evidenziazione. Per utilizzare un nuovo gruppo di evidenziazione, utilizzare qualcosa del tipo:
:syn keyword pythonSelf self
:highlight def link pythonSelf Special
Per apportare queste modifiche non puoi semplicemente inserirle nel tuo file vimrc. Il file di sintassi lo sovrascriverà. Invece dovrai eseguirlo dopo il caricamento del file di sintassi, cosa che puoi fare in due modi:
Usa un FileTypeautocmd:
augroup python
autocmd!
autocmd FileType python
\ syn keyword pythonSelf self
\ | highlight def link pythonSelf Special
augroup end
Utilizzare la after-directory, ~/.vim/after/syntax/python.vim:
syn keyword pythonSelf self
highlight def link pythonSelf Special
Entrambi i metodi sono effettivamente gli stessi. Usa quello che preferisci.