'Correctly escaping arguments of substitute for key mapping in nvim lua
I created a keymapping in nvim to swap the left and right side of an C equality comparison insice parentheses. It works like a charm from the nvim command prompt.
:nnoremap <F3> ci(:let @r=substitute(@*, '\(.*\) == \(.*\)', '\2 == \1', '')<CR><C-r>r<ESC>
Now I wanted to put it into my lua configuration
vim.api.nvim_set_keymap("n", "<F3>", "ci(:let @r=substitute(@*, '\(.*\) == \(.*\)', '\2 == \1', '')<CR><C-r>r<ESC>", { noremap = true, silent = true })
and get an error
invalid escape sequence near '"ci(:let @r=substitute(@*, '
I tried several things but it was pure guessing. So what is the correct lua configuration code?
and as sidenote: how could I debug the error message to solve it myself?
Solution 1:[1]
You may not escape parentheses in Lua:
$ lua
Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio
> "\("
stdin:1: invalid escape sequence near '"\('
Remove the backslashes (or if you want backslashes there, escape them) to fix this syntax error.
Without backslashes: "ci(:let @r=substitute(@*, '(.*) == (.*)', '2 == 1', '')<CR><C-r>r<ESC>" doesn't trigger a syntax error anymore.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | LMD |
