nvim에 추가 구문 강조 표시 추가; .config / nvim / after / syntax를 가져와 .vim 파일을로드 할 수 없습니다.

Jan 12 2021

구문 강조 표시에 사용중인 플러그인에 구문 강조 표시를 추가하려고합니다 . 추가 구문 파일 fstrings.vim~/.config/nvim/after/syntax폴더에 추가하려고 시도 했지만 nvim이 선택하지 않습니다.

내가 시도한 것 :

  1. ~/.config/nvim/after및 / 또는 ~/.config/nvim/after/syntax내 런타임 경로에 추가 되었는지 확인하십시오 .
  • ~/.config/nvim/after내 경로에 추가됩니다- :set rtp>>로 확인 runtimepath=~...,...,~/.config/nvim/after-그러나 파일이로드 된 것을 볼 수 없습니다 :scriptnames. 파일을로드하려면 어떻게해야합니까?
  1. 파일 위치를 ~/.config/nvim/after대신~/.config/nvim/after/syntax
  • 이것도 작동하지 않습니다.
  1. 파일을 수동으로로드하십시오.
  • 이것은 실제로 수행 놀라 울 정도로 일을. 을 사용하여 파일의 구문을 수동으로 변경할 수 :set syntax=fstrings있지만 플러그인에서 제공 한 원래 구문 강조 표시가 모두 사라지고에서 제공 한 강조 표시 (아래 이미지의 print 문 참조) fstrings.vim만 사용됩니다. 이로 인해 경로가 올바르게 설정되었다고 믿게되지만 nvim은 시작 중에로드하기를 원하지 않거나 사용중인 플러그인으로 인해이를 무시합니다.

/after/덮어 쓰기보다는 이전 설정 후 설정을 적용하는 데 폴더가 사용된다는 것을 알고 있습니다. 나는 이미 여기 와 여기 에서 해결책을 시도했지만 제대로 작동하지 못했습니다. 이것을 디버깅하는 방법에 대한 도움을 주시면 감사하겠습니다.

" ~/.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

답변

1 filbranden Jan 13 2021 at 07:17

구문 규칙은 일반적으로 'filetype'버퍼에 대한 집합에 따라 이름이 지정되며 일반적으로 파일 확장자, 파일 이름 또는 파일 내용을 기반으로 감지되고 일반적으로 자동으로 설정됩니다.

Python에 대한 구문 강조 표시 를 확장 하려면 일반적으로 "python"파일 유형 뒤에 스크립트 이름을 지정해야합니다 .

Vim 이 Python에 대한 구문 규칙 을 로드 할 때 syntax/python.vim또는 이름이 지정된 파일에 대해 로드 됩니다 syntax/python/*.vim(ftplugin 규칙은를 허용 python_*.vim하지만 구문의 경우는 아닙니다.)

따라서 Python 파일 용으로로드되고 Python 용 번들 런타임 규칙이로드 된 후에 파일 ~/.config/nvim/after/syntax/python.vim(또는 ~/.config/nvim/after/syntax/python/fstrings.vim)의 이름을 지정해야합니다 .


또 다른 옵션은 'syntax'점으로 구분 된 여러 유형을 포함 하도록 옵션 을 설정하는 것입니다. 예를 들어 :setlocal syntax=python.fstrings는 먼저로드 syntax/python.vim한 다음 syntax/fstrings.vim. 이것은 다소 일반적이고 여러 개별 언어에 대해 이해할 수있는 구문이있는 경우에 더 유용 할 것입니다 (예 : 주석 내부의 문서 형식에 대한 일부 구문 강조?)이 경우에는 그다지 적용되지 않는 것 같습니다. , 여기서 f- 문자열은 본질적으로 Python 구문입니다. 'syntax'설정과 별도로 설정을 유지하는 'filetype'것도 까다로울 수 있으며, 기본 설정으로 인해 방해받지 않도록 올바른 위치 (너무 일찍 또는 너무 늦지 않음)에 설정해야합니다.


로드되지 않는 스크립트 문제를 해결하는 동안 :scriptnames명령을 사용 하여 *.vim스크립트가 실제로 Vim에 의해 어느 시점에서로드 되었는지 확인할 수 있습니다 . 특정 파일 유형의 파일을 열기 전과 후에이를 반복하여 해당 파일 유형 감지에 의해 트리거되었는지 확인합니다.