clang-format 14.0.0:如何避免字符串与<<操作符间自动换行?
问题
我在C++代码中编写了如下语句:
std::cout << "done" << "\n";
但无论进行何种设置,clang-format 14.0.0都会将其格式化为:
std::cout << "done" << "\n";
我已经修改了所有以“Break”或“Align”开头的配置选项:
AlignAfterOpenBracket: DontAlign AlignArrayOfStructures: None AlignConsecutiveMacros: 'false' AlignConsecutiveAssignments: 'false' AlignConsecutiveBitFields: 'false' AlignConsecutiveDeclarations: 'false' AlignEscapedNewlines: DontAlign AlignOperands: DontAlign AlignTrailingComments: 'false' BreakBeforeBinaryOperators: None BreakBeforeConceptDeclarations: false BreakBeforeBraces: Attach BreakBeforeInheritanceComma: false BreakInheritanceList: AfterComma BreakBeforeTernaryOperators: false BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: AfterColon BreakStringLiterals: false
请问如何阻止这一格式化行为?
解决方案
调整
ColumnLimit配置:这是触发该换行行为的核心原因。clang-format默认ColumnLimit为80,若代码行(含缩进)长度超过此值,就会自动换行。你可以:- 设置一个足够大的列宽阈值,比如:
ColumnLimit: 120 - 若想完全禁用按列宽换行,可将值设为
0:
注:设为ColumnLimit: 00后,仅会关闭因行宽过长导致的换行,其他格式化规则仍正常生效。
- 设置一个足够大的列宽阈值,比如:
检查缩进相关配置:如果
IndentWidth或TabWidth设置过大,即使代码本身不长,也可能因缩进占用过多列宽触发换行。确保这两个参数设置合理,例如:IndentWidth: 4 TabWidth: 4增加换行惩罚值:添加以下配置,提高链式调用场景下的换行惩罚,让clang-format尽量避免拆分
<<链式语句:PenaltyBreakAssignment: 10000 PenaltyBreakBeforeFirstCallParameter: 10000
内容的提问来源于stack exchange,提问作者mqnc
相关产品推荐
相关产品推荐

