clang-format格式化开关异常:前置文本致代码缩进偏移求助
问题
我有一个包含C++代码片段的文本文件,想用// clang-format on/off指令只格式化代码片段。但发现当// clang-format on指令前面有文本时,后续代码的首行会出现额外向右偏移的问题。
原文件内容:
// clang-format on for(const auto& element: elements){if(element > 0){element++;}} // clang-format off some text // clang-format on for(const auto& element: elements){if(element > 0){element++;}} // clang-format off some text
格式化后异常效果:
// clang-format on for(const auto& element: elements) { if(element > 0) { element++; } } // clang-format off some text // clang-format on <--------------- for(const auto& element: elements) <--------------- { if(element > 0) { element++; } } // clang-format off some text
解决方法
方法1:让// clang-format on单独顶格
clang-format会把指令前的缩进当作代码的基准缩进,必须确保开启指令单独占一行,且没有任何前置空格。如果还是有问题,就在指令和前面的文本之间加一个空行分隔:
// clang-format off some text // clang-format on for(const auto& element: elements){if(element > 0){element++;}} // clang-format off
方法2:修改clang-format配置禁用缩进继承
在你的.clang-format配置文件中添加以下设置:
IndentPPDirectives: None
这个配置会强制所有clang-format控制指令顶格显示,不会继承前面内容的缩进,后续代码自然也不会被错误偏移。
方法3:用空行分隔文本与代码块
在非代码文本(比如some text)和// clang-format on之间加一个空行,让clang-format明确区分文本区域和代码区域,避免缩进继承。
内容的提问来源于stack exchange,提问作者gogoer
相关产品推荐
相关产品推荐

