Vim中如何配置C++11 Lambda与普通参数的差异化缩进?
解决Vim中C++11 Lambda与普通函数参数的缩进区分问题
要实现你想要的效果——普通函数参数换行缩进4空格,而Lambda表达式作为参数时整体不缩进,只需要在你的cinoptions配置中添加L0参数即可。
最终配置
在你的.vimrc(或init.vim)中设置:
set cinoptions=j1,(4,L0
参数解释
每个选项的作用精准匹配你的需求:
j1:你已经在使用的参数,用于控制Lambda表达式内部代码的缩进(确保Lambda块内的代码正确缩进1级,符合你的代码风格)(4:保持普通函数参数换行时缩进4个空格,满足你对普通参数的缩进要求L0:核心新增参数,告诉Vim将Lambda表达式作为函数参数时,整体不进行额外缩进,让它和左括号(对齐,而不是套用普通参数的4空格缩进规则
效果验证
Lambda表达式的正确缩进
现在当你换行写Lambda时,会得到你期望的格式:
foo.bar( [] () { // Lambda内部代码因j1正常缩进 do_something(); } );
普通函数参数的缩进保持
普通参数换行的缩进依然符合你的要求:
fooish( bar1, bar2, bar3 );
为什么之前的配置不行?
默认情况下,Vim会把Lambda表达式当作普通的函数参数处理,因此会应用(4的缩进规则。添加L0后,Vim会专门针对Lambda表达式做特殊处理,跳过普通参数的缩进逻辑,从而实现两种场景的缩进区分。
内容的提问来源于stack exchange,提问作者thefunkyjunky
相关产品推荐
相关产品推荐

