Lua関数の中でモードを変更する
通常の方法ではメインのイベントループに割り込めないのでできませんが、タイマーやvim.schedule()を使うことで可能になります。
code:lua
vim.keymap.set("i", "<C-z>", function()
print(1, vim.fn.mode())
vim.cmd.stopinsert()
print(2, vim.fn.mode())
vim.schedule(function()
print(3, vim.fn.mode())
end)
print(4, vim.fn.mode())
end)
このマッピングを実行すると、出力はこうなります
code:result
1 i
2 i
4 i
3 n
Neovimのイベントループに処理を投げるので、stopinsertでモードが変更された直後まで処理を遅延できます。
一度 <Esc> を挟んでモード変更しないといけないからLuaの関数でマッピングできない。。。という悩みにどうぞ