Nvim の :help ページは、生成されており、ソースから tree-sitter-vimdoc パーサーを用いて作成されています。
tree-sitter ライブラリを統合しています: https://tree-sitter.github.io/tree-sitter/parser ランタイムディレクトリで検索するライブラリです。parser/{lang}.* として検索されます。同じ言語の複数のパーサーが見つかった場合、最初のパーサーが使用されます。(注: これは通常、「ユーザー設定 > プラグイン > バンドル」の優先順位を意味します。)vim.treesitter.language.add('python', { path = "/path/to/python.so" })svg または xslt のバッファに xml treesitter パーサーを使用するには、次のようにします。vim.treesitter.language.register('xml', { 'svg', 'xslt' })ENABLE_WASMTIME でビルドされている場合、wasm パーサーもロードできますvim.treesitter.language.add('python', { path = "/path/to/python.wasm" })query は 1 つ以上のパターンで構成されます。pattern は構文木内のノードタイプに対して定義されます。match は、パターンに一致する構文木の特定の要素に対応します。パターンは、オプションでキャプチャと述語を定義できます。capture を使用すると、パターン内の特定のノードに名前を関連付けることができます。predicate は、一致に任意のメタデータと条件付きデータを追加します。runtimepath 下の queries ディレクトリにある *.scm ファイルとしてクエリを検索します。各ファイルには、特定の言語および目的に対応するクエリが含まれています。たとえば、Lua ファイルのハイライト表示には queries/lua/highlights.scm が使用されます。デフォルトでは、runtimepath 上の最初のクエリが使用されます (通常は、ユーザー設定がプラグインよりも優先され、プラグインが Nvim にバンドルされているクエリよりも優先されることを意味します)。クエリが他のクエリを置き換えるのではなく拡張する必要がある場合は、treesitter-query-modeline-extends を使用します。eq? 述語は次のように使用できます。((identifier) @variable.builtin
(#eq? @variable.builtin "self"))"self" テキストに対応する識別子のみを一致させるため。このようなクエリを使用して、組み込みの関数や変数を異なる方法でハイライト表示できます。eq? treesitter-predicate-eq?((identifier) @variable.builtin (#eq? @variable.builtin "self"))
((node1) @left (node2) @right (#eq? @left @right))match? treesitter-predicate-match?vim-match? treesitter-predicate-vim-match?((identifier) @constant (#match? @constant "^[A-Z_]+$"))^ および $ アンカーは、ノードのテキストの先頭と末尾に一致します。any-match? treesitter-predicate-any-match?any-vim-match? treesitter-predicate-any-vim-match?match? と同様ですが、数量化されたパターンでは 1 つのキャプチャされたノードのみが一致する必要があります。any-lua-match? treesitter-predicate-any-lua-match?lua-match? と同様ですが、数量化されたパターンでは 1 つのキャプチャされたノードのみが一致する必要があります。contains? treesitter-predicate-contains?((identifier) @foo (#contains? @foo "foo"))
((identifier) @foo-bar (#contains? @foo-bar "foo" "bar"))any-contains? treesitter-predicate-any-contains?contains? と同様ですが、数量化されたパターンでは 1 つのキャプチャされたノードのみが一致する必要があります。any-of? treesitter-predicate-any-of?((identifier) @foo (#any-of? @foo "foo" "bar"))has-ancestor? treesitter-predicate-has-ancestor?((identifier) @variable.builtin
(#any-of? @variable.builtin "begin" "end")
(#has-ancestor? @variable.builtin range_expression))has-parent? treesitter-predicate-has-parent?(((field_expression
(field_identifier) @method)) @_parent
(#has-parent? @_parent template_method function_declarator))eq?、match?、lua-match?、contains?) は、キャプチャに含まれるノードのいずれかが述語に一致する場合に一致させるために、代わりに any- 接頭辞を受け入れます。-- TODO: This is a
-- very long
-- comment (just imagine it)(((comment)+ @comment)
(#match? @comment "TODO"))(((comment)+ @comment)
(#any-match? @comment "TODO"))set! ディレクティブは、一致またはノードにメタデータを設定します((identifier) @foo (#set! type "parameter"))set! treesitter-directive-set!metadata[key] (一致固有) または metadata[capture_id][key] (キャプチャ固有) としてアクセスできます。{capture_id} (オプション) {key} {value}((identifier) @foo (#set! @foo kind "parameter"))
((node1) @left (node2) @right (#set! type "pair"))
((codeblock) @markup.raw.block (#set! priority 90))offset! treesitter-directive-offset!capture_id を持つキャプチャされたノードの metadata[capture_id].range として、{start_row}, {start_col}, {end_row}, {end_col}} のようなリストの形式で新しい範囲が設定されます。treesitter-language-injections に役立ちます。{capture_id} {start_row} {start_col} {end_row} {end_col}((identifier) @constant (#offset! @constant 0 1 0 -1))gsub! treesitter-directive-gsub!metadata[capture_id].text が設定されます。{capture_id} {pattern} {replacement}(#gsub! @_node ".*%.(.*)" "%1"){capture_id}(#trim! @fold); で始まるクエリ内のコメントである「モデル行」のセットを使用して、クエリの動作をカスタマイズすることをサポートしています。現在サポートされているモデル行の代替案を以下に示しますinherits: {lang}... treesitter-query-modeline-inherits{lang} からのクエリを継承する必要があることを指定します。これは、括弧で囲まれていない限り、{lang} のクエリを再帰的に下降します: ({lang})。注: これは、別の言語のクエリを含めるために使用することを目的としています。クエリを同じ言語のクエリを拡張するようにする場合は、extends を使用します。extends treesitter-query-modeline-extends;; inherits: typescript,jsx
;; extends;; extends
;;
;; inherits: csshighlights.scmという名前のクエリによって指定されます。これは、解析されたTSTreeのTSNodeを、強調表示グループに割り当てることができるcaptureと一致させます。たとえば、次のクエリ(parameters (identifier) @variable.parameter)parametersノード内の任意のidentifierノードを、@variable.parameterという名前のキャプチャと一致させます。たとえば、Luaコードの場合function f(foo, bar) end(function_declaration ; [1:1 - 24]
name: (identifier) ; [1:10 - 10]
parameters: (parameters ; [1:11 - 20]
name: (identifier) ; [1:12 - 14]
name: (identifier))) ; [1:17 - 19]fooとbarを@variable.parameterとして強調表示します。[
"if"
"else"
] @keyword.conditionalhighlights.scmクエリがruntimepathに見つかった場合、現在のバッファのtreesitter強調表示は、vim.treesitter.start()を使用して簡単に有効にできます。@が接頭辞として付いたキャプチャ名は、そのまま強調表示グループとして使用できます。一般的に使用される多くのキャプチャでは、対応する強調表示グループはデフォルトでNvimの標準強調表示グループにリンクされています(例:@commentはCommentにリンクされています)。ただし、カラースキームでオーバーライドできます。@comment.documentationを使用できます。このグループが定義されていない場合、通常の@commentの強調表示が使用されます。これにより、既存のカラースキームはすぐに機能しますが、それらを利用できるようにするクエリに対して、より具体的なバリアントを追加することができます。hi @comment.c guifg=Blue
hi @comment.lua guifg=DarkBlue
hi link @comment.documentation.java Stringthis、self) @variable.parameter 関数のパラメータ @variable.parameter.builtin 特殊なパラメータ(例:_、it) @variable.member オブジェクトと構造体のフィールドGOTOおよびその他のラベル(例:Cのlabel:)、heredocラベルを含むtypedef <type> <identifier>)@property) @property キー/値ペアのキー+、*)go、Pythonのasync/await) @keyword.function 関数を定義するキーワード(例:Goのfunc、Pythonのdef) @keyword.operator 英単語である演算子(例:and、or) @keyword.import モジュールを含めたりエクスポートしたりするためのキーワード(例:Pythonのimport、from) @keyword.type 名前空間と複合型を記述するキーワード(例:struct、enum) @keyword.modifier 他の構造体を変更するキーワード(例:const、static、public) @keyword.repeat ループに関連するキーワード(例:for、while) @keyword.return returnやyieldのようなキーワード @keyword.debug デバッグに関連するキーワード @keyword.exception 例外に関連するキーワード(例:throw、catch)if、else) @keyword.conditional.ternary 三項演算子(例:?、:);、.、,) @punctuation.bracket ブラケット(例:()、{}、[]) @punctuation.special 特殊記号(例:文字列補間での{})ERROR、FIXME、DEPRECATED) @comment.warning 警告タイプのコメント(例:WARNING、FIX、HACK) @comment.todo todoタイプのコメント(例:TODO、WIP) @comment.note 注釈タイプのコメント(例:NOTE、INFO、XXX)$ ... $)@spellキャプチャを使用して、ノードがNvimの組み込みスペルチェッカーによってスペルチェックされる必要があることを示すことができます。たとえば、次のキャプチャは、チェックされるコメントとしてマークします。(comment) @spell@nospellもあり、@spellでスペルチェック領域を無効にします。concealメタデータを介してconcealをサポートします。慣例により、隠蔽されるノードは@concealとしてキャプチャされますが、任意のキャプチャを使用できます。たとえば、次のクエリを使用して、Markdownでコードブロックデリミタを非表示にすることができます。(fenced_code_block_delimiter @conceal (#set! conceal ""))!=演算子をUnicodeグリフに置き換えます。これは、他の演算子と同じように強調表示されます。"!=" @operator (#set! conceal "≠")"priority"メタデータ属性を設定して手動で変更することもできます。((super_important_node) @superimportant (#set! priority 105))<script>タグ内のJavaScriptと<style>タグ内のCSSを含めることができます。<% %>タグ内のRubyと、これらのタグの外側のHTMLが含まれています。<phpタグの間にHTMLを含めることができます。@injection.content - キャプチャされたノードの内容が別の言語を使用して再解析される必要があることを示します。@injection.language - キャプチャされたノードのテキストに、@injection.contentを再解析するために使用する必要がある言語の名前が含まれている可能性があることを示します。@injection.filename - キャプチャされたノードのテキストにファイル名が含まれている可能性があることを示します。対応するファイルタイプは、vim.filetype.match()を介してルックアップされ、@injection.contentを再解析するために使用する必要がある言語の名前として扱われます。injection.language - 特定の言語の名前をハードコードするために使用できます。injection.combined - ツリー内のすべてのマッチングノードの内容が1つのネストされたドキュメントとして解析される必要があることを示します。injection.include-children - @injection.contentノードのテキスト全体を、子ノードのテキストを含めて再解析する必要があることを示します。デフォルトでは、子ノードのテキストは、注入されたドキュメントから除外されます。injection.self - ノードのテキストがノードのLanguageTreeと同じ言語で解析される必要があることを示します。injection.parent - キャプチャされたノードのテキストがノードの親LanguageTreeと同じ言語で解析される必要があることを示します。vim.treesitter Luaモジュールのリファレンスマニュアルです。以下のコンテンツのほとんどは、関数ドキュメントから自動生成されています。TSTreeは、以下のメソッドをサポートします。TSTree)TSNode)TSNodeは、以下のメソッドをサポートします。integer){index} (integer)TSNode?)integer){descendant}) {descendant}を含むノードの子を取得します({descendant}を含む)。a -> b -> c a:child_with_descendant(c) == b a:child_with_descendant(b) == b a:child_with_descendant(a) == nil
{descendant} (TSNode)TSNode?){start_row}, {start_col}, {end_row}, {end_col}) このノード内で、指定された(行、列)位置の範囲にまたがる最小のノードを取得します。{start_row} (integer){start_col} (integer){end_row} (integer){end_col} (integer)TSNode?)integer) (integer) (integer){node} (TSNode)boolean)boolean){name} (string)TSNode[])boolean)boolean)idは、異なるツリーからのノードに対して一意であることは保証されません。string){TSNode}のすべての子を反復処理します。子ノードと、この子ノードに対応する最終的なフィールド名を返します。fun(): TSNode, string)boolean)boolean){index} (integer)TSNode?)integer){start_row}, {start_col}, {end_row}, {end_col}) このノード内で、指定された(行、列)位置の範囲にまたがる最小の名前付きノードを取得します。{start_row} (integer){start_col} (integer){end_row} (integer){end_col} (integer)TSNode?)TSNode?)TSNode?)TSNode?)TSNode?)TSNode?){include_bytes}がtrueの場合){include_bytes}がtrueの場合){include_bytes} (boolean?)string)integer) (integer) (integer)integer)TSTree)string){lnum}) vim.treesitter.foldexpr(){lnum}の折りたたみレベルを返します。'foldexpr'に直接設定できます。vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()'{lnum} (integer?) 折りたたみレベルを計算する行番号string){winnr} (integer?) ウィンドウハンドルまたは現在のウィンドウの場合は0(デフォルト)string[]) キャプチャ名のリスト{bufnr}, {row}, {col}) 指定された位置のハイライトキャプチャのリストを返します。priority、concealなど。定義されていない場合は空)のテーブルで表されます。{bufnr} (integer) バッファ番号(現在のバッファの場合は0){row} (integer) 位置行{col} (integer) 位置列{capture: string, lang: string, metadata: vim.treesitter.query.TSMetadata}[])vim.treesitter.get_parser(bufnr):parse(range){opts} (table?) オプションのキーワード引数{bufnr} (integer?) バッファ番号(現在のバッファの場合はnilまたは0){pos} ([integer, integer]?) 0ベースの(行、列)タプル。デフォルトは現在のウィンドウのカーソル位置。{bufnr}が現在のバッファでない場合は必須{lang} (string?) パーサー言語。(デフォルト:バッファのファイルタイプから){ignore_injections} (boolean?) 挿入された言語を無視する(デフォルトはtrue){include_anonymous} (boolean?) 匿名ノードを含める(デフォルトはfalse)TSNode?) 指定された位置のノード{node_or_range} (TSNode|table) ノードまたは位置のテーブルinteger) start_row (integer) start_col (integer) end_row (integer) end_col{node} (TSNode){source} (integer|string) {node}が抽出されるバッファまたは文字列{opts} (table?) オプションのパラメーター。metadata[capture_id]に設定されます。string)opts.error = falseを設定します。 警告:この動作はNvim 0.12でデフォルトになり、オプションは削除されます。{bufnr} (integer?) パーサーが関連付けられるバッファ(デフォルト:現在のバッファ){lang} (string?) このパーサーの言語(デフォルト:バッファのファイルタイプから){opts} (table?) 作成された言語ツリーに渡すオプションvim.treesitter.LanguageTree?) 解析に使用するオブジェクト (string?) エラーメッセージ(該当する場合){node}, {source}, {metadata}) vim.treesitter.get_range(){source} および {metadata} を指定することもできます。{node} (TSNode){source} (integer|string?) {node} が抽出されたバッファまたは文字列{metadata} (vim.treesitter.query.TSMetadata?)table) 次のフィールドを持つテーブル{[1]} (integer) 開始行{[2]} (integer) 開始列{[3]} (integer) 開始バイト数{[4]} (integer) 終了行{[5]} (integer) 終了列{[6]} (integer) 終了バイト数{str} (string) パースするテキスト{lang} (string) この文字列の言語{opts} (table?) 作成された言語ツリーに渡すオプションvim.treesitter.LanguageTree) パースに使用するオブジェクト<Enter> を押すとソースバッファ内のカーソル下のノードにジャンプします。折りたたみも機能します (zo, zc などをお試しください)。{opts} (table?) 次のキーを持つオプションのテーブル{command} で新しいウィンドウが作成されます。{winid} が nil の場合にのみ使用されます。{dest} (TSNode) 祖先の可能性のあるノード{source} (TSNode) 子孫の可能性のあるノードboolean) {dest} が {source} の祖先である場合は True{node}, {line}, {col}) (line, col) の位置がノード範囲内にあるかどうかを判定します{node} (TSNode) 範囲を定義するノード{line} (integer) 行 (0 ベース){col} (integer) 列 (0 ベース)boolean) 位置がノード範囲内にある場合は True{node} (TSNode){range} (table)boolean) {node} が {range} を含んでいる場合は Truestart の呼び出し後に vim.bo.syntax = 'on' を追加してください。vim.api.nvim_create_autocmd( 'FileType', { pattern = 'tex',
callback = function(args)
vim.treesitter.start(args.buf, 'latex')
vim.bo[args.buf].syntax = 'on' -- only if additional legacy syntax is needed
end
}){bufnr} (integer?) ハイライトするバッファ (デフォルト: 現在のバッファ){lang} (string?) パーサーの言語 (デフォルト: バッファのファイルタイプから){bufnr} (integer?) ハイライトを停止するバッファ (デフォルト: 現在のバッファ)parser ランタイムディレクトリ、または指定された {path} で検索されます。これは、treesitter 機能を有効にする前に、利用可能なパーサーを確認するために使用できます。例:if vim.treesitter.language.add('markdown') then
vim.treesitter.start(bufnr, 'markdown')
end{lang} (string) パーサーの名前 (英数字と _ のみ){opts} (table?) オプション{path} (string) パーサーが存在するオプションのパス{symbol_name} (string) ロードする言語の内部シンボル名boolean?) パーサーがロードされた場合は True (string?) パーサーをロードできない場合はエラー{lang} 自体と、vim.treesitter.language.register() を介して登録されたすべてのファイルタイプが含まれます。{lang} (string) パーサーの名前string[]) ファイルタイプ{filetype} になります。html.glimmer のような複合ファイルタイプの場合、メインのファイルタイプのみが返されます。{filetype} (string)string?)boolean にマッピングするテーブルで返されます。匿名ノードは二重引用符 (") で囲まれています。{lang} (string) 言語table){lang}, {filetype}) vim.treesitter.language.register(){filetype} (s) に使用する名前が {lang} のパーサーを登録します。{filetype} のマッピングを追加または上書きします。他のファイルタイプから {lang} への既存のマッピングは保持されます。{lang} (string) パーサーの名前{filetype} (string|string[]) lang に関連付けるファイルタイプ{name}, {handler}, {opts}) クエリで使用する新しいディレクティブを追加しますmetadata.key = value に直接設定することで、一致レベルのデータを設定できます。さらに、ハンドラーはメタデータテーブルのキャプチャ ID を使用してノードレベルのデータを設定できます metadata[capture_id].key = value{name} (string) ディレクティブの名前 (先頭の # なし){handler} (fun(match: table<integer,TSNode[]>, pattern: integer, source: integer|string, predicate: any[], metadata: vim.treesitter.query.TSMetadata))(node (#set! conceal "-")) は、predicate { "#set!", "conceal", "-" } を取得します。{opts} (table) 次のフィールドを持つテーブル{force} (boolean) 同じ名前の既存の述語を上書きします{all} (boolean) キャプチャ ID が単一ノードではなくノードのリストにマップされる一致テーブルの正しい実装を使用します。デフォルトは true です。このオプションは今後のリリースで削除されます。{name} (string) 述語の名前 (先頭の # なし){handler} (fun(match: table<integer,TSNode[]>, pattern: integer, source: integer|string, predicate: any[], metadata: vim.treesitter.query.TSMetadata): boolean?){opts} (table?) 次のフィールドを持つテーブル{force} (boolean) 同じ名前の既存の述語を上書きします{all} (boolean) キャプチャ ID が単一ノードではなくノードのリストにマップされる一致テーブルの正しい実装を使用します。デフォルトは true です。このオプションは今後のリリースで削除されます。:write を使用してください。クエリの例は $VIMRUNTIME/queries/ にあります。{lang} (string?) クエリエディタを開く言語。省略した場合、現在のバッファのファイルタイプから推測されます。{lang} (string) クエリに使用する言語{query_name} (string) クエリの名前 (例: "highlights")vim.treesitter.Query?) パースされたクエリ。クエリファイルが見つからない場合は nil。{lang}, {query_name}, {is_included}) クエリを構成するために使用されるファイルのリストを取得します{lang} (string) クエリを取得する言語{query_name} (string) ロードするクエリの名前 (例: "highlights"){is_included} (boolean?) 内部パラメーター。ほとんどの場合、nil のままにしますstring[]) query_files 指定されたクエリと言語でロードするファイルのリスト{buf}, {opts}) vim.treesitter.query.lint(){buf} のクエリファイルのエラーを確認するには、runtimepath の treesitter-parsers を使用します/lua/highlights.scm で終わる場合、lua 言語のパーサーが使用されます。{buf} (integer) バッファハンドル{opts} (table?) オプションのキーワード引数{langs} (string|string[]) クエリのチェックに使用する言語。複数の言語が指定された場合、クエリはすべての言語で検証されます{clear} (boolean) 現在のリントエラーをクリアするだけstring[]) サポートされているディレクティブ。string[]) サポートされている述語。vim.bo.omnifunc = 'v:lua.vim.treesitter.query.omnifunc'{findstart} (0|1){base} (string){lang}, {query}) vim.treesitter.query.parse(){query}を文字列として解析します。(クエリがファイルにある場合、呼び出し元は呼び出す前にコンテンツを文字列に読み込む必要があります)。Query ( lua-treesitter-query を参照) オブジェクトを返します。このオブジェクトは、iter_captures メソッドと iter_matches メソッドを使用して、{query} で定義されたパターンについて構文ツリー内のノードを検索するために使用できます。{query}に関する追加のコンテキストとともに、info と captures を公開します。captures には、{query} で定義された一意のキャプチャ名のリストが含まれています。info.captures も captures を指します。info.patterns には、述語に関する情報が含まれています。{lang} (string) クエリに使用する言語{query} (string) s-expr構文のクエリvim.treesitter.Query) 解析済みのクエリ{node}, {source}, {start}, {stop}) {node} 内のすべてのマッチからすべてのキャプチャを反復処理します。{source}が必要になります。その場合、呼び出し元は、バッファーの現在のテキスト (関連する場合) と一致する新しく解析されたツリーを使用するようにする必要があります。{start}と{stop}を使用して、行範囲内のマッチを制限できます(これは通常、ルートノードを{node}として使用します。つまり、現在のビューポートで構文ハイライトのマッチを取得します)。省略した場合、{start}と{stop}の行の値は、指定されたノードから使用されます。for id, node, metadata, match in query:iter_captures(tree:root(), bufnr, first, last) do
local name = query.captures[id] -- name of the capture in the query
-- typically useful info about the node:
local type = node:type() -- type of the captured node
local row1, col1, row2, col2 = node:range() -- range of the capture
-- ... use the info here ...
end{node} (TSNode) 検索が行われるノード{source} (integer|string) テキストを抽出するソースバッファーまたは文字列{start} (integer?) 検索の開始行。デフォルトはnode:start()です。{stop} (integer?) 検索の停止行(終端は含まない)。デフォルトはnode:end_()です。fun(end_line: integer?): integer, TSNode, vim.treesitter.query.TSMetadata, TSQueryMatch) キャプチャID、キャプチャノード、メタデータ、マッチ{node}, {source}, {start}, {stop}, {opts}) 指定された範囲で自身のマッチを反復処理します。{node} 内のすべてのマッチを反復処理します。引数は Query:iter_captures() と同じですが、反復処理される値は異なります。クエリ内のパターンの(1から始まる)インデックス、キャプチャインデックスをノードのリストにマッピングするテーブル、およびマッチを処理するディレクティブからのメタデータです。for pattern, match, metadata in cquery:iter_matches(tree:root(), bufnr, 0, -1) do
for id, nodes in pairs(match) do
local name = query.captures[id]
for _, node in ipairs(nodes) do
-- `node` was captured by the `name` capture in the match
local node_data = metadata[id] -- Node level metadata
... use the info here ...
end
end
end{node} (TSNode) 検索が行われるノード{source} (integer|string) 検索するソースバッファーまたは文字列{start} (integer?) 検索の開始行。デフォルトはnode:start()です。{stop} (integer?) 検索の停止行(終端は含まない)。デフォルトはnode:end_()です。{opts} (table?) オプションのキーワード引数false(デフォルトはtrue)の場合、返されるテーブルは、マッチングノードの完全なリストではなく、キャプチャIDを単一の(最後の)ノードにマップします。このオプションは下位互換性のためのみであり、将来のリリースで削除されます。fun(): integer, table<integer, TSNode[]>, vim.treesitter.query.TSMetadata) パターンID、マッチ、メタデータ{lang}, {query_name}, {text}) vim.treesitter.query.set(){lang} の {query_name} という名前のランタイムクエリを設定します。{lang} (string) クエリに使用する言語{query_name} (string) クエリの名前(例: "highlights"){text} (string) クエリテキスト(解析されていない)。{lang}のルートtreesitterパーサーと、再帰的に他の言語を挿入できる「挿入された」言語パーサーです。たとえば、一部のVimscriptコマンドを含むLuaバッファーは、そのコンテンツを完全に理解するために複数のパーサーを必要とします。local parser = vim.treesitter.get_parser(bufnr, lang)bufnr=0は現在のバッファーを意味します)。langのデフォルトは、'filetype'です。注: 現在、パーサーはバッファーの有効期間中保持されますが、これは変更される可能性があります。プラグインは、インクリメンタルアップデートが必要な場合は、パーサーオブジェクトへの参照を保持する必要があります。local tree = parser:parse({ start_row, end_row })parse()を呼び出す必要があります。バッファーが編集されていない場合は、余分な作業なしで同じツリーが再度返されます。バッファーが以前に解析された場合は、変更された部分のインクリメンタル解析が行われます。{range} (table) 次のフィールドを持つテーブル{[1]} (integer) 開始行{[2]} (integer) 開始列{[3]} (integer) 終了行{[4]} (integer) 終了列boolean)remove_childを呼び出して削除する必要があります。{fn} (fun(tree: TSTree, ltree: vim.treesitter.LanguageTree)){start_row}、{start_col}、{start_bytes}、{end_row}、{end_col}、{end_bytes} } の形式の範囲を表します。table<integer, Range6[]>){reload} (boolean?){exclude_children}) LanguageTree:is_valid(){exclude_children} (boolean?) 子の有効性を無視するかどうか (デフォルトはfalse)boolean){range} (table) 次のフィールドを持つテーブル{[1]} (integer) 開始行{[2]} (integer) 開始列{[3]} (integer) 終了行{[4]} (integer) 終了列vim.treesitter.LanguageTree) {range} を管理するツリー{range}, {opts}) {range} を含む最小の名前付きノードを取得します。{range} (table) 次のフィールドを持つテーブル{[1]} (integer) 開始行{[2]} (integer) 開始列{[3]} (integer) 終了行{[4]} (integer) 終了列{opts} (table?) 次のフィールドを持つテーブル{ignore_injections} (boolean, デフォルト: true) 挿入された言語を無視しますTSNode?){range} (table) 次のフィールドを持つテーブル{[1]} (integer) 開始行{[2]} (integer) 開始列{[3]} (integer) 終了行{[4]} (integer) 終了列{opts} (table?) 次のフィールドを持つテーブル{ignore_injections} (boolean, デフォルト: true) 挿入された言語を無視しますTSNode?){range}) LanguageTree:parse(){}、通常はルートツリーのみ) は常に解析されます。それ以外の場合 (通常はインジェクション)、{range}と交差する場合 (または、{range}がtrueの場合) のみです。{range} (boolean|Range?) パーサーのソースでこの範囲を解析します。ソースの完全な解析を実行するには、trueに設定します(注: 遅くなる可能性があります!)。空の範囲を持つ領域 (通常はインジェクションなしのルートツリーのみ) のみを解析するには、false|nilに設定します。table<integer, TSTree>)on_bytes : nvim_buf_attach()を参照してください。ただし、これはパーサーのコールバックの後に呼び出されます。on_changedtree : ツリーに構文的な変更があるたびに呼び出されるコールバック。変更された範囲 (ノード範囲として) のテーブルと変更されたツリーという2つの引数が渡されます。on_child_added : 子がツリーに追加されるときに発生します。on_child_removed : 子がツリーから削除されるときに発生します。on_detach : バッファーがデタッチされたときに発生します。nvim_buf_detach_eventを参照してください。引数としてバッファーの番号を1つ取ります。{recursive} (boolean?) すべての子に対して再帰的にコールバックを適用します。新しい子もコールバックを継承します。{range} (table) 次のフィールドを持つテーブル{[1]} (integer) 開始行{[2]} (integer) 開始列{[3]} (integer) 終了行{[4]} (integer) 終了列{opts} (table?) 次のフィールドを持つテーブル{ignore_injections} (boolean, デフォルト: true) 挿入された言語を無視しますTSTree?)table<integer, TSTree>)