Cómo funciona el resaltado de sintaxis en resumen:
En syntax/<filetype>.vimla sintaxis las reglas se definen con el :syntaxcomando. 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.
:highlightdice "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>.vimarchivo controla la sangría automática. Por ejemplo, para Ruby dice "la línea posterior defdebería aumentar el nivel de sangría" y "la línea posterior enddeberí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 Typegrupo resaltado se usa para los nombres de clase. Pero también podría haber sido Functiono 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, selfes 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 selfes 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 selfdonde quieras; self = 'foo'y def self():están perfectamente bien
Yo diría que selfno debería resaltarse, ya que no es una palabra clave especial ni una variable predefinida (como str). No hay rastro de la palabra selfen el archivo de sintaxis, por lo que parece que el autor razonó lo mismo :-)
Si desea selfresaltar, tendrá que crear una regla de sintaxis para ello:
:syn keyword pythonBuiltin self
El pythonBuiltinnombre del grupo ya está definido en el archivo de sintaxis predeterminado y está vinculado al Functiongrupo 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 FileTypeautocmd:
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.