开启Vim cindent后,如何设置括号内换行仅缩进一个shiftwidth?
解决Vim cindent括号内换行缩进过深的问题
我太懂这种纠结了——cindent的默认逻辑有时候就是这么轴,括号内换行非要缩进两倍shiftwidth,和未完成语句的缩进逻辑不一致,调起来还容易踩选项的坑。
先给你把问题拆得明明白白:
- 你说的“未完成语句”(比如表达式中途换行)的缩进,是由
cinoptions里的+N选项控制的,默认+1会让下一行缩进1倍shiftwidth; - 而函数调用、if条件的括号内换行缩进,是由
(选项控制的,默认是(2,也就是两倍shiftwidth——这才是你要改的核心地方!
之前你用cinoptions+=+0完全是找错了选项——+0会把未完成语句的额外缩进给取消,反而破坏了你想要保留的第一种情况,对括号内的缩进半毛钱用都没有。
正确的解决方案
直接修改(选项的值,把括号内的缩进倍数改成1就行:
set cinoptions=(1
如果你的cinoptions之前已经有其他自定义设置(比如+1、s1之类的),不想覆盖原有配置的话,可以用Vim脚本替换掉(的旧值:
let &cinoptions = substitute(&cinoptions, '(.\?', '(1', 'g')
效果验证
设置完之后,括号内换行就会和未完成语句保持一致的缩进了:
// 函数调用内换行(现在是1倍shiftwidth,符合预期) foo( arg1, arg2 ); // 未完成语句换行(依然保留1倍缩进,不受影响) int total = num1 + num2 + num3;
这样既解决了括号内缩进过深的问题,又保留了你想要的未完成语句自动缩进逻辑,完美匹配你的需求~
内容的提问来源于stack exchange,提问作者absurd
相关产品推荐
相关产品推荐

