You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:37:53