clang-format配置:如何让public/private后的类成员缩进两个空格?
问题描述
我正在使用clang-format 10.0.0-4ubuntu1格式化代码,想要实现让public、private访问修饰符后的类成员缩进两个空格(不使用制表符)。
当前格式化效果:
class Test { public: Test(); private: std::string str; }
期望的格式化效果:
class Test { public: Test(); private: std::string str; }
我的.clang-format配置:
{ BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 2, PointerAlignment: Left, SortIncludes: false, ObjCSpaceAfterProperty:true , TabWidth: 0, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: 0, NamespaceIndentation: All, FixNamespaceComments: false }
请问如何修改配置才能达到期望效果?
解决方法
方案1:升级clang-format到11及以上版本(推荐)
clang-format 11及以上版本新增了IndentAccessModifiers参数,专门用于控制访问修饰符后的成员是否额外缩进。只需在配置中添加该参数并设为true,同时保留原有核心配置即可实现你的需求:
修改后的完整配置:
{ BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 2, PointerAlignment: Left, SortIncludes: false, ObjCSpaceAfterProperty:true , TabWidth: 0, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: 0, NamespaceIndentation: All, FixNamespaceComments: false, IndentAccessModifiers: true }
方案2:使用clang-format 10的替代方案(无法完美匹配期望)
由于clang-format 10没有专门控制成员相对访问修饰符缩进的参数,无法完美实现你想要的「访问修饰符缩进2空格、成员缩进4空格」效果,只能二选一:
- 若优先保证访问修饰符缩进2空格:保持原有配置,访问修饰符和成员同缩进2空格(即当前效果)
- 若优先让成员比访问修饰符多缩进2空格:将
AccessModifierOffset改为-2,此时访问修饰符会左对齐到类的大括号,成员保持2空格缩进,效果如下:class Test { public: Test(); private: std::string str; }
内容的提问来源于stack exchange,提问作者ySh
相关产品推荐
相关产品推荐

