Vim:search函数中的正则表达式未按预期工作,无法找到左花括号

Vim:search函数中的正则表达式未按预期工作,无法找到左花括号,vim,curly-brackets,Vim,Curly Brackets,我试图编写一个Vim脚本函数,以帮助格式化类C函数块中左大括号所在的位置 function! FixLeftBraces() "Set the cursor to the top of the file call cursor(1,0) while search(".\+{",'We') > 0 exe "normal i\n\e" endwhile endfunction 在本例中,我的目标是定位与函数位于同一行的左花括号,并将其重新定位

我试图编写一个Vim脚本函数,以帮助格式化类C函数块中左大括号所在的位置

function! FixLeftBraces()
    "Set the cursor to the top of the file
    call cursor(1,0)
    while search(".\+{",'We') > 0
        exe "normal i\n\e"
    endwhile
endfunction
在本例中,我的目标是定位与函数位于同一行的左花括号,并将其重新定位到下一行。
We
选项分别防止包装文件和将光标重新定位到搜索选择的末尾

当我使用
/
模式在Vim中执行搜索时,在
/.\+{
中输入。执行搜索并突出显示我希望它在源代码中显示的行

例如,C行,例如:

//is highlighted
int main(){

//is not highlighted
void otherFuncion()
{
当我在寻源后使用创建的
fixleftraces()
时,它似乎不起作用。它只是运行,什么也不做


如果我将搜索更改为
search(“{”,'We')
,那么
fixleftraces()
会运行,但会在每个左括号后添加一行新行。因此,我很困惑为什么
fixleftraces()
搜索(“.\+{”,'We')
在提到的测试用例中,
search()
函数调用一直返回零 因此,整个功能并不像预期的那样工作 这是错误指定的模式。没有几个特殊字符 可以使用
\
-语法将其添加到双引号字符串常量中(请参见
:help expr-“
)。因此,regexp文本中的
\+
子字符串是 解释为单个
+
字符,以及 图案破损了

要避免这种不良行为,请将反斜杠符号转义为 模式字符串到

".\\+{"
或者切换到反斜杠不带引号的单引号字符串文字 特殊含义(请参见
:help expr-'

尝试
echo.\+{
:您将看到反斜杠消失。将其加倍或使用单引号,就像@ib.did一样。顺便说一下,在脚本中,最好使用
normal!
,而不是
normal
'.\+{'