将条件 vimscript 映射转换为 lua (neovim) (在 lua 中提交 <CR>)

Ult*_*ter 2 vim lua neovim

我正在尝试将以下条件映射从 vimscript 转换为 lua:

:nnoremap <expr> <CR> ((&buftype is# "quickfix") ? "<CR>" : ":\:nohlsearch<cr>\n")
Run Code Online (Sandbox Code Playgroud)

此映射映射Enter:nohlsearch命令,但前提是我们不在quickfix缓冲区中。在那里,您需要用于Enter选择线路。

我附带的lua代码是:

:nnoremap <expr> <CR> ((&buftype is# "quickfix") ? "<CR>" : ":\:nohlsearch<cr>\n")
Run Code Online (Sandbox Code Playgroud)

分支、vim.cmdprint()部分按预期工作,但该vim.api.nvim_input("<CR>")部分不起作用(在快速修复中我无法使用它Enter来选择一行)。它不等同于<CR>vimscript 映射中的。

此外,必须有一种更惯用的方式来编写此映射。

我开始这个转换是因为我需要使条件变得更复杂。

jdh*_*hao 5

您需要更彻底地检查文档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})
Run Code Online (Sandbox Code Playgroud)

您可以只在 lua 代码中返回这些键映射,但您缺少这{expr = true, replace_keycodes = true}部分。

如果您还没有查看nvim lua 指南,请仔细阅读并确保您理解所有内容。您将比大多数用户更了解 nvim。