Come funziona l'evidenziazione della sintassi in breve:
Nella syntax/<filetype>.vim
sintassi le regole sono definite con il :syntax
comando. 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.
:highlight
dice "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
, Special
e 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>.vim
file controlla il rientro automatico. Ad esempio per Ruby dice "la riga dopo def
dovrebbe aumentare il livello di rientro" e "la riga dopo end
dovrebbe 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 Type
gruppo di evidenziazione viene utilizzato per i nomi delle classi. Ma potrebbe anche essere stato Function
o 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 self
ovunque tu voglia; self = 'foo'
e def self():
stanno perfettamente bene.
Direi che self
non dovrebbe essere evidenziato, in quanto non è né una parola chiave speciale, né una variabile predefinita (come str
). Non c'è traccia della parola self
nel file di sintassi, quindi sembra che l'autore abbia ragionato lo stesso :-)
Se si desidera self
evidenziare, è necessario creare una regola di sintassi per esso:
:syn keyword pythonBuiltin self
Il pythonBuiltin
nome del gruppo è già definito nel file di sintassi predefinito e collegato al Function
gruppo 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 FileType
autocmd:
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.