Ui

Nvimの:helpページは、ソースからtree-sitter-vimdocパーサーを使用して生成されています。


Nvim UIプロトコル ui

UIイベント ui-protocol ui-events

UIは、RPC APIを介してNvimと通信する外部クライアントプロセスとして実装できます。デフォルトのUIモデルは、単一のモノスペースフォントを持つ端末のようなグリッドです。UIは、ウィンドウを別々のグリッドに描画し、一部の要素(「ウィジェット」)をNvimではなくUI自体によって表示する(「外部化」する)ことを選択できます。
ui-option
nvim_ui_attach()を呼び出して、プログラムが幅×高さのセルのサイズのNvimスクリーングリッドを描画したいことをNvimに伝えます。これは通常、起動時にエンベッダーによって行われます(ui-startupを参照)が、UIは実行中のNvimインスタンスに接続してnvim_ui_attach()を呼び出すこともできます。 optionsパラメータは、以下の(オプションの)キーを持つマップです。
ui-rgb
rgb カラーフォーマットを決定します。
true:(デフォルト)24ビットRGBカラー
false:ターミナルカラー(8ビット、最大256)
ui-override
override UI機能の解決方法を決定します。
true:接続されているすべてのUI(TUIを含む)でサポートされていない場合でも、要求されたUI機能を有効にします。
false:(デフォルト)接続されているすべてのUI(TUIを含む)でサポートされていないUI機能を無効にします。
ui-ext-options
ext_cmdline コマンドラインを外部化します。 ui-cmdline
ext_hlstate 詳細なハイライト状態。 ui-hlstate ext_linegridを暗黙的に設定します。
ext_linegrid 行ベースのグリッドイベント。 ui-linegrid ui-grid-oldを暗黙的に無効にします。
ext_messages メッセージを外部化します。 ui-messages ext_linegridext_cmdlineを暗黙的に設定します。
ext_multigrid ウィンドウごとのグリッドイベント。 ui-multigrid ext_linegridを暗黙的に設定します。
ext_popupmenu popupmenu-completion'wildmenu'を外部化します。 ui-popupmenu
ext_tabline タブラインを外部化します。 ui-tabline
ext_termcolors 外部のデフォルトカラーを使用します。
term_name ターミナルの名前'term'を設定します。
term_colors サポートされているカラー数 't_Co' を設定します。
stdin_fd このfdからバッファ1をstdinであるかのように読み取ります--。起動時の--embed UIからのみ。 ui-startup-stdin
stdin_tty stdinttyであるかどうかを示します。
stdout_tty stdoutttyであるかどうかを示します。
不明なオプションを指定するとエラーになります。UIは、サポートされているオプションについてapi-metadataui_optionsキーを確認できます。
デフォルトでは、Nvimは接続されているすべてのUIが同じ機能をサポートすることを要求するため、アクティブな機能は要求された機能の共通部分になります。UIは、この動作を反転させるためにui-overrideを指定できます(デバッグに役立ちます)。「option_set」イベントは、どの機能がアクティブであるかを通知します。
Nvimは、メソッド名「redraw」と単一の引数(画面の「更新イベント」の配列(バッチ))を使用して、接続されているすべてのUIにRPC通知を送信します。各更新イベントは、最初の要素がイベント名であり、残りの要素がイベントパラメータのタプルである配列です。したがって、同じ種類の複数のイベントを、イベント名を繰り返すことなく連続して送信できます。
単一のRPC通知における典型的な「redraw」バッチの例
['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はui-globalおよびui-grid-oldイベントを送信します(下位互換性のため)。これらは、端末のようなインターフェースを実装するのに十分です。ただし、新しいui-linegridはテキストをより効率的に(特に強調表示されたテキスト)表現し、複数のグリッドを必要とするUI機能を可能にします。新しいUIは、ui-grid-oldの代わりにui-linegridを実装する必要があります。
Nvimは、ui-ext-optionsで指定されているように、生のグリッド線の代わりに、さまざまな画面要素を構造化イベントとして「セマンティックに」送信することを選択できます。UIは、そのような要素をそれ自体で表示する必要があります。Nvimはグリッドにそれらを描画しません。
Nvimの将来のバージョンでは、新しい更新の種類が追加され、既存の更新の種類に新しいパラメータが追加される場合があります。クライアントは、前方互換性のために、そのような拡張を無視する準備をする必要があります。 api-contract

UIの起動 ui-startup

UIエンベッダー(--embedでNvimを起動し、後でnvim_ui_attach()を呼び出すクライアント)は、--headlessなしでNvimを起動する必要があります。
nvim --embed
Nvimは、起動ファイルのロードとバッファの読み取りの前に一時停止するため、UIはリクエストを呼び出して初期初期化を行うことができます。UIがnvim_ui_attach()を呼び出すとすぐに起動が続行されます。
単純なUIは、単一のnvim_ui_attach()リクエストを実行し、UIイベントを処理する準備をするだけで済みます。Nvimプロセスの追加設定が必要になる可能性のある、より機能豊富なUIは、次の起動手順を使用する必要があります。
1. 必要に応じて、nvim_get_api_info()を呼び出して、クライアントライブラリをセットアップしたり、サポートされているUI拡張のリストを取得したりします。
2. ユーザー設定がロードされる前に行う必要がある設定を行います。バッファとウィンドウはこの時点では使用できませんが、これはinit.vimに表示されるg:変数を設定するために使用できます。
3. UIがユーザー設定のロード後に追加のセットアップを実行する場合、VimEnter autocmdを登録します。
nvim_command("autocmd VimEnter * call rpcrequest(1, 'vimenter')")
4. nvim_ui_attach()を呼び出します。UIは、これでユーザー入力を処理できる必要があります。init.vimのソーシングとバッファのロードにより、ブロッキングプロンプトが表示される場合があります。
5. 手順3が使用された場合、NvimはUIにブロッキング「vimenter」リクエストを送信します。このリクエストハンドラー内で、UIはノーマルモードに入る前に、init.vimによって設定された変数を読み取るなど、安全に初期化を行うことができます。
ui-startup-stdin
UIは、組み込みTUIのcommand | nvim -で呼び出されるように、stdinからのネイティブ読み取り機能をサポートできます。 --埋め込みプロセスは、stdinがターミナルではないファイルに対して開かれていることをNvimと同様に検出できます。次に、このfdをNvimに転送する必要があります。fd = 0はすでにエンベッダーからNvimにrpcデータを送信するために使用されているため、fd = 3以降など、他のファイル記述子を使用する必要があります。
次に、stdin_fdオプションをnvim_ui_attachに渡す必要があり、Nvimはそれを暗黙的にバッファとして読み取ります。このオプションは、上記のようにNvimが--embedオプションで起動された場合にのみ使用できます。

グローバルイベント ui-global

次のUIイベントは常に発行され、エディターのグローバル状態を記述します。
["set_title", title]
["set_icon", icon]
ウィンドウタイトルとアイコン(最小化された)ウィンドウタイトルをそれぞれ設定します。2つを区別しないウィンドウシステムでは、「set_icon」は無視できます。
["mode_info_set", cursor_style_enabled, mode_info]
cursor_style_enabledは、UIがカーソルスタイルを設定する必要があるかどうかを示すブール値です。 mode_infoは、モードプロパティマップのリストです。現在のモードは、mode_changeイベントのmode_idxフィールドによって指定されます。
各モードプロパティマップには、以下のキーが含まれている場合があります。
キー 説明
cursor_shape:「block」、「horizontal」、「vertical」 cell_percentage:カーソルが占めるセルの割合。 blinkwaitblinkonblinkoffcursor-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を使用してください。
["option_set", name, value]
UI関連のオプションが変更されました。nameは以下のいずれかです。
UIが最初にNvimに接続したとき、およびユーザーまたはプラグインによってオプションが変更されたときにトリガーされます。
オプションの効果が他のUIイベントで伝えられる場合、ここではオプションは表されません。たとえば、'mouse'オプション値を転送する代わりに、「mouse_on」および「mouse_off」UIイベントは、マウスサポートがアクティブであるかどうかを直接示します。'ambiwidth'などの一部のオプションは、グリッドにすでに適用されており、適切な空のセルが追加されていますが、UIは、ui-cmdlineなどのNvimから送信された生のテキストをレンダリングするときに、そのようなオプションを使用する場合があります。
["chdir", path]
埋め込みNvimプロセスのカレントディレクトリpathに変更されました。
["mode_change", mode, mode_idx]
エディターモードが変更されました。 modeパラメーターは、現在のモードを表す文字列です。 mode_idxは、mode_info_setイベントで発行された配列へのインデックスです。UIは、対応するアイテムで指定されたプロパティに従ってカーソルスタイルを変更する必要があります。報告されるモードのセットは、Nvimの新しいバージョンで変更されます。たとえば、より多くのサブモードと一時的な状態が個別のモードとして表される場合があります。
["mouse_on"]
["mouse_off"]
現在のエディターモードで'mouse'が有効/無効になりました。端末UI、またはNvimマウスが他のマウスの使用と競合するアプリケーションへの埋め込みに役立ちます。他のUIはこのイベントを無視する場合があります。
["busy_start"]
["busy_stop"]
UIにカーソルのレンダリングを停止する必要があることを示します。このイベントの名前は誤って付けられており、実際にはビジー状態とは関係ありません。
["suspend"]
:suspendコマンドまたはCTRL-Zマッピングが使用されます。端末クライアント(またはそれが理にかなっている別のクライアント)は、自身をサスペンドできます。他のクライアントは安全に無視できます。
["update_menu"]
メニュールマッピングが変更されました。
["bell"]
["visual_bell"]
それぞれ可聴ベルまたはビジュアルベルでユーザーに通知します。
["flush"]
Nvimは画面の再描画を完了しました。内部バッファにレンダリングする実装の場合、これは再描画された部分をユーザーに表示するタイミングです。

グリッドイベント(行ベース) ui-linegrid

ext_linegrid ui-optionによってアクティブ化されます。すべての新しいUIに推奨されます。 ui-grid-oldを暗黙的に無効にします。
ui-grid-old と比較した最大の変更点は、画面上の行の内容を更新するために単一の grid_line イベントを使用することです(以前のプロトコルでは、カーソル、ハイライト、テキストイベントの組み合わせを使用していました)。
これらのイベントのほとんどは、最初のパラメータとして grid インデックスを取ります。グリッド1は、エディタ画面全体のデフォルトで使用されるグローバルグリッドです。 ext_linegrid 機能自体は、追加のグリッドを作成することはありません。ウィンドウごとのグリッドを有効にするには、ui-multigrid をアクティブにします。
ハイライト属性グループは事前定義されています。UIは、数値のハイライトIDを実際の属性にマッピングするためのテーブルを保持する必要があります。
["grid_resize", grid, width, height]
grid のサイズを変更します。クライアントが以前に grid を認識していない場合は、このサイズで新しいグリッドが作成されます。
["default_colors_set", rgb_fg, rgb_bg, rgb_sp, cterm_fg, cterm_bg]
最初の3つの引数は、それぞれデフォルトの前景色、背景色、特殊色を設定します。 cterm_fgcterm_bg は、256色端末で使用するデフォルトのカラーコードを指定します。
RGB値は、デフォルトでは常に有効な色になります。色が設定されていない場合、'background' に応じて、黒と白のデフォルト値が使用されます。 ext_termcolors オプションを設定することにより、設定されていない色の代わりに -1 が使用されます。これは、端末の組み込み(「ANSI」)のデフォルトを使用することが想定されているTUI実装で特に役立ちます。
注:対応する ui-grid-old イベントとは異なり、このイベントを送信した後に画面が常にクリアされるわけではありません。UIは、変更された背景色で画面を自分で再描画する必要があります。
ui-event-hl_attr_define
["hl_attr_define", id, rgb_attr, cterm_attr, info]
rgb_attrcterm_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は、領域をクリック可能なハイパーリンクとして表示する必要があります。
存在しないカラーキーの場合は、デフォルトの色を使用する必要があります。デフォルト値をテーブルに格納するのではなく、センチネル値を格納して、変更されたデフォルトの色が有効になるようにします。すべてのブールキーはデフォルトでfalseであり、trueの場合にのみ送信されます。
ハイライトは、rgb_attr パラメータと cterm_attr パラメータとして、RGB形式と端末256色コードの両方で常に送信されます。 ui-rgb オプションは、もはや効果がありません。ほとんどの外部UIは、rgb_attr 属性を格納して使用するだけで済みます。
id 0 は、default_colors_set で定義された色とスタイルが適用されていないデフォルトのハイライトに常に使用されます。
注:内部ハイライトテーブルがいっぱいの場合、Nvimは id 値を再利用する場合があります。その場合、Nvimは常に再定義されたIDによって影響を受ける画面セルの再描画を発行するため、UIはこれを自分で追跡する必要はありません。
info はデフォルトでは空の配列であり、以下で説明する ui-hlstate 拡張機能で使用されます。
["hl_group_set", name, hl_id]
組み込みのハイライトグループ name は、以前の hl_attr_define 呼び出しで定義された属性 hl_id を使用するように設定されました。このイベントは、属性IDを直接使用するグリッドをレンダリングするために必要ありませんが、独自の要素を一貫したハイライトでレンダリングしたいUIに役立ちます。たとえば、ui-popupmenu イベントを使用するUIは、hl-Pmenu ファミリの組み込みハイライトを使用する場合があります。
ui-event-grid_line
["grid_line", grid, row, col_start, cells, wrap]
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_clear", grid]
grid をクリアします。
["grid_destroy", grid]
grid は今後使用されなくなり、UIはそれに関連付けられたデータを解放できます。
["grid_cursor_goto", grid, row, col]
grid を現在のグリッドにし、row, col をこのグリッド上のカーソル位置にします。このイベントは、redraw バッチで最大1回送信され、表示されるカーソル位置を示します。
["grid_scroll", grid, top, bot, left, right, rows, cols]
grid の領域をスクロールします。これは、エディタの スクロール とは意味的に関係ありません。これは、「これらの画面セルをコピーする」と言うための最適化された方法です。
以下の図は、スクロール方向ごとに何が起こるかを示しています。"===" はSR(スクロール領域)の境界を表します。"---" は移動された四角形を表します。dstとsrcは共通の領域を共有していることに注意してください。
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では常にゼロであり、将来の使用のために予約されています。
ui-grid-old イベントからコードを更新する際の注意:範囲は終了を除く範囲です。これはAPIの規則と一致していますが、終了を含む set_scroll_region とは異なります。
スクロールインされた領域は、スクロールイベントの直後に ui-event-grid_line を使用して塗りつぶされます。したがって、UIはスクロールイベントの処理の一部としてこの領域をクリアする必要はありません。

グリッドイベント(セルベース) ui-grid-old

これは、ui-linegrid がアクティブでない場合に発行される、画面グリッドの従来の表現です。新しいUIは、代わりに ui-linegrid を実装する必要があります。
["resize", width, height]
グリッドのサイズが width セルと height セルに変更されます。
["clear"]
グリッドをクリアします。
["eol_clear"]
カーソル位置から現在の行の終わりまでクリアします。
["cursor_goto", row, col]
カーソルを位置(行、列)に移動します。現在、テキスト挿入の位置と表示されるカーソルの位置を定義するために同じカーソルが使用されています。ただし、「redraw」イベントで配列全体を処理した後の最後のカーソル位置のみが、表示されるカーソル位置となることを意図しています。
["update_fg", color]
["update_bg", color]
["update_sp", color]
それぞれデフォルトの前景色、背景色、特殊色を設定します。
ui-event-highlight_set
["highlight_set", attrs]
グリッドに配置される次のテキストが持つ属性を設定します。 attrs は、以下のキーを持つ辞書です。存在しないキーは、デフォルト値にリセットされます。色のデフォルトは、update_fg などの更新によって設定されます。すべてのブールキーはデフォルトでfalseです。
foreground:前景色。 background:背景色。 special:存在する場合、さまざまな下線に使用する色。 reverse:反転表示。前景色と背景色が切り替わります。 italic:イタリック体テキスト。 bold:太字テキスト。 strikethrough:取り消し線テキスト。 underline:下線付きテキスト。線は special の色を持ちます。 undercurl:下波線テキスト。波線は special の色を持ちます。 underdouble:二重下線テキスト。線は special の色を持ちます。 underdotted:点線下線テキスト。点は special の色を持ちます。 underdashed:破線下線テキスト。破線は special の色を持ちます。
["put", text]
(UTF-8エンコードされた)文字列 text は、最後の highlight_set 更新で設定されたハイライトを使用して、カーソル位置に配置されます(カーソルは進みます)。
["set_scroll_region", top, bot, left, right]
以下の scroll で使用されるスクロール領域を定義します。
注:範囲は終了を含む範囲です。これはAPIの規則と一致していません。
["scroll", count]
スクロール領域内のテキストをスクロールします。以下の図は、スクロール方向に応じて何が起こるかを示しています。"=" はSR(スクロール領域)の境界を表し、"-" は移動された四角形を表します。dstとsrcは共通の領域を共有していることに注意してください。
countが0より大きい場合、SR内の四角形を上に移動します。これは、下にスクロールしているときに発生する可能性があります。
+-------------------------+
| (clipped above SR)      |            ^
|=========================| dst_top    |
| dst (still in SR)       |            |
+-------------------------+ src_top    |
| src (moved up) and dst  |            |
|-------------------------| dst_bot    |
| src (cleared)           |            |
+=========================+ src_bot
countが0未満の場合、SR内の四角形を下に移動します。これは、上にスクロールしているときに発生する可能性があります。
+=========================+ src_top
| src (cleared)           |            |
|------------------------ | dst_top    |
| src (moved down) and dst|            |
+-------------------------+ src_bot    |
| dst (still in SR)       |            |
|=========================| dst_bot    |
| (clipped below SR)      |            v
+-------------------------+

詳細なハイライト状態拡張 ui-hlstate

ext_hlstate ui-option によってアクティブになります。 ui-linegrid を暗黙的にアクティブにします。
デフォルトでは、Nvimは ui-event-highlight_set の辞書キーで説明されているように、最終的に計算されたハイライト属性を使用してグリッドセルを記述するだけです。 ext_hlstate 拡張機能を使用すると、UIはセルでアクティブなハイライトの意味的記述も受信できます。このモードでは、ハイライトはテーブルに事前定義されます。 ui-event-hl_attr_defineui-event-grid_line を参照してください。 hl_attr_defineinfo パラメータには、ハイライトの意味的記述が含まれます。ハイライトグループを組み合わせることができるため、これはアイテムの配列になり、優先順位の高いアイテムが最後になります。各アイテムは、次の可能なキーを持つ辞書です。
kind:常に存在します。次のいずれかの値です。"ui":組み込みUIハイライト。 highlight-groups "syntax":構文宣言または nvim_buf_add_highlight() などのランタイム/プラグイン機能によってバッファに適用されたハイライト "terminal":terminal-emulator で実行されているプロセスからのハイライト。それ以上の意味情報は含まれていません。 ui_namehighlight-groups からのハイライト名。"ui"の種類の場合のみ。 hi_name:使用される属性が定義されている最終的な :highlight グループの名前。 id:このアイテムを表す一意の数値ID。
注記: "ui" 項目は、ui_namehi_name の両方が存在します。これらは、組み込みグループが別のグループ :hi-link にリンクされている場合、または 'winhighlight' が使用されている場合に異なる可能性があります。UI項目は、ハイライトグループがクリアされていても送信されるため、ui_name は、属性が適用されていない場合でも、画面要素を確実に識別するために常に使用できます。

マルチグリッドイベント ui-multigrid

ext_multigrid ui-option によって有効化されます。ui-linegrid を暗黙的に有効化します。
グリッドイベントについては、ui-linegrid を参照してください。グリッドサイズの変更をリクエストするには、nvim_ui_try_resize_grid() を参照してください。Nvim にマウスイベントを送信するには、nvim_input_mouse() を参照してください。
マルチグリッド拡張機能により、UI はウィンドウの表示方法をより詳細に制御できます。
UI は、ウィンドウごとに個別のグリッドで更新を受信します。
UI は、ウィンドウがグローバルレイアウトで占めるスペースに関係なく、グリッドサイズを独立して設定できます。そのため、UI はウィンドウごとに異なるフォントサイズを使用できます。または、UI ツールキットのスクロールバーなど、独自の要素のためにウィンドウの境界線の周囲にスペースを確保できます。
専用のグリッドは、ウィンドウ領域をスクロールする可能性のあるメッセージに使用されます。(代わりに ui-messages を使用できます)。
デフォルトでは、グリッドサイズは Nvim によって処理され、分割が作成されるたびに外部グリッドサイズ(つまり、Nvim のウィンドウフレームのサイズ)に設定されます。UI がグリッドサイズを設定すると、Nvim はそのグリッドのサイズを処理しなくなり、UI は外部サイズが変更されるたびにグリッドサイズを変更する必要があります。グリッドサイズの処理を Nvim に戻すには、サイズ (0, 0) をリクエストします。
ウィンドウは、グリッドを割り当て解除せずに非表示にして再表示できます。これは、タブを切り替えるときなど、同じウィンドウで複数回発生する可能性があります。
["win_pos", grid, win, start_row, start_col, width, height]
Nvim でグリッドの位置とサイズ(つまり、外部グリッドサイズ)を設定します。ウィンドウが以前に非表示だった場合は、再度表示する必要があります。
["win_float_pos", grid, win, anchor, anchor_grid, anchor_row, anchor_col, mouse_enabled, zindex]
フローティングウィンドウ win を表示または再構成します。ウィンドウは、指定された位置 anchor_rowanchor_col にある別のグリッド anchor_grid の上に表示する必要があります。 anchor の意味と位置の詳細については、nvim_open_win() を参照してください。 mouse_enabled は、ウィンドウがマウスイベントを受信できる場合は true です。
["win_external_pos", grid, win]
外部ウィンドウ win を表示または再構成します。ウィンドウは、デスクトップ環境の個別のトップレベルウィンドウとして、または同様のものとして表示する必要があります。
["win_hide", grid]
ウィンドウの表示を停止します。ウィンドウは後で再び表示できます。
["win_close", grid]
ウィンドウを閉じます。
["msg_set_pos", grid, row, scrolled, sep_char]
grid にメッセージを表示します。グリッドは、デフォルトのグリッド(grid=1)の row に表示され、列の全幅をカバーします。 scrolled は、メッセージ領域がスクロールして他のグリッドを覆っているかどうかを示します。その場合、区切り文字 msgsep を描画すると便利です。組み込み TUI は、sep_char'fillchars' msgsep フィールド)と hl-MsgSeparator ハイライトで塗りつぶされた線を引きます。
ui-messages がアクティブな場合、メッセージグリッドは使用されず、このイベントは送信されません。
["win_viewport", grid, win, topline, botline, curline, curcol, line_count, scroll_delta]
ウィンドウに表示されるバッファテキストの範囲と、バッファ内のカーソル位置を示します。すべての位置はゼロベースです。バッファの行数を超えるフィラー行がある場合、botline は行数に 1 を加えた値に設定されます。 scroll_delta には、win_viewport が最後に発行されてからウィンドウの最初の行が移動した量が含まれています。スムーズスクロールを実装するために使用することを目的としています。この目的のために、「仮想」または「表示」行のみがカウントされるため、折りたたみは1行としてのみカウントされます。画面全体以上をスクロールする場合、これはおおよその値です。
バッチ内の grid_line などのすべての更新は、win_viewport が更新後に受信されるという事実にもかかわらず、新しいビューポートに影響します。たとえば、スムーズスクロールを実装するアプリケーションは、これを考慮に入れて、グリッドを画面に表示されているものとは別に保ち、win_viewport が受信されたらビューポートの宛先にコピーする必要があります。
["win_viewport_margins", grid, win, top, bottom, left, right]
win_viewport イベントで示されるように、ビューポートの一部では*ない* ウィンドウグリッドのマージンを示します。これは、たとえば、'winbar' やフローティングウィンドウの境界線が存在する場合に発生します。
["win_extmark", grid, win, ns_id, mark_id, row, col]
現在ウィンドウに表示されている extmark の位置を更新します。マークに ui_watched 属性がある場合にのみ発行されます。

ポップアップメニューイベント ui-popupmenu

ext_popupmenu ui-option によって有効化されます。
この UI 拡張機能は、popupmenu-completion とコマンドライン 'wildmenu' の表示を委任します。
["popupmenu_show", items, selected, row, col, grid]
popupmenu-completion を表示します。 items は表示する補完項目の配列です。各項目は、complete-items で定義されている [word, kind, menu, info] 形式の配列です。ただし、word は存在する場合、abbr に置き換えられます。 selected は、最初に選択された項目であり、項目の配列へのゼロベースのインデックスです(項目が選択されていない場合は -1)。 rowcol は、補完された単語の最初の文字が配置されるアンカー位置を示します。 ui-multigrid が使用されている場合、grid はアンカー位置のグリッドです。 ext_cmdline がアクティブな場合、grid は -1 に設定され、popupmenu が外部 cmdline にアンカーされる必要があることを示します。その場合、col は cmdline テキストのバイト位置になります。
["popupmenu_select", selected]
現在の popupmenu で項目を選択します。 selected は、最後の popupmenu_show イベントからの項目の配列へのゼロベースのインデックス、または項目が選択されていない場合は -1 です。
["popupmenu_hide"]
popupmenu を非表示にします。

タブラインイベント ui-tabline

ext_tabline ui-option によって有効化されます。
["tabline_update", curtab, tabs, curbuf, buffers]
タブラインが更新されました。UI は、このデータをカスタムタブラインウィジェットに表示する必要があります。注記: オプション curbuf + buffers は API7 で追加されました。curtab: 現在のタブページ tabs:辞書のリスト [{ "tab": Tabpage, "name": String }, ...] curbuf: 現在のバッファハンドル。buffers: 辞書のリスト [{ "buffer": バッファハンドル, "name": String}, ...]

コマンドラインイベント ui-cmdline

ext_cmdline ui-option によって有効化されます。
この UI 拡張機能は、cmdline の表示を委任します('wildmenu' を除く)。コマンドライン 'wildmenu' UI イベントの場合は、ui-popupmenu をアクティブにします。
["cmdline_show", content, pos, firstc, prompt, indent, level]
content: [attrs, string] のリスト [[{}, "t"], [attrs, "est"], ...]
cmdline が表示または変更されたときにトリガーされます。 content は cmdline に表示されるべき完全なコンテンツであり、pos は cmdline 内のカーソルの位置です。コンテンツは、辞書として表される異なるハイライト属性を持つチャンクに分割されます(ui-event-highlight_set を参照)。
firstcprompt は、空でない場合はコマンドラインの前に表示されるテキストです。 firstc は常に :(ex コマンド)や / ?(検索)などの組み込みコマンドラインを示しますが、promptinput() プロンプトです。 indent は、コンテンツをいくつのスペースでインデントする必要があるかを示します。
Nvim コマンドラインは、たとえばコマンドラインプロンプトで <c-r>= と入力することにより、再帰的に呼び出すことができます。 level フィールドは、同時にアクティブな異なるコマンドラインを区別するために使用されます。最初に呼び出されたコマンドラインのレベルは 1 で、次に再帰的に呼び出されたプロンプトのレベルは 2 です。 cmdline-window から呼び出されたコマンドラインは、編集されたコマンドラインよりも高いレベルになります。
["cmdline_pos", pos, level]
cmdline 内のカーソル位置を変更します。
["cmdline_special_char", c, shift, level]
cmdline 内のカーソル位置に特殊文字を表示します。これは通常、c_CTRL-V の後など、保留状態を示すために使用されます。 shift が true の場合、カーソルの後のテキストをシフトする必要があり、そうでない場合はカーソル位置の文字を上書きする必要があります。
次の cmdline_show で非表示にする必要があります。
["cmdline_hide"]
cmdline を非表示にします。
["cmdline_block_show", lines]
現在のコマンドラインにコンテキストのブロックを表示します。たとえば、ユーザーが :function を対話的に定義する場合
:function Foo()
:  echo "foo"
:
lines は、"cmdline_show" contents パラメーターと同じ形式の、ハイライトされたチャンクの行のリストです。
["cmdline_block_append", line]
現在表示されているブロックの最後に行を追加します。
["cmdline_block_hide"]
ブロックを非表示にします。

メッセージ/ダイアログイベント ui-messages

ext_messages ui-option によって有効化されます。 ui-linegridui-cmdline を暗黙的に有効化します。
この UI 拡張機能は、メッセージとダイアログの表示を委任します。そうでなければメッセージ/ cmdline 画面領域にレンダリングされるメッセージは、UI イベントとして発行されます。
Nvim は、cmdline やメッセージの画面領域を割り当てません。 'cmdheight' はゼロに設定されますが、変更して置換 cmdline またはメッセージウィンドウに使用できます。 Cmdline の状態は ui-cmdline イベントとして発行され、UI はそれを処理する必要があります。
["msg_show", kind, content, replace_last]
ユーザーにメッセージを表示します。
kind メッセージの種類を示す名前: "" (空) 不明(機能リクエストを検討してください:bugs) "confirm" confirm() または :confirm ダイアログ "confirm_sub" :substitute 確認ダイアログ :s_c "emsg" エラー(errors、内部エラー、:throw、…) "echo" :echo メッセージ "echomsg" :echomsg メッセージ "echoerr" :echoerr メッセージ "lua_error" :lua コードのエラー "rpc_error" rpcrequest() からのエラー応答 "return_prompt" 複数のメッセージの後の press-enter プロンプト "quickfix" Quickfix ナビゲーションメッセージ "search_count" 検索カウントメッセージ('shortmess' の "S" フラグ) "wmsg" 警告("search hit BOTTOM"、W10、…) 新しい種類が将来追加される可能性があります。クライアントは、不明な種類を空の種類として扱う必要があります。
content [attr_id, text_chunk] タプルの配列。異なるハイライトのチャンクのメッセージテキストを構築します。チャンク間に追加のスペースを追加しないでください。text_chunk 自体に必要な空白が含まれています。メッセージには改行 "\n" を含めることができます。
replace_last 複数メッセージの表示方法を決定します: false: メッセージを、まだ表示されている過去のメッセージ全てと共に表示します。 true: 直近の msg_show 呼び出しでメッセージを置き換えますが、他の表示されているメッセージはそのまま残ります。
["msg_clear"]
"msg_show" によって現在表示されているすべてのメッセージをクリアします。(下記の他の "msg_" イベントによって送信されたメッセージは影響を受けません)。
["msg_showmode", content]
'showmode'recording メッセージを表示します。 content は "msg_show" と同じ形式です。 このイベントは、最後のメッセージを非表示にするために空の content で送信されます。
["msg_showcmd", content]
'showcmd' メッセージを表示します。 content は "msg_show" と同じ形式です。 このイベントは、最後のメッセージを非表示にするために空の content で送信されます。
["msg_ruler", content]
ステータスラインにルーラーを表示するスペースがない場合に 'ruler' を表示するために使用されます。 content は "msg_show" と同じ形式です。 このイベントは、最後のメッセージを非表示にするために空の content で送信されます。
["msg_history_show", entries]
:messages コマンドが呼び出されたときに送信されます。 履歴はエントリのリストとして送信され、各エントリは [kind, content] のタプルです。
["msg_history_clear"]
:messages 履歴をクリアします。
メイン
コマンド索引
クイックリファレンス