¿Cómo puedo solucionar el resaltado de sintaxis "faltante" para palabras clave de Python como "self"?


12

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:

ingrese la descripción de la imagen aquí

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:

  1. 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.
  2. Cargando los mismos archivos en macvim en lugar de terminal (iterm2) vim; mismo problema, los archivos se ven exactamente igual que en la imagen.
  3. 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.


Tenga en cuenta que Python no tiene símbolos, y le recomendaría encarecidamente que use la sintaxis de Python 3 para el nuevo código.
Martin Tournoij

Respuestas:


12

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:

  1. Use un FileTypeautocmd:

    augroup python
        autocmd!
        autocmd FileType python
                    \   syn keyword pythonSelf self
                    \ | highlight def link pythonSelf Special
    augroup end
    
  2. 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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.