Nvimの:helpページは、ソースからtree-sitter-vimdocパーサーを使用して生成されています。
optionsパラメータは、以下の(オプションの)キーを持つマップです。override UI機能の解決方法を決定します。ext_cmdline コマンドラインを外部化します。 ui-cmdlineext_tabline タブラインを外部化します。 ui-tablineext_termcolors 外部のデフォルトカラーを使用します。term_name ターミナルの名前'term'を設定します。term_colors サポートされているカラー数 't_Co' を設定します。stdin_tty stdinがttyであるかどうかを示します。stdout_tty stdoutがttyであるかどうかを示します。ui_optionsキーを確認できます。['notification', 'redraw',
[
['grid_resize', [2, 77, 36]],
['grid_line',
[2, 0, 0, [[' ' , 0, 77]], false],
[2, 1, 0, [['~', 7], [' ', 7, 76]], false],
[2, 9, 0, [['~', 7], [' ', 7, 76]], false],
...
[2, 35, 0, [['~', 7], [' ', 7, 76]], false],
[1, 36, 0, [['[', 9], ['N'], ['o'], [' '], ['N'], ['a'], ['m'], ['e'], [']']], false],
[1, 36, 9, [[' ', 9, 50]], false],
[1, 36, 59, [['0', 9], [','], ['0'], ['-' ], ['1'], [' ', 9, 10], ['A'], ['l', 9, 2]], false]
],
['msg_showmode', [[]]],
['win_pos', [2, 1000, 0, 0, 77, 36]],
['grid_cursor_goto', [2, 0, 0]],
['flush', []]
]
]イベントは順番に処理する必要があります。Nvimは、画面全体の再描画が完了したときに「flush」イベントを送信します(そのため、すべてのウィンドウはバッファの状態、オプションなどを一貫して表示できます)。画面全体が再描画される前に複数の「redraw」バッチが送信される場合があり、「flush」は最後のバッチの後にのみ続きます。ユーザーは、バッチ配列の一部を処理している間の状態や、「flush」で終わらないバッチの後の状態ではなく、最終状態(「flush」が送信されたとき)のみを見る必要があります。nvim --embedNvimは、起動ファイルのロードとバッファの読み取りの前に一時停止するため、UIはリクエストを呼び出して初期初期化を行うことができます。UIがnvim_ui_attach()を呼び出すとすぐに起動が続行されます。nvim_command("autocmd VimEnter * call rpcrequest(1, 'vimenter')")4. nvim_ui_attach()を呼び出します。UIは、これでユーザー入力を処理できる必要があります。init.vimのソーシングとバッファのロードにより、ブロッキングプロンプトが表示される場合があります。command | nvim -で呼び出されるように、stdinからのネイティブ読み取り機能をサポートできます。 --埋め込みプロセスは、stdinがターミナルではないファイルに対して開かれていることをNvimと同様に検出できます。次に、このfdをNvimに転送する必要があります。fd = 0はすでにエンベッダーからNvimにrpcデータを送信するために使用されているため、fd = 3以降など、他のファイル記述子を使用する必要があります。stdin_fdオプションをnvim_ui_attachに渡す必要があり、Nvimはそれを暗黙的にバッファとして読み取ります。このオプションは、上記のようにNvimが--embedオプションで起動された場合にのみ使用できます。cursor_style_enabledは、UIがカーソルスタイルを設定する必要があるかどうかを示すブール値です。 mode_infoは、モードプロパティマップのリストです。現在のモードは、mode_changeイベントのmode_idxフィールドによって指定されます。cursor_shape:「block」、「horizontal」、「vertical」 cell_percentage:カーソルが占めるセルの割合。 blinkwait、blinkon、blinkoff:cursor-blinkingを参照してください。 attr_id:カーソル属性ID(hl_attr_defineで定義)。attr_idが0の場合、背景色と前景色を交換する必要があります。 attr_id_lm::lmapがオンのときのカーソル属性ID。 short_name:モードコード名、'guicursor'を参照してください。 name:モードの記述名。 mouse_shape:(実装予定)hl_id:代わりにattr_idを使用してください。 id_lm:代わりにattr_id_lmを使用してください。nameは以下のいずれかです。modeパラメーターは、現在のモードを表す文字列です。 mode_idxは、mode_info_setイベントで発行された配列へのインデックスです。UIは、対応するアイテムで指定されたプロパティに従ってカーソルスタイルを変更する必要があります。報告されるモードのセットは、Nvimの新しいバージョンで変更されます。たとえば、より多くのサブモードと一時的な状態が個別のモードとして表される場合があります。grid_line イベントを使用することです(以前のプロトコルでは、カーソル、ハイライト、テキストイベントの組み合わせを使用していました)。grid インデックスを取ります。グリッド1は、エディタ画面全体のデフォルトで使用されるグローバルグリッドです。 ext_linegrid 機能自体は、追加のグリッドを作成することはありません。ウィンドウごとのグリッドを有効にするには、ui-multigrid をアクティブにします。grid のサイズを変更します。クライアントが以前に grid を認識していない場合は、このサイズで新しいグリッドが作成されます。cterm_fg と cterm_bg は、256色端末で使用するデフォルトのカラーコードを指定します。ext_termcolors オプションを設定することにより、設定されていない色の代わりに -1 が使用されます。これは、端末の組み込み(「ANSI」)のデフォルトを使用することが想定されているTUI実装で特に役立ちます。rgb_attr と cterm_attr 辞書で指定された属性を持つ、id を持つハイライトをハイライトテーブルに追加します。辞書には、以下のキー(すべてオプション)があります。foreground:前景色。 background:背景色。 special:存在する場合、さまざまな下線に使用する色。 reverse:反転表示。前景色と背景色が切り替わります。 italic:イタリック体テキスト。 bold:太字テキスト。 strikethrough:取り消し線テキスト。 underline:下線付きテキスト。線は special の色を持ちます。 undercurl:下波線テキスト。波線は special の色を持ちます。 underdouble:二重下線テキスト。線は special の色を持ちます。 underdotted:点線下線テキスト。点は special の色を持ちます。 underdashed:破線下線テキスト。破線は special の色を持ちます。 altfont:代替フォント。 blend:ブレンドレベル(0〜100)。UIは、フローティングウィンドウを背景にブレンドしたり、透明なカーソルを сигナリングしたりするために使用できます。 url:このハイライトに関連付けられたURL。UIは、領域をクリック可能なハイパーリンクとして表示する必要があります。rgb_attr パラメータと cterm_attr パラメータとして、RGB形式と端末256色コードの両方で常に送信されます。 ui-rgb オプションは、もはや効果がありません。ほとんどの外部UIは、rgb_attr 属性を格納して使用するだけで済みます。id 0 は、default_colors_set で定義された色とスタイルが適用されていないデフォルトのハイライトに常に使用されます。id 値を再利用する場合があります。その場合、Nvimは常に再定義されたIDによって影響を受ける画面セルの再描画を発行するため、UIはこれを自分で追跡する必要はありません。info はデフォルトでは空の配列であり、以下で説明する ui-hlstate 拡張機能で使用されます。name は、以前の hl_attr_define 呼び出しで定義された属性 hl_id を使用するように設定されました。このイベントは、属性IDを直接使用するグリッドをレンダリングするために必要ありませんが、独自の要素を一貫したハイライトでレンダリングしたいUIに役立ちます。たとえば、ui-popupmenu イベントを使用するUIは、hl-Pmenu ファミリの組み込みハイライトを使用する場合があります。col_start から始まる、grid 上の row の連続部分を再描画します。 cells は、それぞれ1〜3個のアイテムを持つ配列の配列です:[text(, hl_id, repeat)]。 text は、セルに配置する必要があるUTF-8テキストで、hl_attr_define 呼び出しで定義されたハイライト hl_id を使用します。 hl_id が存在しない場合は、同じ呼び出しで最後に確認された hl_id を使用する必要があります(イベントの最初のセルには常に送信されます)。 repeat が存在する場合、セルは repeat 回(初回を含む)繰り返される必要があります。そうでない場合は、1回だけです。repeat を使用しません。wrap は、この行が次の行に折り返されることを示すブール値です。次の行に折り返される行を再描画する場合、Nvimは、行の最後の列をカバーする grid_line イベントを wrap をtrueに設定して発行し、直後に次の行の最初の列から始まる grid_line イベントを発行します。grid をクリアします。grid は今後使用されなくなり、UIはそれに関連付けられたデータを解放できます。grid を現在のグリッドにし、row, col をこのグリッド上のカーソル位置にします。このイベントは、redraw バッチで最大1回送信され、表示されるカーソル位置を示します。grid の領域をスクロールします。これは、エディタの スクロール とは意味的に関係ありません。これは、「これらの画面セルをコピーする」と言うための最適化された方法です。rows が0より大きい場合、SR内の四角形を上に移動します。これは、下にスクロールしているときに発生する可能性があります。+-------------------------+ | (clipped above SR) | ^ |=========================| dst_top | | dst (still in SR) | | +-------------------------+ src_top | | src (moved up) and dst | | |-------------------------| dst_bot | | src (invalid) | | +=========================+ src_bot
rows が0未満の場合、SR内の四角形を下に移動します。これは、上にスクロールしているときに発生する可能性があります。+=========================+ src_top | src (invalid) | | |------------------------ | dst_top | | src (moved down) and dst| | +-------------------------+ src_bot | | dst (still in SR) | | |=========================| dst_bot | | (clipped below SR) | v +-------------------------+
cols は、このバージョンのNvimでは常にゼロであり、将来の使用のために予約されています。set_scroll_region とは異なります。width セルと height セルに変更されます。attrs は、以下のキーを持つ辞書です。存在しないキーは、デフォルト値にリセットされます。色のデフォルトは、update_fg などの更新によって設定されます。すべてのブールキーはデフォルトでfalseです。foreground:前景色。 background:背景色。 special:存在する場合、さまざまな下線に使用する色。 reverse:反転表示。前景色と背景色が切り替わります。 italic:イタリック体テキスト。 bold:太字テキスト。 strikethrough:取り消し線テキスト。 underline:下線付きテキスト。線は special の色を持ちます。 undercurl:下波線テキスト。波線は special の色を持ちます。 underdouble:二重下線テキスト。線は special の色を持ちます。 underdotted:点線下線テキスト。点は special の色を持ちます。 underdashed:破線下線テキスト。破線は special の色を持ちます。text は、最後の highlight_set 更新で設定されたハイライトを使用して、カーソル位置に配置されます(カーソルは進みます)。scroll で使用されるスクロール領域を定義します。+-------------------------+ | (clipped above SR) | ^ |=========================| dst_top | | dst (still in SR) | | +-------------------------+ src_top | | src (moved up) and dst | | |-------------------------| dst_bot | | src (cleared) | | +=========================+ src_bot
+=========================+ src_top | src (cleared) | | |------------------------ | dst_top | | src (moved down) and dst| | +-------------------------+ src_bot | | dst (still in SR) | | |=========================| dst_bot | | (clipped below SR) | v +-------------------------+
ext_hlstate 拡張機能を使用すると、UIはセルでアクティブなハイライトの意味的記述も受信できます。このモードでは、ハイライトはテーブルに事前定義されます。 ui-event-hl_attr_define と ui-event-grid_line を参照してください。 hl_attr_define の info パラメータには、ハイライトの意味的記述が含まれます。ハイライトグループを組み合わせることができるため、これはアイテムの配列になり、優先順位の高いアイテムが最後になります。各アイテムは、次の可能なキーを持つ辞書です。kind:常に存在します。次のいずれかの値です。"ui":組み込みUIハイライト。 highlight-groups "syntax":構文宣言または nvim_buf_add_highlight() などのランタイム/プラグイン機能によってバッファに適用されたハイライト "terminal":terminal-emulator で実行されているプロセスからのハイライト。それ以上の意味情報は含まれていません。 ui_name:highlight-groups からのハイライト名。"ui"の種類の場合のみ。 hi_name:使用される属性が定義されている最終的な :highlight グループの名前。 id:このアイテムを表す一意の数値ID。ui_name と hi_name の両方が存在します。これらは、組み込みグループが別のグループ :hi-link にリンクされている場合、または 'winhighlight' が使用されている場合に異なる可能性があります。UI項目は、ハイライトグループがクリアされていても送信されるため、ui_name は、属性が適用されていない場合でも、画面要素を確実に識別するために常に使用できます。win を表示または再構成します。ウィンドウは、指定された位置 anchor_row と anchor_col にある別のグリッド anchor_grid の上に表示する必要があります。 anchor の意味と位置の詳細については、nvim_open_win() を参照してください。 mouse_enabled は、ウィンドウがマウスイベントを受信できる場合は true です。win を表示または再構成します。ウィンドウは、デスクトップ環境の個別のトップレベルウィンドウとして、または同様のものとして表示する必要があります。grid にメッセージを表示します。グリッドは、デフォルトのグリッド(grid=1)の row に表示され、列の全幅をカバーします。 scrolled は、メッセージ領域がスクロールして他のグリッドを覆っているかどうかを示します。その場合、区切り文字 msgsep を描画すると便利です。組み込み TUI は、sep_char('fillchars' msgsep フィールド)と hl-MsgSeparator ハイライトで塗りつぶされた線を引きます。botline は行数に 1 を加えた値に設定されます。 scroll_delta には、win_viewport が最後に発行されてからウィンドウの最初の行が移動した量が含まれています。スムーズスクロールを実装するために使用することを目的としています。この目的のために、「仮想」または「表示」行のみがカウントされるため、折りたたみは1行としてのみカウントされます。画面全体以上をスクロールする場合、これはおおよその値です。grid_line などのすべての更新は、win_viewport が更新後に受信されるという事実にもかかわらず、新しいビューポートに影響します。たとえば、スムーズスクロールを実装するアプリケーションは、これを考慮に入れて、グリッドを画面に表示されているものとは別に保ち、win_viewport が受信されたらビューポートの宛先にコピーする必要があります。win_viewport イベントで示されるように、ビューポートの一部では*ない* ウィンドウグリッドのマージンを示します。これは、たとえば、'winbar' やフローティングウィンドウの境界線が存在する場合に発生します。ui_watched 属性がある場合にのみ発行されます。ext_popupmenu ui-option によって有効化されます。items は表示する補完項目の配列です。各項目は、complete-items で定義されている [word, kind, menu, info] 形式の配列です。ただし、word は存在する場合、abbr に置き換えられます。 selected は、最初に選択された項目であり、項目の配列へのゼロベースのインデックスです(項目が選択されていない場合は -1)。 row と col は、補完された単語の最初の文字が配置されるアンカー位置を示します。 ui-multigrid が使用されている場合、grid はアンカー位置のグリッドです。 ext_cmdline がアクティブな場合、grid は -1 に設定され、popupmenu が外部 cmdline にアンカーされる必要があることを示します。その場合、col は cmdline テキストのバイト位置になります。selected は、最後の popupmenu_show イベントからの項目の配列へのゼロベースのインデックス、または項目が選択されていない場合は -1 です。ext_tabline ui-option によって有効化されます。curbuf + buffers は API7 で追加されました。curtab: 現在のタブページ tabs:辞書のリスト [{ "tab": Tabpage, "name": String }, ...] curbuf: 現在のバッファハンドル。buffers: 辞書のリスト [{ "buffer": バッファハンドル, "name": String}, ...]ext_cmdline ui-option によって有効化されます。content は cmdline に表示されるべき完全なコンテンツであり、pos は cmdline 内のカーソルの位置です。コンテンツは、辞書として表される異なるハイライト属性を持つチャンクに分割されます(ui-event-highlight_set を参照)。firstc と prompt は、空でない場合はコマンドラインの前に表示されるテキストです。 firstc は常に :(ex コマンド)や / ?(検索)などの組み込みコマンドラインを示しますが、prompt は input() プロンプトです。 indent は、コンテンツをいくつのスペースでインデントする必要があるかを示します。<c-r>= と入力することにより、再帰的に呼び出すことができます。 level フィールドは、同時にアクティブな異なるコマンドラインを区別するために使用されます。最初に呼び出されたコマンドラインのレベルは 1 で、次に再帰的に呼び出されたプロンプトのレベルは 2 です。 cmdline-window から呼び出されたコマンドラインは、編集されたコマンドラインよりも高いレベルになります。shift が true の場合、カーソルの後のテキストをシフトする必要があり、そうでない場合はカーソル位置の文字を上書きする必要があります。:function Foo()
: echo "foo"
:
lines は、"cmdline_show" contents パラメーターと同じ形式の、ハイライトされたチャンクの行のリストです。[attr_id, text_chunk] タプルの配列。異なるハイライトのチャンクのメッセージテキストを構築します。チャンク間に追加のスペースを追加しないでください。text_chunk 自体に必要な空白が含まれています。メッセージには改行 "\n" を含めることができます。msg_show 呼び出しでメッセージを置き換えますが、他の表示されているメッセージはそのまま残ります。content は "msg_show" と同じ形式です。 このイベントは、最後のメッセージを非表示にするために空の content で送信されます。content は "msg_show" と同じ形式です。 このイベントは、最後のメッセージを非表示にするために空の content で送信されます。content は "msg_show" と同じ形式です。 このイベントは、最後のメッセージを非表示にするために空の content で送信されます。[kind, content] のタプルです。