index

id: 4f58a7be53c733af7d01351cf6cefa7eb8610541ed58b4ee8011a9ece1d46ae3

id (bech32): note1fav200jncue67lgpx5w0dnh606uxzp2pa4vtfm5qzx57ecw5dt3sa5lr0e

sig: ce690f84d74bbaabef5dac43e4e5c4ef31120ac5b3ba7dc8b5206b1b4803e2837280ae8e70060a414773437f5a79039e35ea3e6ff2c6568fe0f12c1dfeb96efd

created_at: 2024-01-22 15:09:34 +0900

created_at (unix time): 1705903774

content:

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, {})

これで良いことが分かりました.

最初の方法だとスクリプト内部に自身のファイル名を正確に入力しておかなくてはいけなくなる問題があったんですがそれも無事解決です.

JSON