Cómo funciona el resaltado de sintaxis en resumen:
En syntax/<filetype>.vim
la sintaxis las reglas se definen con el :syntax
comando. Este comando define, bueno, la sintaxis. Dice "si el texto coincide con esta expresión regular, es una cadena", y así sucesivamente. Para hacerlo, asigna un grupo destacado . No , no dice nada acerca de los colores como tales.
:highlight
dice "resaltar este grupo con estos colores". Esto se hace en el esquema de color , no en el archivo de sintaxis. Hay un montón de grupos de resalte por defecto ( String
, Function
, Special
, etc.), que todas las combinaciones de colores deben definir.
Sin embargo, de ninguna manera está restringido a estos grupos predeterminados, y puede crear tantos grupos como desee (pero los archivos de sintaxis predeterminados generalmente no lo hacen).
El indent/<filetype>.vim
archivo controla la sangría automática. Por ejemplo, para Ruby dice "la línea posterior def
debería aumentar el nivel de sangría" y "la línea posterior end
debería disminuir el nivel de sangría un nivel". No hace nada con colores o resaltado de sintaxis.
¿Por qué se resaltan diferentes lenguajes de programación diferentes? En parte debido a la estética personal y las opiniones de quien lo escribió. Por ejemplo, en Ruby, el Type
grupo resaltado se usa para los nombres de clase. Pero también podría haber sido Function
o algo más. ¿Por qué es Type
? Probablemente porque el autor pensó que se veía mejor en su esquema de color.
Pero lo más importante, los idiomas tienen una semántica y sensibilidad diferentes. En Ruby, self
es una palabra clave especial. No puedes hacer self = "foo"
o def self()
. Estos son errores. Pero este no es el caso en Python. Es solo otra variable sin propiedades especiales. Haciendo:
x = Object()
x.foo()
es realmente "traducido" por Python a:
Object.foo(x)
El nombre self
es solo una convención (casi universalmente adoptado) pero puedes nombrarlo como quieras; def x(this):
o def x(xxx):
son igualmente válidos También puedes usar el nombre self
donde quieras; self = 'foo'
y def self():
están perfectamente bien
Yo diría que self
no debería resaltarse, ya que no es una palabra clave especial ni una variable predefinida (como str
). No hay rastro de la palabra self
en el archivo de sintaxis, por lo que parece que el autor razonó lo mismo :-)
Si desea self
resaltar, tendrá que crear una regla de sintaxis para ello:
:syn keyword pythonBuiltin self
El pythonBuiltin
nombre del grupo ya está definido en el archivo de sintaxis predeterminado y está vinculado al Function
grupo resaltado. Para usar un nuevo grupo destacado, use algo como:
:syn keyword pythonSelf self
:highlight def link pythonSelf Special
Para hacer estos cambios, no puede simplemente pegarlos en su archivo vimrc. El archivo de sintaxis lo anulará. En su lugar, deberá ejecutarlo después de que se cargue el archivo de sintaxis, lo que puede hacer de dos maneras:
Use un FileType
autocmd:
augroup python
autocmd!
autocmd FileType python
\ syn keyword pythonSelf self
\ | highlight def link pythonSelf Special
augroup end
Utilice el after-directory
, ~/.vim/after/syntax/python.vim
:
syn keyword pythonSelf self
highlight def link pythonSelf Special
Ambos métodos son efectivamente iguales. Use lo que prefiera.