'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