Adición de resaltado de sintaxis adicional a nvim; no se puede obtener la sintaxis .config / nvim / after / para cargar el archivo .vim

Jan 12 2021

Estoy tratando de agregar resaltado de sintaxis adicional a un complemento que estoy usando para resaltado de sintaxis. Intenté agregar el archivo de sintaxis adicional fstrings.vima la ~/.config/nvim/after/syntaxcarpeta, pero mi nvim no lo recoge.

Cosas que he probado:

  1. Verifique si ~/.config/nvim/aftery / o ~/.config/nvim/after/syntaxse agrega a mi ruta de tiempo de ejecución.
  • Solo ~/.config/nvim/afterse agrega a mi ruta, marcada con :set rtp>> runtimepath=~...,...,~/.config/nvim/after, sin embargo, no veo el archivo cargado :scriptnames. ¿Cómo puedo cargar el archivo?
  1. Cambie la ubicación del archivo a en ~/.config/nvim/afterlugar de~/.config/nvim/after/syntax
  • Esto tampoco funciona.
  1. Cargue manualmente el archivo.
  • En realidad, esto hace el trabajo es sorprendente. Puedo cambiar manualmente la sintaxis del archivo usando :set syntax=fstrings, sin embargo, todo el resaltado de sintaxis original provisto por el complemento desaparece, y solo fstrings.vimse usa el resaltado provisto (vea la declaración de impresión en la imagen a continuación) . Esto me lleva a creer que la ruta está configurada correctamente, sin embargo, nvim no quiere cargarla durante el inicio y / o la ignora debido al complemento que se está utilizando.

Sé que la /after/carpeta se usa para aplicar configuraciones después de configuraciones anteriores, en lugar de sobrescribir. Ya probé la solución aquí y aquí, pero no he podido hacer que funcione. Se agradecería cualquier ayuda sobre cómo depurar esto.

" ~/.config/nvim/after/syntax/fstrings.vim

syn match pythonEscape +{{+ contained containedin=pythonfString,pythonfDocstring
syn match pythonEscape +}}+ contained containedin=pythonfString,pythonfDocstring

syn region pythonfString matchgroup=pythonQuotes
      \ start=+[fF]\@1<=\z(['"]\)+ end="\z1"
      \ contains=@Spell,pythonEscape,pythonInterpolation
syn region pythonfDocstring matchgroup=pythonQuotes
      \ start=+[fF]\@1<=\z('''\|"""\)+ end="\z1" keepend
      \ contains=@Spell,pythonEscape,pythonSpaceError,pythonInterpolation,pythonDoctest

syn region pythonInterpolation contained
      \ matchgroup=SpecialChar
      \ start=+{{\@!+ end=+}}\@!+ skip=+{{+ keepend
      \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue,pythonDoctest

syn match pythonStringModifier /:\(.[<^=>]\)\?[-+ ]\?#\?0\?[0-9]*[_,]\?\(\.[0-9]*\)\?[bcdeEfFgGnosxX%]\?/ contained containedin=pythonInterpolation
syn match pythonStringModifier /![sra]/ contained containedin=pythonInterpolation

hi link pythonfString String
hi link pythonfDocstring String
hi link pythonStringModifier PreProc

Respuestas

1 filbranden Jan 13 2021 at 07:17

Las reglas de sintaxis normalmente reciben el nombre del 'filetype'conjunto para el búfer, que a su vez se detecta normalmente (según la extensión del archivo, el nombre del archivo o el contenido del archivo) y generalmente se configura automáticamente.

Si desea extender el resaltado de sintaxis para Python, normalmente debe nombrar su secuencia de comandos después del tipo de "python"archivo.

Cuando Vim carga reglas de sintaxis para Python, lo hará para archivos con nombre syntax/python.vimo syntax/python/*.vim(las reglas de ftplugin también lo permiten python_*.vim, pero resulta que ese no es el caso de la sintaxis).

Por lo tanto, debe nombrar su archivo ~/.config/nvim/after/syntax/python.vim(o ~/.config/nvim/after/syntax/python/fstrings.vim) para que se cargue para los archivos de Python y después de que se carguen las reglas de tiempo de ejecución incluidas para Python.


Otra opción es configurar la 'syntax'opción para incluir varios tipos, separados por un punto. Por ejemplo, :setlocal syntax=python.fstringsprimero se cargará syntax/python.vimy luego syntax/fstrings.vim. Esto sería más útil si tuvieras una parte de la sintaxis que es algo genérica y puede tener sentido para varios idiomas separados (por ejemplo, ¿algún resaltado de sintaxis en un formato de documentación dentro de los comentarios?) No parece ser muy aplicable en este caso. , donde las cadenas f son esencialmente una sintaxis de Python. Mantener una 'syntax'configuración separada de la anterior 'filetype'también puede ser complicado, debe establecerse en la ubicación correcta (ni demasiado temprano ni demasiado tarde) para evitar que la configuración predeterminada lo golpee.


Mientras soluciona un problema de este tipo de un script suyo que no se carga, puede usar el :scriptnamescomando para verificar si *.vimVim realmente cargó su script en algún momento. Repita eso antes y después de abrir un archivo del tipo de archivo específico que busca para confirmar que fue activado por esa detección de tipo de archivo.