首页 > 解决方案 > 如何让 clang 格式在 << 和 >> 上中断

问题描述

如何让 clang-format 打破 '<<' 和 '>>' 运算符?

我尝试将 BreakBeforeBinaryOperators 设置为 All,但这在这里似乎没有任何区别。

我希望我的代码格式如下:

in >> a
   >> b
   >> c;

代替

in >> a >> b >> c;

标签: c++clang-format

解决方案


为此,您需要两种样式设置:

BreakBeforeBinaryOperators: All
ColumnLimit: 0

或者,将样式设置为预定义WebKit样式,这将为您设置这两种样式设置。

文档说:

列限制为 0 表示没有列限制。在这种情况下,clang-format 将尊重语句中输入的换行决定,除非它们与其他规则相矛盾。

这不是一个很好的解决方案,原因如下:

  • 正如文档所说,clang-format 将尊重您开始使用的换行符。但如果它们不存在,它不会添加换行符。所以一条线in >> a >> b >> c;不会被分成不同的线。

  • 输出不会>>将第一行的 与>>后续行的 对齐。它只是按通常的续行数量缩进。例如,如果你的正常缩进是 4,你会得到:

    in >> a
        >> b
        >> c;
    

    这实际上有点奇怪,因为如果运算符是<<,clang-format 会将所有三个运算符排成一行。

  • 您可能并且可能确实想要ColumnLimit设置为 80 之类的其他值,以便其他行在合理的位置中断。

但这似乎是使用 clang 格式可以做到的最好的。

我使用 clang-format 6.0.0 进行了测试,但我相信较新的版本会起到类似的作用,而且我没有看到任何看起来会有所帮助的新样式选项。


推荐阅读