我想实现变量/函数/等的长度永远不会影响以下行的缩进,或者至少尽可能少地影响。例如,我已经有了
AlignAfterOpenBracket: AlwaysBreak
,它将所有参数移动到下一行,例如函数名太长:
const auto result = SomeVeryLooooooonFunctionName(
parameter1,
parameter2,
parameter3,
parameter4,
parameter5,
parameter6,
parameter7);
很好:当第一行中的任何内容发生更改时,下一行根本不会受到影响(除非整个调用变得如此短以至于适合一行,但这没关系)。
但是,当我立即添加(或任何其他二进制运算)某些内容时,它就变得不受欢迎了:
const auto result = SomeVeryLooooooonFunctionName(
parameter1,
parameter2,
parameter3,
parameter4,
parameter5,
parameter6) +
1;
看起来参数现在与函数名称对齐(加上
ContinuationIndentWidth: 4
)。我可以接受大缩进(尽管在我看来这很丑),但我的问题是现在,当我例如更改 result
的名称,所有后续行都会更改其缩进,这正是我不想要的。
这将是可取的:
const auto result =
SomeVeryLooooooonFunctionName(
parameter1,
parameter2,
parameter3,
parameter4,
parameter5,
parameter6) +
1;
但实际上,只要更改第一行中的名称不会导致所有后续行重新缩进,一切都可以。
这是我的 .clang 格式文件:
---
Language: Cpp
BasedOnStyle: Mozilla
AlignAfterOpenBracket: AlwaysBreak
AlignOperands: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
PenaltyReturnTypeOnItsOwnLine: 0
ColumnLimit: 100
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
IndentWidth: 2
...
我找到了一种有效的方法。我添加了
PenaltyIndentedWhitespace: 10
,现在我得到了我想要的:
const auto result =
SomeVeryLooooooonFunctionName(
parameter1,
parameter2,
parameter3,
parameter4,
parameter5,
parameter6) +
1;