Estoy luchando con el aprendizaje de expresiones regulares vim (tampoco conozco muy bien otra expresión regular), por lo que el problema principal es definir expresiones regulares que coincidan
some_function_call(simple_value, keyword=value)
palabra clave en este ejemplo.
Por lo tanto, debe coincidir con una palabra si está dentro de parens y tiene el mismo signo después.
El siguiente problema es cómo definir archivos de sintaxis en vim. Agradecería ayuda con eso, pero no debería ser tan difícil de aprender, así que probablemente pueda hacerlo por mi cuenta.
EDITAR en función de la respuesta He hecho mi propio script de sintaxis para python. Siéntase libre de probarlo. ingrese la descripción del enlace aquí
syntax-highlighting
regular-expression
filetype-python
usuario1685095
fuente
fuente
Respuestas:
Con estas configuraciones:
Yo obtengo:
Aquí:
contains
opción me permite anidar llamadas de función.\i*
) seguidos de=
, pero no==
, para que las pruebas de igualdad no coincidan.Al usar regiones, puedo anidar las coincidencias tanto como lo necesito, lo que habría sido muy complicado (¿imposible?) Si hubiera elegido solo
match
con expresiones regulares.Creo que las expresiones regulares utilizadas para hacer coincidir la llamada a la función y la palabra clave se pueden refinar, pero teniendo en cuenta lo que es válido en Python 3 , esa no es una tarea que esté dispuesto a asumir.
Opcionalmente, creo que puede usar esto para resaltar llamadas a funciones, usando un
matchgroup
:fuente
pythonBuiltin
grupo de sintaxis de forma predeterminadasyntax/python.vim
. Sin embargo, no distingue entre las funciones y variables incorporadas (True
,False
yNone
también están enpythonBuiltin
). Probablemente podría copiar las definiciones para su uso.query(...).***filter***()
filtro Me gusta se resalta mientras no tiene nada que ver con las funciones de filtro incorporado.syntax.vim
convierte en palabras clave. Ver github.com/vim/vim/blob/master/runtime/syntax/python.vim#L184syntax/python.vim
archivos adicionales (solo el predeterminado, y no veo el comportamiento que usted hace: i.stack.imgur.com/LgF6F.png , y estoy de acuerdo con la definición de la palabra clave: ese es el ajuste más cercano, y yo no piense que las palabras clave coinciden en casos comononkeyword.keyword
. En cuanto a las variables, tenga en cuenta que estas incorporadas son variables, son variables que contienen objetos de función y se pueden asignar como cualquier otra variable. Nada le impide hacersorted = filter
y luego usarsorted
comofilter
.Aquí es donde puedes comenzar:
Descomponiendo:
Esto necesita mejoras, pero le brinda una visión general de cómo puede hacerlo.
fuente
Además de la respuesta @ Nobe4, puede hacer lo siguiente:
~/.vim/after/syntax/python.vim
Ponga la línea de tesis en el archivo:
Esto creará un archivo de sintaxis que agregará una coincidencia de sintaxis para sus argumentos seguido de a
=
y establecerá el estilo a usar. Este tema:h mysyntaxfile-add
debería ser interesante para ti.También utilicé una expresión regular diferente a la otra respuesta, aquí está el detalle (no sé cuál funciona mejor, así que probablemente tengas que intentarlo):
fuente
Descubrí que la respuesta de @ Wolfie captura el desenvolvimiento de una tupla como palabra clave y también tuvo problemas para capturar argumentos de palabras clave con saltos de línea.
Inspirado por su expresión regular, se me ocurrió lo siguiente para poner en mi
python.vim
archivo de sintaxis. (Tenga en cuenta que originalmente estoy usando elpython.vim
archivo de sintaxis de sheerun / vim-polyglot )Y el desglose de expresiones regulares es muy similar a la respuesta de @ Wolfie :
Tenga en cuenta que esto no va a colorear un argumento de palabra clave escrita como:
key = value
. Lo cual considero algo bueno, ya que va en contra de la recomendación oficial de espacios en blanco PEP-8 para argumentos de palabras clave .fuente
La respuesta aceptada al momento de escribir se rompió al resaltar las cadenas dentro de las listas de argumentos de función para mí (por qué alquimia no lo sé), así que aquí hay una versión con suerte más segura, basada en la de Statox .
ctermfg
es para terminal de consola,guifg
es para gui. Por supuesto, eres libre de cambiar los colores a lo que te parezca elegante. Aquí hay una lista útil .Como siempre, es mejor poner esto dentro
~/.vim/after/syntax/python.vim
Para un desglose de expresiones regulares, aquí tienes:
La comprobación final detiene el resaltado de los condicionales para colorear. Puede eliminarlo si lo desea.
fuente