Nvim の :help ページは、生成されており、ソースを tree-sitter-vimdoc パーサーで解析しています。
rpc キーを取ります。RPC チャンネルは、Nvim によって listen されている TCP/IP ソケットまたは名前付きパイプに接続する他のプロセスによっても開くことができます。nvim --listen 127.0.0.1:6666さらに多くのエンドポイントを serverstart() で開始できます。
#!/usr/bin/env ruby
# Requires msgpack-rpc: gem install msgpack-rpc
#
# To run this script, execute it from a running Nvim instance (notice the
# trailing '&' which is required since Nvim won't process events while
# running a blocking command):
#
# :!./hello.rb &
#
# Or from another shell by setting NVIM_LISTEN_ADDRESS:
# $ NVIM_LISTEN_ADDRESS=[address] ./hello.rb
require 'msgpack/rpc'
require 'msgpack/rpc/transport/unix'
nvim = MessagePack::RPC::Client.new(MessagePack::RPC::UNIXTransport.new, ENV['NVIM_LISTEN_ADDRESS'])
result = nvim.call(:nvim_command, 'echo "hello world!"')
>>> from pynvim import attach
>>> nvim = attach('socket', path='[address]')
>>> nvim.command('echo "hello world!"')
let nvim = jobstart(['nvim', '--embed'], {'rpc': v:true})
echo rpcrequest(nvim, 'nvim_eval', '"Hello " . "world!"')
call jobstop(nvim)
API Type C type
------------------------------------------------------------------------
Nil
Boolean bool
Integer (signed 64-bit integer) int64_t
Float (IEEE 754 double precision) double
String {char* data, size_t size} struct
Array kvec
Dict (msgpack: map) kvec
Object any of the above
types キーに記載されている EXT タイプコードは安定しており、変更されることはないため、前方互換性があります。EXT Type C type Data ------------------------------------------------------------------------ Buffer enum value kObjectTypeBuffer |bufnr()| Window enum value kObjectTypeWindow |window-ID| Tabpage enum value kObjectTypeTabpage internal handle
(version.api_prerelease && fn.since == version.api_level){fn}.since 関数 {fn} が導入された API レベル{fn}.deprecated_since 関数 {fn} が非推奨になった API レベルfunctions マップについてnvim_ に型名を加えたもので、例えば nvim_buf_get_lines は Buffer インスタンスの get_lines メソッドです。dev-apinvim_ のみが接頭辞として付けられます(例えば、nvim_list_bufs)。nvim --api-info | python -c 'import msgpack, sys, yaml; yaml.dump(msgpack.unpackb(sys.stdin.buffer.read()), sys.stdout)'
:lua vim.print(vim.fn.api_info())
:new|put =map(filter(api_info().functions, '!has_key(v:val,''deprecated_since'')'), 'v:val.name')
api_prerelease などを動的に確認できます。api-metadata){type} は api_info().error_types で定義された数値 ID で、{message} はエラーメッセージを含む文字列です。{buf}, {changedtick}, {firstline}, {lastline}, {linedata}, {more}]{firstline} と {lastline} の間(終端排他的、ゼロベースインデックス)のバッファテキストが、{linedata} リストの新しいテキストに変更された場合。粒度は行単位です。つまり、エディターで単一の文字が変更された場合、行全体が送信されます。{changedtick} が v:null の場合、これは画面の行(表示)は変更されたが、バッファの内容は変更されていないことを意味します。{linedata} には、変更された画面の行が含まれています。これは、'inccommand' がバッファプレビューを表示するときに発生します。{buf} API バッファハンドル(バッファ番号){changedtick} バッファの b:changedtick の値。nvim に API コマンドを送信し直す場合、リクエストの一部として b:changedtick の値を確認して、他の変更が加えられていないことを確認できます。{firstline} 置換された最初の行の整数行番号。ゼロベースのインデックスです。行 1 が置換された場合、{firstline} は 1 ではなく 0 になります。{firstline} は、行が置換される前にバッファ内にあった行数以下になります。{lastline} 置換されなかった最初の行の整数行番号(つまり、範囲 {firstline}、{lastline} は終端排他的です)。ゼロベースのインデックスです。行番号 2 から 5 が置換された場合、これは 6 ではなく 5 になります。{lastline} は、行が置換される前にバッファ内にあった行数以下になります。{lastline} は、アタッチ後の最初の更新の一部である場合、-1 になります。{linedata} 新しいバッファ行の内容を含む文字列のリスト。改行文字は省略されます。空の行は空の文字列として送信されます。{more} ブール値。現在の変更が複数の nvim_buf_lines_event 通知にチャンク分割された「マルチパート」変更通知の場合は true(例えば、大きすぎる場合)。{buf} API バッファハンドル(バッファ番号)nvim_buf_lines_event[{buf}, {changedtick}, 0, -1, [""], v:false]ユーザーがバッファに2行を追加すると、以下が発生しますnvim_buf_lines_event[{buf}, {changedtick}, 0, 0, ["line1", "line2"], v:false]ユーザーが "Hello world" というテキストを含む行に移動し、"!" を挿入すると、以下が発生しますnvim_buf_lines_event[{buf}, {changedtick}, {linenr}, {linenr} + 1,
["Hello world!"], v:false]ユーザーが3行目に移動し、"20dd" を使用して20行を削除すると、以下が発生しますnvim_buf_lines_event[{buf}, {changedtick}, 2, 22, [], v:false]ユーザーが行単位ビジュアルモードを使用して3〜5行目を選択し、次に "p" を入力して6行のブロックを貼り付けると、以下が発生しますnvim_buf_lines_event[{buf}, {changedtick}, 2, 5,
['pasted line 1', 'pasted line 2', 'pasted line 3', 'pasted line 4',
'pasted line 5', 'pasted line 6'],
v:false
]ユーザーが ":edit" でバッファをリロードすると、以下が発生しますnvim_buf_detach_event[{buf}]
{buf}, {changedtick}, {firstline}, {lastline}, {new_lastline}, {old_byte_size} [, {old_utf32_size}, {old_utf16_size}]) を受け取ります。リモートチャネルイベントとは異なり、テキスト内容は渡されません。新しいテキストはコールバック内で以下のようにアクセスできます。vim.api.nvim_buf_get_lines(buf, firstline, new_lastline, true)
{old_byte_size} は、{firstline} から {lastline} までの置換された領域の合計サイズ(バイト単位)で、{lastline} の後の最後の改行を含みます。 utf_sizes が nvim_buf_attach() キーワード引数で true に設定されている場合、削除された領域の UTF-32 および UTF-16 サイズも追加引数 {old_utf32_size} および {old_utf16_size} として渡されます。{buf}, {changedtick}) です。true を返すことでデタッチできます。これにより、同じ nvim_buf_attach() 呼び出しでアタッチされたすべてのコールバックがデタッチされます。vim.api.nvim_buf_add_highlight(buf, ns_id, hl_group, line, col_start, col_end)
-- create the highlight through an extmark
extid = vim.api.nvim_buf_set_extmark(buf, ns_id, line, col_start, {end_col = col_end, hl_group = hl_group})
-- example: modify the extmark's highlight group
vim.api.nvim_buf_set_extmark(buf, ns_id, line, col_start, {end_col = col_end, hl_group = NEW_HL_GROUP, id = extid})
-- example: change the highlight's position
vim.api.nvim_buf_set_extmark(buf, ns_id, NEW_LINE, col_start, {end_col = col_end, hl_group = NEW_HL_GROUP, id = extid})
src = vim.new_highlight_source()
buf = vim.current.buffer
for i in range(5):
buf.add_highlight("String",i,0,-1,src_id=src)
# some time later ...
buf.clear_namespace(src)
call nvim_buf_set_lines(0, 0, 0, v:true, ["test text"])
let src = nvim_buf_add_highlight(0, 0, "String", 1, 0, 4)
call nvim_buf_add_highlight(0, src, "Identifier", 0, 5, -1)
" some time later ...
call nvim_buf_clear_namespace(0, src, 0, -1)
relative オプションが空でないかどうかを確認します。if vim.api.nvim_win_get_config(window_id).relative ~= '' then
-- window with this window_id is floating
end
style=minimal を指定して、'number' 列など、さまざまな視覚機能を無効にします。let buf = nvim_create_buf(v:false, v:true)
call nvim_buf_set_lines(buf, 0, -1, v:true, ["test", "text"])
let opts = {'relative': 'cursor', 'width': 10, 'height': 2, 'col': 0,
\ 'row': 1, 'anchor': 'NW', 'style': 'minimal'}
let win = nvim_open_win(buf, 0, opts)
" optional: change highlight, otherwise Pmenu is used
call nvim_set_option_value('winhl', 'Normal:MyHighlight', {'win': win})
f o o b a r line contents 0 1 2 3 4 5 character positions (0-based) 0 1 2 3 4 5 6 extmark positions (0-based)Extmark は「前方重力」を持っています。カーソルを extmark の位置に直接置いてテキストを入力すると、extmark は前方に移動します。
f o o|b a r line (| = cursor)
3 extmark
f o o z|b a r line (| = cursor)
4 extmark (after typing "z")Extmark が行の最後のインデックスにあり、その時点で改行を入力すると、extmark はそれに応じて次の行に移動します。f o o z b a r| line (| = cursor)
7 extmark
f o o z b a r first line
extmarks (none present)
| second line (| = cursor)
0 extmark (after typing <CR>)例 01 2345678
0 ex|ample..
^ extmark position
let g:mark_ns = nvim_create_namespace('myplugin')
let g:mark_id = nvim_buf_set_extmark(0, g:mark_ns, 0, 2, {})
echo nvim_buf_get_extmark_by_id(0, g:mark_ns, g:mark_id, {})
" => [0, 2]namespace (または範囲)でバッファ内のすべてのマークを取得できます。echo nvim_buf_get_extmarks(0, g:mark_ns, 0, -1, {})
" => [[1, 0, 2]]周囲のすべてのテキストを削除しても、extmark は削除されません! extmark を削除するには、nvim_buf_del_extmark() を使用します。例の "x" を削除する0 12345678 0 e|ample.. ^ extmark position
echo nvim_buf_get_extmark_by_id(0, g:mark_ns, g:mark_id, {})
" => [0, 1]
{chan}, {data}) nvim_chan_send()id にデータを送信します。ジョブの場合、プロセスの stdin に書き込みます。stdio チャネル channel-stdio の場合、Nvim の stdout に書き込みます。内部ターミナルインスタンス(nvim_open_term())の場合、ターミナル出力に直接書き込みます。詳細については channel-bytes を参照してください。rpc=true で作成された場合、チャネルは RPC メッセージを予期しているため、代わりに vim.rpcnotify() および vim.rpcrequest() を使用してください。{chan} チャネルの ID{data} 書き込むデータ。8ビットクリーン:NULバイトを含めることができます。{listed} 'buflisted' を設定します{name} マーク名{name} 変数名{chunks} テキストと指定されたハイライトを表す[text, hl_group]配列のリスト。hl_group要素は、ハイライトなしの場合は省略できます。{history} trueの場合、message-historyに追加します。{opts} オプションのパラメータ。{str}) nvim_err_write(){str} メッセージ{str}) nvim_err_writeln(){str} メッセージ{str} ステータスライン文字列('statusline'を参照)。{opts} オプションのパラメータ。{winid}は無視されます。{use_winbar}とは相互に排他的です。{opts}の"highlights"キーがtrueの場合のみ含まれます。配列の各要素は、以下のキーを持つDictです。{code}, {args}) nvim_exec_lua()...として利用可能です。チャンクは値を返すことができます。returnを接頭辞として付けます。例:return my_function(...){code} 実行するLuaコード{args} コードへの引数{keys}, {mode}, {escape_ks}) nvim_feedkeys()modeフラグによって制御されるさまざまな癖に従い、Nvimに入力キーを送信します。これは、nvim_input()とは異なり、ブロッキングコールです。<C-o>のようなシーケンスを入力するには、nvim_replace_termcodes()(通常はescape_ks=false)を使用してキーコードを置き換え、その結果をnvim_feedkeys()に渡します。:let key = nvim_replace_termcodes("<C-o>", v:true, v:false, v:true)
:call nvim_feedkeys(key, 'n', v:false)
{keys} 入力するキー{mode} 動作フラグ。 feedkeys()を参照。{escape_ks} trueの場合、keys内のK_SPECIALバイトをエスケープします。すでにnvim_replace_termcodes()を使用した場合はfalse、そうでない場合はtrueにする必要があります。[{channel-id}, {api-metadata}]{chan} channel_id、または現在のチャネルの場合は0{name}) nvim_get_color_by_name():echo nvim_get_color_by_name("Pink")
:echo nvim_get_color_by_name("#cbcbcb")
{name} カラー名または"#rrggbb"文字列link属性が定義されている場合、他の属性は有効になりません(:hi-linkを参照)。{opts} オプション辞書{opts} オプションのパラメータ{mode} モードの短い名前("n", "i", "v", ...){name}, {opts}) nvim_get_mark()(行、列、バッファ、バッファ名)タプルを返します。「行末」の列位置は、v:maxcol(大きな数)として返されます。 mark-motionsを参照してください。{name} マーク名{opts} オプションのパラメータ。将来の使用のために予約されています。{name}, {all}) nvim_get_runtime_file()nvim_get_runtime_file("colors/*.{vim,lua}", true)は、すべてのカラースキームファイルを返します。サブディレクトリの検索パターンでは、プラットフォームに関係なく、常にスラッシュ(/)を使用してください。{name}パターン{all} すべての一致を返すか、最初の一致のみを返すか{name} 変数名{name} 変数名{keys}) nvim_input(){keys} 入力するキー{button}, {action}, {modifier}, {grid}, {row}, {col}) GUIからマウスイベントを送信します。<LeftMouse><col,row>)も同じ制限があります。{button} マウスボタン: "left", "right", "middle", "wheel", "move", "x1", "x2" のいずれか。{action} 通常のボタンの場合、"press", "drag", "release" のいずれか。ホイールの場合、"up", "down", "left", "right" のいずれか。"move"の場合は無視されます。{modifier} 各修飾子を単一の文字で表した修飾子の文字列。キー押下の場合と同じ指定子が使用されますが、"-"区切り文字はオプションであるため、"C-A-"、"c-a"、"CA"のいずれもCtrl+Alt+クリックを指定するために使用できます。{grid} クライアントがui-multigridを使用している場合、グリッド番号。それ以外の場合は0。{row} マウスの行位置(再描画イベントのようにゼロベース){col} マウスの列位置(再描画イベントのようにゼロベース):ls!のように、リストされていない(ロードされていない/削除された)バッファが含まれます。バッファがロードされているかどうかを確認するには、nvim_buf_is_loaded()を使用してください。{dict} コンテキストマップ。{msg} ユーザーに表示するメッセージ{log_level} ログレベル{opts} 将来の使用のために予約されています。{buffer} 使用するバッファ(空であることが期待されます){opts} オプションのパラメータ。["input", term, bufnr, data]{str}) nvim_out_write(){str} メッセージ{data}, {crlf}, {phase}) nvim_paste()vim.paste()の失敗など)はerrに反映されますが、戻り値(vim.paste()によって厳密に決定されます)には影響しません。エラーまたはキャンセル時、後続の呼び出しは、次の貼り付けが開始される(フェーズ1または-1)まで無視(「ドレイン」)されます。vim.keymap.set('n', 'x', function()
vim.api.nvim_paste([[
line1
line2
line3
]], false, -1)
end, { buffer = true })
{data} 複数行の入力。行はLF("\n")で改行します。バイナリ(NULバイトを含む)の場合があります。{crlf} CRとCRLFでも改行します。{phase} -1:単一の呼び出しで貼り付けます(つまり、ストリーミングなし)。貼り付けを「ストリーミング」するには、次のphase値でnvim_pasteを順番に呼び出します。{lines}, {type}, {after}, {follow}) nvim_put(){type} 編集動作:getregtype()結果、または{follow} trueの場合、挿入されたテキストの最後にカーソルを配置します。{str}, {from_part}, {do_lt}, {special}) 文字列内のターミナルコードとキーコード(<CR>、<Esc>など)を内部表現に置き換えます。{str} 変換する文字列。{from_part} レガシーVimパラメーター。通常はtrue。{do_lt} <lt>も変換します。specialがfalseの場合は無視されます。{item}, {insert}, {finish}, {opts}) 補完ポップアップメニュー内の項目を選択します。<Cmd> :map-cmdまたはLuaマッピングを使用します。{item} 選択する項目のインデックス(ゼロベース)。値-1は何も選択せず、元のテキストを復元します。{finish} 補完を終了し、ポップアップメニューを閉じます。{insert}を意味します。{opts} オプションのパラメータ。将来の使用のために予約されています。{name}, {version}, {type}, {methods}, {attributes}) クライアントを自己識別します。{name} 接続されたクライアントの短い名前{version} バージョンを記述する辞書。次の(オプションの)キーがあります{type} 次のいずれかの値である必要があります。クライアントライブラリは、ユーザーによってオーバーライドされない限り、「remote」をデフォルトにする必要があります。{methods} クライアントに組み込まれたメソッド。ホストの場合、後で発見されるプラグインメソッドは含まれません。キーはメソッド名で、値は次の(オプションの)キーを持つ辞書です(将来のNvimバージョンでキーが追加される可能性があるため、不明なキーは無視されます。クライアントは、このバージョンまたはそれ以降のバージョンで定義されたキーのみを使用する必要があります)。{attributes} 任意の文字列:文字列のマップで、非公式なクライアントプロパティを表します。推奨されるキー{buffer} バッファハンドル{dir} ディレクトリパス{line} 行の内容{tabpage} タブページハンドル{window} ウィンドウハンドル:highlightコマンドとは異なり、この関数は定義を完全に置き換えます。たとえば、nvim_set_hl(0, 'Visual', {})は、ハイライトグループ 'Visual' をクリアします。"fg"または"bg"も受け入れます。 Normalグループが定義されていない場合、これらの値を使用するとエラーになります。{ns_id} このハイライトのネームスペースID nvim_create_namespace()。ハイライトグループをグローバルに設定するには0を使用してください :highlight。グローバル以外の名前空間からのハイライトはデフォルトではアクティブではありません。アクティブにするには、nvim_set_hl_ns()またはnvim_win_set_hl_ns()を使用してください。{name} ハイライトグループ名。例:"ErrorMsg"{val} ハイライト定義マップ。次のキーを受け入れます。{ns_id}) nvim_set_hl_ns(){ns_id} 使用する名前空間{ns_id} アクティブにする名前空間call nvim_set_keymap('n', ' <NL>', '', {'nowait': v:true})
nmap <nowait> <Space><NL> <Nop>
{mode} モードの短い名前(マップコマンドのプレフィックス:"n"、"i"、"v"、"x"、...)または:map!の場合は"!"、または:mapの場合は空の文字列。それぞれ、挿入モード、コマンドラインモード、またはその両方での省略形の場合は"ia"、"ca"、または"!a"{lhs} マッピングの左辺 {lhs}。{rhs} マッピングの右辺 {rhs}。{rhs}の代わりに呼び出されるLua関数。{name} 変数名{value} 変数の値{name} 変数名{value} 変数の値{text} テキスト{index} 補完候補インデックス{opts} オプションのパラメータ。{pat} 検索するファイルのパターン{all} すべての一致を返すか、最初の一致のみを返すか{opts} is_lua: Luaサブディレクトリのみを検索します{obj} 返すオブジェクト。{arr} 返す配列。{dct} 返す辞書。{flt} 返す値。{grid}, {row}, {col}) nvim__inspect_cell(){opts} オプションのパラメータ。win、buf、またはすべてのウィンドウを再描画対象としてマークします。trueの場合、変更された行のみを再描画します(デコレーションプロバイダーに役立ちます)。falseの場合、強制的に再描画します。buf、winのバッファ、または現在のバッファの範囲を再描画します(デコレーションプロバイダーに役立ちます)。範囲の最初と最後の行番号を含むタプル[first, last]を0ベースのエンドエクスクルーシブAPIインデックスで期待します。winまたは現在のウィンドウで画面上のカーソル位置をすぐに更新します。{dict}, {fn}, {args}) 指定された引数を使用してVimscriptのディクショナリ関数を呼び出します。{fn} 呼び出す関数{args} 配列にパックされた関数の引数{command} Exコマンド文字列{expr} Vimscriptの式文字列{src} Vimscriptコード{opts} オプションのパラメータ。opts.outputがtrueの場合の出力。{expr} 解析する式。常に1行として扱われます。{flags} フラグ{highlight} trueの場合、戻り値には、4タプル(配列)(整数, 整数, 整数, 文字列)の配列を含む "highlight" キーも含まれます。最初の3つの数値はハイライトされた領域を定義し、行、開始列、終了列を表します(後者は排他的です:[start_col, end_col)の領域をハイライトする必要があります)。[行, 列]。「行」は常に0です(たとえば「:let」でこのAPIを使用する場合、0にはなりません。ただし、それはまだ存在しません)。両方の要素は整数です。{buffer}, {name}, {command}, {opts}) バッファローカルコマンドユーザー定義コマンドを作成します。{buffer} バッファハンドル。現在のバッファの場合は0。{buffer} バッファハンドル。現在のバッファの場合は0。{name} 削除するコマンドの名前。{buffer} バッファハンドル。現在のバッファの場合は0{opts} オプションのパラメータ。現在使用されていません。vim.cmd.bdelete{ count = 2 }の代わりに、vim.cmd.bdelete(2)を実行できます。{cmd} 実行するコマンド。nvim_parse_cmd()の戻り値と同じ値を格納できるDictである必要があります。ただし、提供されている場合は無視される "addr"、"nargs"、"nextcmd" を除きます。"cmd"以外のすべての値はオプションです。{opts} オプションのパラメータ。{name}, {command}, {opts}) グローバルなユーザー定義コマンドを作成します。:call nvim_create_user_command('SayHello', 'echo "Hello world!"', {'bang': v:true})
:SayHello
Hello world!
{name} 新しいユーザーコマンドの名前。大文字で始まる必要があります。{command} このユーザーコマンドが実行されたときに実行する置換コマンド。Luaから呼び出された場合、コマンドはLua関数にすることもできます。この関数は、以下のキーを含む単一のテーブル引数で呼び出されます<args><f-args><bang><line1><line2><range><count><reg><mods>{opts} オプションのコマンド属性。{command}にLua関数が使用されている場合に、コマンドを一覧表示するために使用されます。{name} 削除するコマンドの名前。{opts} オプションのパラメータ。現在、{"builtin":false}のみをサポートしています。{str} 解析するコマンドライン文字列。"\n"を含めることはできません。{opts} オプションのパラメータ。将来の使用のために予約されています。<line1> <line2>)。コマンドが範囲を受け入れない場合は省略されます。それ以外の場合、範囲が指定されていない場合は要素がなく、単一の範囲項目のみが指定されている場合は要素が1つ、両方の範囲項目が指定されている場合は要素が2つになります。<count>。コマンドがカウントを受け入れられない場合は省略されます。<register>。コマンドがレジスタを受け入れられない場合は省略されます。<bang>(!)修飾子が含まれているかどうか。{name}, {opts}) nvim_get_option_info2(){scope} が提供されない場合、最後に設定された情報は、利用可能な場合は現在のバッファーまたはウィンドウのローカル値に適用され、それ以外の場合はグローバル値の情報が返されます。この動作は、{opts} テーブルで {scope} を明示的に指定することで無効にできます。{name} オプション名{opts} オプションのパラメータ{scope} が "local" であることを意味します。{name}, {opts}) nvim_get_option_value(){opts} に "buf" または "win" が設定されている場合を除きます。{name} オプション名{opts} オプションのパラメータ{scope} が "local" であることを意味します。{name}, {value}, {opts}) オプションの値を設定します。この関数の動作は :set の動作と一致します。グローバルローカルオプションの場合、{scope} で特に指定しない限り、グローバル値とローカル値の両方が設定されます。{win} と {buf} は一緒に使用できないことに注意してください。{name} オプション名{value} 新しいオプション値{opts} オプションのパラメータ{buffer}, {send_buffer}, {opts}) nvim_buf_attach()events 変数でバッファー更新をキャプチャします (その内容を表示するには "vim.print(events)" を使用します)events = {}
vim.api.nvim_buf_attach(0, false, {
on_lines = function(...)
table.insert(events, {...})
end,
})
{buffer} バッファハンドル。現在のバッファの場合は0{send_buffer} 最初の通知にバッファー全体を含める必要がある場合は True: 最初の通知は nvim_buf_lines_event になります。それ以外の場合、最初の通知は nvim_buf_changedtick_event になります。Lua コールバック用ではありません。{opts} オプションのパラメータ。false または nil 以外)を返します。引数utf_sizes が true の場合)utf_sizes が true の場合)false または nil 以外)を返します。引数on_lines の引数として、置換された領域の UTF-32 および UTF-16 サイズを含めます。{buffer} バッファハンドル。現在のバッファの場合は0{fun} バッファー内で呼び出す関数 (現在は Lua 呼び出し可能のみ){buffer}, {mode}, {lhs}) nvim_buf_del_keymap(){buffer} バッファハンドル。現在のバッファの場合は0{buffer} マークを設定するバッファー{name} マーク名{buffer} バッファハンドル。現在のバッファの場合は0{name} 変数名{buffer} バッファハンドル。現在のバッファの場合は0{opts} オプションのパラメータ。キー{buffer} バッファハンドル。現在のバッファの場合は0{buffer} バッファハンドル。現在のバッファの場合は0b:changedtick 値。{buffer} バッファハンドル。現在のバッファの場合は0{mode} モードの短い名前("n", "i", "v", ...){buffer}, {start}, {end}, {strict_indexing}) バッファーから行範囲を取得します。strict_indexing が設定されていない場合、範囲外のインデックスは最も近い有効な値にクランプされます。{buffer} バッファハンドル。現在のバッファの場合は0{start} 最初の行のインデックス{end} 最後の行のインデックス (終端は含まれません){strict_indexing} 範囲外をエラーにするかどうか。{buffer}, {name}) nvim_buf_get_mark()(row,col) タプルを返します。「行末」の列位置は v:maxcol (大きな数) として返されます。mark-motions を参照してください。{buffer} バッファハンドル。現在のバッファの場合は0{name} マーク名{buffer} バッファハンドル。現在のバッファの場合は0{buffer}, {index}) nvim_buf_get_offset(){buffer} バッファハンドル。現在のバッファの場合は0{index} 行インデックス{buffer}, {start_row}, {start_col}, {end_row}, {end_col}, {opts}) バッファから範囲を取得します。{buffer} バッファハンドル。現在のバッファの場合は0{start_row} 最初の行インデックス{start_col} 最初の行の開始列(バイトオフセット){end_row} 最後の行インデックス(含む){end_col} 最後の行の終了列(バイトオフセット、含まない){opts} オプションパラメータ。現在未使用。{buffer} バッファハンドル。現在のバッファの場合は0{name} 変数名{buffer}) nvim_buf_is_loaded(){buffer} バッファハンドル。現在のバッファの場合は0{buffer} バッファハンドル。現在のバッファの場合は0{buffer} バッファハンドル。現在のバッファの場合は0{buffer}, {mode}, {lhs}, {rhs}, {opts}) 指定されたモードのバッファローカルなマッピングを設定します。{buffer} バッファハンドル。現在のバッファの場合は0{buffer}, {start}, {end}, {strict_indexing}, {replacement}) バッファ内の行範囲を設定(置換)します。startとendを同じインデックスに設定します。行の範囲を削除するには、replacementを空の配列に設定します。strict_indexing が設定されていない場合、範囲外のインデックスは最も近い有効な値にクランプされます。{buffer} バッファハンドル。現在のバッファの場合は0{start} 最初の行のインデックス{end} 最後の行のインデックス (終端は含まれません){strict_indexing} 範囲外をエラーにするかどうか。{replacement} 置換として使用する行の配列{buffer}, {name}, {line}, {col}, {opts}) 指定されたバッファに名前付きマークを設定します。すべてのマークは、ファイル/大文字、ビジュアル、最後の変更など許可されています。mark-motionsを参照してください。{buffer} マークを設定するバッファー{name} マーク名{line} 行番号{col} 列/行番号{opts} オプションのパラメータ。将来の使用のために予約されています。{buffer} バッファハンドル。現在のバッファの場合は0{name} バッファ名{buffer}, {start_row}, {start_col}, {end_row}, {end_col}, {replacement}) バッファ内の範囲を設定(置換)します(row, column)の位置にテキストを挿入するには、start_row = end_row = rowおよびstart_col = end_col = colを使用します。範囲内のテキストを削除するには、replacement = {}を使用します。{buffer} バッファハンドル。現在のバッファの場合は0{start_row} 最初の行インデックス{start_col} 最初の行の開始列(バイトオフセット){end_row} 最後の行インデックス(含む){end_col} 最後の行の終了列(バイトオフセット、含まない){replacement} 置換として使用する行の配列{buffer} バッファハンドル。現在のバッファの場合は0{name} 変数名{value} 変数の値{buffer}, {ns_id}, {hl_group}, {line}, {col_start}, {col_end}) バッファにハイライトを追加します。ns_idとして渡して、名前空間にハイライトを追加します。同じ名前空間内のすべてのハイライトは、nvim_buf_clear_namespace()への単一の呼び出しでクリアできます。API呼び出しによってハイライトが削除されない場合は、ns_id = -1を渡します。ns_id = 0を使用してハイライトの新しい名前空間を作成できます。割り当てられたIDが返されます。hl_groupが空の文字列の場合、ハイライトは追加されませんが、新しいns_idは返されます。これは下位互換性のためにサポートされています。新しいコードでは、新しい空の名前空間を作成するためにnvim_create_namespace()を使用する必要があります。{buffer} バッファハンドル。現在のバッファの場合は0{ns_id} 使用する名前空間、またはグループ化されていないハイライトの場合は-1{hl_group} 使用するハイライトグループの名前{line} ハイライトする行(0から始まるインデックス){col_start} ハイライトする(バイトインデックスの)列範囲の開始{col_end} ハイライトする(バイトインデックスの)列範囲の終了、または行末までハイライトする場合は-1{buffer}, {ns_id}, {line_start}, {line_end}) 領域から名前空間付きオブジェクト(ハイライト、extmark、仮想テキスト)をクリアします。{buffer} バッファハンドル。現在のバッファの場合は0{ns_id} クリアする名前空間、またはすべての名前空間をクリアする場合は-1。{line_start} クリアする行範囲の開始{line_end} クリアする行範囲の終了(含まない)、またはバッファの終わりまでクリアする場合は-1。{buffer}, {ns_id}, {id}, {opts}) extmarkの位置(0から始まるインデックス)を取得します。{buffer} バッファハンドル。現在のバッファの場合は0{ns_id} nvim_create_namespace()からの名前空間ID{id} Extmark ID{opts} オプションのパラメータ。キー{buffer}, {ns_id}, {start}, {end}, {opts}) バッファの位置(両端を含む、0から始まるインデックスapi-indexing)によって定義された文字単位領域から「トラバーサル順」でextmarkを取得します。vim.api.nvim_buf_get_extmarks(0, my_ns, 0, -1, {})
vim.api.nvim_buf_get_extmarks(0, my_ns, {0,0}, {-1,-1}, {})
endがstartより小さい場合、トラバーサルは逆方向に機能します。(limitを使用すると、特定の場所より前の最初のマークを取得するのに役立ちます。)overlapオプションが役立つ場合があります。そうでない場合、extmarkの開始位置のみが考慮されます。sign_nameフィールドが含まれます。local api = vim.api
local pos = api.nvim_win_get_cursor(0)
local ns = api.nvim_create_namespace('my-plugin')
-- Create new extmark at line 1, column 1.
local m1 = api.nvim_buf_set_extmark(0, ns, 0, 0, {})
-- Create new extmark at line 3, column 1.
local m2 = api.nvim_buf_set_extmark(0, ns, 2, 0, {})
-- Get extmarks only from line 3.
local ms = api.nvim_buf_get_extmarks(0, ns, {2,0}, {2,0}, {})
-- Get all marks in this buffer + namespace.
local all = api.nvim_buf_get_extmarks(0, ns, 0, -1, {})
vim.print(ms)
{buffer} バッファハンドル。現在のバッファの場合は0{ns_id} nvim_create_namespace()からの名前空間ID、またはすべての名前空間の場合は-1{start} 範囲の開始:0から始まる(行、列)または有効なextmark ID(位置が境界を定義)。api-indexing{end} 範囲の終了(含む):0から始まる(行、列)または有効なextmark ID(位置が境界を定義)。api-indexing{opts} オプションのパラメータ。キーstartより小さくても、範囲と重複するマークも含まれます[extmark_id、行、列]タプルのリスト。{buffer}, {ns_id}, {line}, {col}, {opts}) extmarkを作成または更新します。end_col と end_row で定義される位置が存在する場合、extmark が範囲をカバーするためには、開始位置よりも後である必要があります。終了位置が開始位置よりも前にある場合はエラーにはなりませんが、その場合、空の範囲(ハイライトなし)のように動作します。{buffer} バッファハンドル。現在のバッファの場合は0{ns_id} nvim_create_namespace()からの名前空間ID{line} マークを配置する行。0 ベースです。 api-indexing{col} マークを配置する列。0 ベースです。 api-indexing{opts} オプションのパラメータ。[text, highlight] タプルのリストで、それぞれが指定されたハイライトを持つテキストチャンクを表します。highlight 要素は、単一のハイライトグループまたは、スタックされる複数のハイライトグループの配列(優先順位の高いものが最後)にすることができます。ハイライトグループは、文字列または整数として指定できます。後者は nvim_get_hl_id_by_name() を使用して取得できます。hl_group に影響する可能性があります。[text, highlight] タプルの配列である行の配列である必要があります。一般に、バッファとウィンドウのオプションはテキストの表示に影響しません。特に 'wrap' および 'linebreak' オプションは有効にならないため、追加の画面行数は常に配列のサイズと一致します。ただし、'tabstop' バッファオプションはハードタブの場合でも使用されます。デフォルトでは、行はマークを含むバッファ行の下に配置されます。name が既存の名前空間と一致する場合、関連付けられた ID が返されます。name が空の文字列の場合、新しい匿名名前空間が作成されます。{name} 名前空間の名前または空の文字列{ns_id}, {opts}) namespace のデコレーションプロバイダを設定または変更しますephemeral キーを使用して、現在の画面の再描画でのみマークを使用します(コールバックは次の再描画で再び呼び出されます)。on_start コールバックは false を返して、次の再描画までプロバイダを無効にすることができます。同様に、on_win で false を返すと、そのウィンドウの on_line 呼び出しはスキップされます(ただし、on_win で設定された extmark は引き続き使用されます)。複数のデコレーションソースを管理するプラグインは、理想的には 1 つのプロバイダのみを設定し、ソースを内部的にマージする必要があります。いずれにしても、コールバック内で設定/変更された extmark には複数の ns_id を使用できます。vim.rpcnotify を行うことは問題ありませんが、今のところ vim.rpcrequest は非常に疑わしいです。on_line コールバックで extmark を削除または更新することは許可されていません。{ns_id} nvim_create_namespace()からの名前空間ID{opts} コールバックのテーブル["start", tick]
["buf", bufnr, tick]
["win", winid, bufnr, toprow, botrow]
["line", winid, bufnr, row]
["end", tick]
{ns_id} 名前空間{ns_id} 名前空間{opts} 設定するオプションのパラメータ{window} ウィンドウハンドル。現在のウィンドウの場合は 0{fun} ウィンドウ内で呼び出す関数(現在は Lua でのみ呼び出し可能){window} ウィンドウハンドル。現在のウィンドウの場合は 0{window} ウィンドウハンドル。現在のウィンドウの場合は 0{name} 変数名{window} ウィンドウハンドル。現在のウィンドウの場合は 0{window}) nvim_win_get_cursor(){window} ウィンドウハンドル。現在のウィンドウの場合は 0{window} ウィンドウハンドル。現在のウィンドウの場合は 0{window} ウィンドウハンドル。現在のウィンドウの場合は 0{window} ウィンドウハンドル。現在のウィンドウの場合は 0{window} ウィンドウハンドル。現在のウィンドウの場合は 0{window} ウィンドウハンドル。現在のウィンドウの場合は 0{name} 変数名{window} ウィンドウハンドル。現在のウィンドウの場合は 0unload、delete、wipe のいずれかである場合、バッファは非表示になります。これらはバッファを閉じます。{window} ウィンドウハンドル。現在のウィンドウの場合は 0{window} ウィンドウハンドル。現在のウィンドウの場合は 0{window} ウィンドウハンドル。現在のウィンドウの場合は 0{buffer} バッファハンドル{window}, {pos}) nvim_win_set_cursor(){window} ウィンドウハンドル。現在のウィンドウの場合は 0{pos} (行、列) のタプルで、新しい位置を表します{window} ウィンドウハンドル。現在のウィンドウの場合は 0{height} 行数としての高さ{window}, {ns_id}) nvim_win_set_hl_ns(){ns_id} 使用する名前空間{window} ウィンドウハンドル。現在のウィンドウの場合は 0{name} 変数名{value} 変数の値{window}, {width}) nvim_win_set_width(){window} ウィンドウハンドル。現在のウィンドウの場合は 0{width} 列数としての幅{window}, {opts}) nvim_win_text_height(){window} ウィンドウハンドル。現在のウィンドウの場合は 0 です。{opts} オプションのパラメータ{buffer}, {enter}, {config}) nvim_open_win()relative が指定されている場合はフローティングウィンドウ、external が指定されている場合は (UI によって管理される) 外部ウィンドウを開きます。width と height を指定する必要がありますが、通常のウィンドウの場合はオプションです。relative と external が省略されている場合、通常の「分割」ウィンドウが作成されます。win プロパティは、どのウィンドウを分割するかを決定します。win が提供されていないか、win == 0 の場合、現在のウィンドウに隣接するウィンドウが作成されます。-1 が提供されている場合は、トップレベルの分割が作成されます。vertical と split は通常のウィンドウでのみ有効であり、分割方向を制御するために使用されます。vertical の場合、正確な方向は 'splitright' と 'splitbelow' によって決定されます。分割ウィンドウには、bufpos / `row` / `col` / `border` / `title` / `footer` プロパティを含めることはできません。vim.api.nvim_open_win(0, false,
{relative='win', row=3, col=3, width=12, height=3})
vim.api.nvim_open_win(0, false,
{relative='win', width=12, height=3, bufpos={100,10}})
vim.api.nvim_open_win(0, false, {
split = 'left',
win = 0
})
{buffer} 表示するバッファ。現在のバッファの場合は 0 です{enter} ウィンドウに入ります (現在のウィンドウにします){config} ウィンドウ構成を定義するマップ。キーwin フィールドで指定されたウィンドウ。または現在のウィンドウ。[行, 列] のタプルを受け取ります。指定されている場合、row と col はこの位置に対する相対位置が適用されます。それ以外の場合は、anchor が "NW" または "NE" の場合、row=1 および col=0anchor が "SW" または "SE" の場合、row=0 および col=0 (したがって、バッファテキストの近くのツールチップのような動作になります)。mouse フィールドが true に設定されている場合は、マウスイベントによって入力できます。focusable の値です。zindex が高いフローティングウィンドウは、インデックスが低いフローティングウィンドウの上に配置されます。ゼロより大きい必要があります。以下の画面要素には、ハードコードされたzインデックスがありますauto に変更され、'colorcolumn' はクリアされます。 'statuscolumn' は空に変更されます。バッファの終端領域は、'fillchars' の eob フラグをスペース文字に設定し、'winhighlight' の hl-EndOfBuffer 領域をクリアすることによって非表示になります。[ "╔", "═" ,"╗", "║", "╝", "═", "╚", "║" ].
[ "/", "-", \"\\\\\", "|" ],
[ "x" ].
[ "", "", "", ">", "", "", "", "<" ]
FloatBorderハイライトが使用されます。これは、定義されていない場合はWinSeparatorにリンクします。文字で指定することもできます。[ ["+", "MyCorner"], ["x", "MyBorder"] ].
[text, highlight]のタプルで構成される必要があります。文字列の場合、またはタプルにハイライトがない場合、デフォルトのハイライトグループはFloatTitleになります。titleオプションで設定する必要があります。値は、"left"、"center"、"right"のいずれかになります。デフォルトは"left"です。[text, highlight]のタプルで構成される必要があります。文字列の場合、またはタプルにハイライトがない場合、デフォルトのハイライトグループはFloatFooterになります。footerオプションで設定する必要があります。値は、"left"、"center"、"right"のいずれかになります。デフォルトは"left"です。relativeは、通常のウィンドウでは空です。{window} ウィンドウハンドル。現在のウィンドウの場合は 0{window}, {config}) nvim_win_set_config()row/colとrelativeは一緒に再設定する必要があります。{tabpage} タブページハンドル。現在のタブページの場合は0{name} 変数名{tabpage} タブページハンドル。現在のタブページの場合は0{tabpage} タブページハンドル。現在のタブページの場合は0{name} 変数名{tabpage} タブページハンドル。現在のタブページの場合は0{tabpage} タブページハンドル。現在のタブページの場合は0{tabpage} タブページハンドル。現在のタブページの場合は0tabpage内のウィンドウのリスト{tabpage} タブページハンドル。現在のタブページの場合は0{name} 変数名{value} 変数の値{tabpage} タブページハンドル。現在のタブページの場合は0{win} ウィンドウハンドル。すでに{tabpage}に属している必要があります{opts}) nvim_clear_autocmds(){opts}で選択されたすべての自動コマンドをクリアします。自動コマンドを削除するには、nvim_del_autocmd()を参照してください。{opts} パラメータ*.pyがある場合、それをクリアするには、*.pyを完全に渡す必要があります。test.pyはパターンに一致しません。{buffer}と一緒に使用することはできません{pattern}と一緒に使用することはできませんlocal id = vim.api.nvim_create_augroup("MyGroup", {
clear = false
})
{name} String: グループの名前{opts} Dict パラメータ{event}, {opts}) nvim_create_autocmd()callback(Lua関数またはVimscript関数名文字列)またはcommand(Exコマンド文字列)で定義された自動コマンドイベントハンドラを作成します。vim.api.nvim_create_autocmd({"BufEnter", "BufWinEnter"}, {
pattern = {"*.c", "*.h"},
callback = function(ev)
print(string.format('event fired: %s', vim.inspect(ev)))
end
})
vim.api.nvim_create_autocmd({"BufEnter", "BufWinEnter"}, {
pattern = {"*.c", "*.h"},
command = "echo 'Entering a C or C++ file'",
})
patternは、:autocmdとは異なり、自動的に展開されないため、「$HOME」や「~」のような名前は明示的に展開する必要がありますpattern = vim.fn.expand("~") .. "/some/path/*.py"
{event} (string|array) ハンドラ(callbackまたはcommand)をトリガーするイベント。{opts} オプション辞書{pattern}と一緒に使用することはできません。falseまたはnil以外)を返すことができます。次のキーを持つテーブルである1つの引数を受け取ります: event-args<amatch>の展開された値<abuf>の展開された値<afile>の展開された値{callback}と一緒に使用することはできません{id} Integer グループのID。{name} String グループの名前。{id} Integer nvim_create_autocmd()によって返された自動コマンドID{event}, {opts}) nvim_exec_autocmds(){opts}autocmd-executeに一致する{event}のすべての自動コマンドを実行します。{event} (String|Array) 実行するイベント{opts} 自動コマンドオプションのDict{buffer}と一緒に使用することはできません。{pattern}と一緒に使用することはできません。<nomodeline>。-- Matches all criteria
autocommands = vim.api.nvim_get_autocmds({
group = "MyGroup",
event = {"BufEnter", "BufWinEnter"},
pattern = {"*.c", "*.h"}
})
-- All commands from one group
autocommands = vim.api.nvim_get_autocmds({
group = "MyGroup",
})
{opts} 次のいずれかを含むDict{buffer}と一緒に使用することはできません{pattern}と一緒に使用することはできません{width}, {height}, {row}, {col}) ポップアップメニューのジオメトリを Nvim に伝え、フローティングウィンドウを外部ポップアップメニューに揃えます。{width} ポップアップメニューの幅。{height} ポップアップメニューの高さ。{row} ポップアップメニューの行。{col} ポップアップメニューの高さ。{height}) nvim_ui_pum_set_height()<PageUp> および <PageDown> の移動を決定します。{height} ポップアップメニューの高さ。ゼロより大きくなければなりません。{event} イベント名{value} イベントペイロード{grid}, {width}, {height}) Nvim にグリッドのサイズを変更するように指示します。要求されたグリッドサイズまたはサイズ制限を超える場合は最大サイズで grid_resize イベントをトリガーします。{grid} 変更するグリッドのハンドル。{width} 新しい要求された幅。{height} 新しい要求された高さ。