sig: ce690f84d74bbaabef5dac43e4e5c4ef31120ac5b3ba7dc8b5206b1b4803e2837280ae8e70060a414773437f5a79039e35ea3e6ff2c6568fe0f12c1dfeb96efd
Neovim で Lua を使って,いわゆる
function s:f()
echo "in script local f"
endfunction
nnoremap x :call <SID>:f()<CR>
のスクリプトローカル関数とそれを <SID>:f で呼ぶのを再現する方法が分かんねぇ…
モジュールにすれば良いのか!
local M = {
f = function ()
print("in M.f")
end
}
vim.keymap.set("n", "x", ":lua require("thisfilename").f()<CR>", {})
return M
…という解決策を理解したつもりでしたが,実は vim.keymap.set の 3 番目の引数が関数も取れることが分かり,
ref.
https://www.reddit.com/r/neovim/comments/11jzotr/how_to_call_local_lua_function_in_keymap/すなわち
local function f()
print("in local f")
end
vim.keymap.set("n", "x", f, {})
これで良いことが分かりました.
最初の方法だとスクリプト内部に自身のファイル名を正確に入力しておかなくてはいけなくなる問題があったんですがそれも無事解決です.