如何在VSCode中对代码格式化
打开一个test.cpp文件,按Alt+Shift+F
可以对当前文件执行格式化操作,比如
- 自动调整缩进
- 自动调整大括号的位置
- 自动调整换行限制宽度等
文件 - 偏好 - 设置,搜索format, 可以看到一个配置选项,默认为Visual Studio
,可以换成LLVM
、Google
、Mozilla
等,也可以设置为自定义的配置参数。
- 如图是我习惯的格式,设置为:
{ BasedOnStyle: WebKit, BreakBeforeBraces: Linux}
。主要特点是:- 4空格缩进
- if for语句后的大括号
{
在同一行 - 以及function, class, namespace的风格都比较顺眼
- 参数字段
BreakBeforeBraces
是指大括号{
、}
的位置,有几个值可选:-
Linux: 最符合我的习惯
if (...) { printf(...); } else { printf(...); }
-
Stroustrup: C++祖师爷的风格,主要特点是
if (...) { printf(...); } else { printf(...); }
-
Allman: 会把大括号
{
单独放到下一行,我觉得很浪费纵向屏幕空间,不利于代码的阅读理解if (...) { printf(...); } else { printf(...); }
-
相关的插件应该只装了微软的3个C/C++插件:
不同格式化风格的主要特点
- Visual Studio: 和下面几个的主要区别是命名空间内的东西会有缩进,其他几个都是和namespace同一缩进。
namespace test { template <typename T> void print(T &&t) { std::cout << t << std::endl; } } // namespace test
- LLVM: template和返回值与函数名在同一行;另外会把单行函数格式化为单行
template <typename T> void print(T &&t) { std::cout << t << std::endl; }
- Google、Chromium:类的访问限制符
public
、private
和class
不对齐class Test { public: Test(std::string name) : name_(std::move(name)) { } void run() { std::cout << "Running test " << name_ << "..." << std::endl; run_(); std::cout << "Test " << name_ << " passed." << std::endl; } private: std::string name_; }
- Mozilla、GNU: 函数定义处,会把函数返回值的类型放到上一行
template<typename T> void print(T&& t) { std::cout << t << std::endl; }
- WebKit:和其他几个的主要区别是默认4空格缩进,而且大括号单独一行,其他都是2空格,大括号在行尾,算是最符合我习惯的,调整大括号位置即可。
- WebKit 是一个跨平台的 Web 浏览器引擎,苹果的 Safari、谷歌的 Chrome 浏览器都是基于这个框架来开发的。