🥅
nvim_create_user_commandの補完候補をフィルターする
Neovimでは、luaファイル内でvim.api.nvim_create_user_command()
を使ってEXコマンドを定義することができます。
このとき、complete
オプションとして、コマンド引数候補のリストを返すlua関数を設定することができます。
このリストは-complete=customlist
のように扱われるので、ユーザーの入力でフィルターされません。常にリストすべてが候補として出力されます。
nvim_create_user_command.lua
local complete_list = {
'matter', 'milk', 'mother', 'motion', 'mountain', 'mouse', 'mouth'
}
vim.api.nvim_create_user_command(
'MyCommand',
function(opts)
print(opts.fargs[1])
end,
{
nargs = 1,
complete = function(_, _, _)
return complete_list
end
}
)
'mou'まで入力しても、'matter'などが候補に出てしまう
ユーザーの入力に応じて表示する候補を絞るには、以下のように手動でフィルター処理を行う必要があります。
nvim_create_user_command.lua
local complete_list = {
'matter', 'milk', 'mother', 'motion', 'mountain', 'mouse', 'mouth'
}
vim.api.nvim_create_user_command(
'MyCommand',
function(opts)
print(opts.fargs[1])
end,
{
nargs = 1,
complete = function(arg_lead, _, _)
local out = {}
for _, c in ipairs(complete_list) do
if vim.startswith(c, arg_lead) then
table.insert(out, c)
end
end
return out
end
}
)
入力内容によって候補が絞られる
参考
nvim_create_user_commandの解説
GIF画像のカラースキームはbase16のayu-mirage
Discussion