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構文です。1つとは'syntax'別の設定を維持する'filetype'ことも難しい場合があります。デフォルト設定で混乱しないように、適切な場所に設定する必要があります(早すぎたり遅すぎたりしないでください)。


スクリプトがロードされないというこのような問題のトラブルシューティング中に、:scriptnamesコマンドを使用して、*.vimある時点でスクリプトがVimによって実際にロードされたかどうかを確認できます。目的の特定のファイルタイプのファイルを開く前後にそれを繰り返して、そのファイルタイプの検出によってトリガーされたことを確認します。