vim和c ++ 11 lambda:自动缩进

Kla*_*aus 16 vim c++11

使用vim和c ++ 11 lambda函数实际上很差.缩进不起作用,许多括号被标记为错误.

据我所知,c和c ++的缩进和语法高亮是在内部编程而不是通过ac [...].vim文件.有没有机会为c ++ 11设置vim,特别是对于具有lambda函数的源代码?也许有人可以提示在内部vim语法检查中如何以及在何处添加lambda解析?

编辑:(评论请求的示例代码)

代码应如下所示,但格式化为单个列.

  MyLoop( [](int a, int b){
        {       
            ::i++;
            for (;;)
            {   
                SomeFunc();
            }   
            cout << "Result: " << a*b<<endl;
        }       
    });    
Run Code Online (Sandbox Code Playgroud)

更新vim 7.4:现在vim不再处理lambda表达式作为错误,但它仍然没有在lambda表达式中做任何缩进,所以它仍然不能用于c ++ :-(

顺便说一句:有没有一个好的自动格式化工具可以添加到vim环境,所以在外部按一个键进行格式化?

idb*_*rii 18

Vim 7.4现在有一个jN"正确缩进Java匿名类" 的cinoption.(:help java-cinoptions)这改进了C++ 11的lambda的缩进行为.

使用这些选项(放入〜/ .vim/after/ftplugin/cpp.vim):

setlocal cindent cino=j1,(0,ws,Ws
Run Code Online (Sandbox Code Playgroud)

如果我将你的for循环的左大括号移动到同一行(否则它很疯狂)然后vim缩进你的代码如下:

MyLoop( [](int a, int b){
    {       
        ::i++;
        for (;;) {   
            SomeFunc();
        }   
        cout << "Result: " << a*b<<endl;
    }       
});   
Run Code Online (Sandbox Code Playgroud)

它不会给你想要的悬挂缩进.如果您将初始开口支撑移动到它自己的线上,那么您将获得所需的悬挂缩进.

有关所有选项,请参阅:help cinoptions-values.


如果你想要更聪明的缩进程序,这个用户建议 set equalprg=clang-format使用ClangFormat,因此=ip将缩进当前段落.当你输入时,这不会使vim正确缩进(你需要为此设置indentexpr并且这非常复杂).

还有一个vim插件似乎与设置equalprg相同,但代码更多.不确定它是否更好.它应该是clang-format.py的替代(来自Cyprian Guerra的回答).

  • 好的。如果你不想创建 ~/.vim/after/ftplugin/cpp.vim 文件,你也可以在 .vimrc 中添加以下行:`autocmd BufEnter *.cpp :setlocal cindent cino=j1,(0,ws, Ws` (2认同)