Estoy tratando de arreglar el resaltado de sintaxis para python; mis colores son diferentes de los de las capturas de pantalla de cómo "debería" verse en diferentes esquemas de colores vim. Y puede ver la diferencia al comparar .rb (que se muestra correctamente) con .py, que parece estar apagado:
Por ejemplo, observe cómo self
no está resaltado. (Esto está en base16, pero la comparación sería similar en otros esquemas de color). En general, parece que el resaltado de sintaxis del objeto es incorrecto.
Algunas cosas que he probado:
- Mirando los scripts de sintaxis vim cargas; la única diferencia entre .py y .rb en el siguiente ejemplo es que, por supuesto, ruby obtiene sangría / ruby.vim y sintaxis / ruby.vim mientras que python obtiene sangría / python.vim y sintaxis / python.vim. Estos son los archivos que vienen con homebrew vim.
- Cargando los mismos archivos en macvim en lugar de terminal (iterm2) vim; mismo problema, los archivos se ven exactamente igual que en la imagen.
- Agregar el nuevo archivo python.vim . No resuelve el problema, incluso si se usa como
.vim/after
script.
Cualquier sugerencia es bienvenida; He estado golpeando mi cabeza durante esto, y no puedo entender por qué el resaltado no funciona como se esperaba.
syntax-highlighting
filetype-python
sl8r000
fuente
fuente
Respuestas:
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 posteriordef
debería aumentar el nivel de sangría" y "la línea posteriorend
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 sidoFunction
o algo más. ¿Por qué esType
? 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 hacerself = "foo"
odef self()
. Estos son errores. Pero este no es el caso en Python. Es solo otra variable sin propiedades especiales. Haciendo:es realmente "traducido" por Python a:
El nombre
self
es solo una convención (casi universalmente adoptado) pero puedes nombrarlo como quieras;def x(this):
odef x(xxx):
son igualmente válidos También puedes usar el nombreself
donde quieras;self = 'foo'
ydef self():
están perfectamente bienYo diría que
self
no debería resaltarse, ya que no es una palabra clave especial ni una variable predefinida (comostr
). No hay rastro de la palabraself
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:El
pythonBuiltin
nombre del grupo ya está definido en el archivo de sintaxis predeterminado y está vinculado alFunction
grupo resaltado. Para usar un nuevo grupo destacado, use algo como: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:Utilice el
after-directory
,~/.vim/after/syntax/python.vim
:Ambos métodos son efectivamente iguales. Use lo que prefiera.
fuente