将条件vimscriptMap转换为lua(neovim)(< CR>以lua提交)

3phpmpom  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(181)

我正在尝试将下面的条件Map转换为lua代码

:nnoremap <expr> <CR> ((&buftype is# "quickfix") ? "<CR>" : ":\:nohlsearch<cr>\n")

这个Map将Enter键Map到:nohlsearch命令,但前提是我们不在quickfix缓冲区中。在这里,您需要使用Enter键来选择行。
我提供的lua代码是:

vim.keymap.set("n", "<CR>", function()
if vim.bo.buftype == "quickfix" then
  print("<CR>")
  vim.api.nvim_input("<CR>")
else
  print("nohlsearch")
  vim.cmd(":nohlsearch")
end
end, {desc = "call :nohlsearch to disable highlighting (but only if in file editing)"} )

分支、vim.cmdprint()部分按预期工作,但vim.api.nvim_input("<CR>")部分不工作(在quickfix中,我不能使用Enter来选择行)。它不等效于vimscriptMap中的<CR>
此外,必须有一种更惯用的方法来编写此Map。
我开始这个转换是因为我需要使条件更复杂。

yxyvkwin

yxyvkwin1#

你需要更彻底地检查vim.keymap.set的文档(参见:h vim.keymap.set)。你做错了,并且丢失了一些参数。下面是工作情况(在nvim 0.7.2中测试):

vim.keymap.set('n', '<CR>', function()
  if vim.o.buftype == 'quickfix' then
    return "<CR>"
  else
    return ":nohlsearch<CR>"
  end
end, {expr = true, replace_keycodes = true})

您可以在lua代码中返回这些键Map,但是缺少{expr = true, replace_keycodes = true}部分。
如果你还没有看过nvim lua指南,通读一遍,确保你理解了所有的内容,你会比大多数用户更了解nvim。

相关问题