使用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的回答).