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 selfno 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/afterscript.
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>.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 posteriordefdebería aumentar el nivel de sangría" y "la línea posteriorenddeberí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 sidoFunctiono 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,
selfes 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
selfes 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 nombreselfdonde quieras;self = 'foo'ydef self():están perfectamente bienYo diría que
selfno debería resaltarse, ya que no es una palabra clave especial ni una variable predefinida (comostr). No hay rastro de la palabraselfen 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:El
pythonBuiltinnombre del grupo ya está definido en el archivo de sintaxis predeterminado y está vinculado alFunctiongrupo 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
FileTypeautocmd:Utilice el
after-directory,~/.vim/after/syntax/python.vim:Ambos métodos son efectivamente iguales. Use lo que prefiera.
fuente