vim regex 管道未在执行命令中转义

ela*_*ich 1 regex vim

我试图为降价标头创建一个运算符挂起映射,这是学习 vim 脚本的一个练习,这里是我的 vimrc 中的行:

autocmd Filetype markdown :onoremap ih :<c-u>execute "normal! ?\\(^==\\+$\\|^--\\+$\\)\r:nohlsearch\rkvg_"<cr>
Run Code Online (Sandbox Code Playgroud)

我有这个错误

E486: Pattern not found: \(^==\+$|^--\+$\)
Run Code Online (Sandbox Code Playgroud)

我尝试了一些修改,但我得到了相同的结果,就像管道永远不会逃脱一样!

Ing*_*kat 5

:map命令中,使用<Bar>代替管道符号:

autocmd Filetype markdown :onoremap ih :<c-u>execute "normal! ?\\(^==\\+$\\<bar>^--\\+$\\)\r:nohlsearch\rkvg_"<cr>
Run Code Online (Sandbox Code Playgroud)

那个长:normal命令(实际上执行一个搜索、一个 Ex 命令,然后是更多的命令,以 分隔\r)是丑陋的。您最好使用:call search(...)代替?命令,并将多个命令分解为一个:function.