1

我正在尝试编写一个 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()
{

当我FixLeftBraces()在采购后使用创建的时,它似乎不起作用。它只是运行,什么也不做。

如果我将搜索更改为search("{",'We')thenFixLeftBraces()运行但在每个左大括号后添加一个新行。所以我很困惑为什么FixLeftBraces()不能与search(".\+{",'We').

4

1 回答 1

3

在提到的测试用例中,search()函数调用一直返回零,因此整个函数无法按预期工作。其原因是错误指定的模式。\使用-syntax 可以将不少特殊字符添加到双引号字符串常量中(请参阅 参考资料:help expr-")。因此,正\+则表达式文字中的子字符串被解释为单个+字符,并且模式的初衷被破坏了。

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

".\\+{"

或切换到反斜杠没有特殊含义的单引号字符串文字(请参阅 参考资料:help expr-'),

'.\+{'
于 2011-12-11T06:48:26.123 回答