簡體   English   中英

如何在 Neovim 中使用 Lua 獲取最后插入的字符?

[英]How to get the last inserted character using Lua in Neovim?

使用 Lua 我想知道插入的字符(在插入模式下)是什么觸發了InsertCharPre / TextChangedI /... 事件。

我想編寫一個簡單的 Neovim 插件,如果我在這樣的列表中按 enter 鍵,它會自動向 markdown 項目符號列表添加一個新行。 到目前為止,該插件能夠檢測給定行是否為項目符號列表行。 現在,如果插入的字符是 <CR>,我想插入它,檢查項目符號列表的當前縮進並在下一行的同一級別添加一個新元素。 自動命令是通過InsertCharPre事件觸發的,該事件是在按下鍵但在將其插入緩沖區之前創建的。

此代碼正在為其創建自動命令:

api.nvim_create_autocmd("InsertCharPre", {
    pattern = { "*.md" },
    callback = create_new_bullet_list_entry,
    group = mdGroup
})

這是我想繼續檢查最后輸入的字符是否為 <CR> 的地方:

local create_new_bullet_list_entry = function(table)
    local cur_line = api.nvim_get_current_line()
    local is_bullet_list = is_line_bullet_list(cur_line)
    if not is_bullet_list then
        return
    end
end

如何檢查輸入的字符觸發了InsertCharPre事件?

我檢查了傳遞給回調 function 的表格,它不包含有關鍵入字符的任何信息:

{ ["id"] = 36,["file"] = /foo/bar,["match"] = /foo/bar,["group"] = 28,["buf"] = 1,["event"] = InsertCharPre,}

實現相同結果的其他方法也將非常有幫助!

要檢查輸入的字符觸發了InsertCharPre事件,您可以在事件回調中使用vim.v.char引用v:char變量。

但是,這不適用於您的用例,因為您的要求是檢查插入的字符是否是不會觸發InsertCharPre事件的回車符。 正如 Bram 在這個Github 問題中建議的那樣,您可能需要 go 來代替表達式映射。 我想是這樣的:

au FileType markdown inoremap <expr> <CR> CreateNewBulletListEntry()

並使用您想要的功能定義 function。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM