在 nvim lua 中正确转义替换键映射的参数

Correctly escaping arguments of substitute for key mapping in nvim lua

我在 nvim 中创建了一个键映射来交换括号中 C 相等比较的左右两侧。它在 nvim 命令提示符下的运行就像一个魅力。

:nnoremap <F3> ci(:let @r=substitute(@*, '\(.*\) == \(.*\)', ' == ', '')<CR><C-r>r<ESC>

现在我想把它放入我的 lua 配置中

vim.api.nvim_set_keymap("n", "<F3>", "ci(:let @r=substitute(@*, '\(.*\) == \(.*\)', ' == ', '')<CR><C-r>r<ESC>", { noremap = true, silent = true })

并得到一个错误

invalid escape sequence near '"ci(:let @r=substitute(@*, '

我尝试了几件事,但这纯粹是猜测。 那么正确的lua配置代码是什么?

作为旁注:我如何调试错误消息以自行解决?

您不能在 Lua:

中转义括号
$ lua
Lua 5.3.4  Copyright (C) 1994-2017 Lua.org, PUC-Rio
> "\("
stdin:1: invalid escape sequence near '"\('

删除反斜杠(或者如果你想在那里使用反斜杠,请将其转义)以修复此语法错误。

没有反斜杠:"ci(:let @r=substitute(@*, '(.*) == (.*)', '2 == 1', '')<CR><C-r>r<ESC>" 不再触发语法错误。