一键自动格式化你的代码

简介: 一键自动格式化你的代码

AStyle简介

AStyle,即Artistic Style,是一个可用于C, C++, C++/CLI, Objective‑C, C# 和Java编程语言格式化和美化的工具。我们在使用编辑器的缩进(TAB)功能时,由于不同编辑器的差别,有的插入的是制表符,有的是2个空格,有的是4个空格。这样如果别人用另一个编辑器来阅读程序时,可能会由于缩进的不同,导致阅读效果一团糟。为了解决这个问题,使用C++开发了一个插件,它可以自动重新缩进,并手动指定空格的数量,自动格式化源文件。它是可以通过命令行使用,也可以作为插件,在其他IDE中使用。


基本使用

下载完成后,解压,然后在环境变量PATH,添加AStyle.exe的路径。

基本命令行格式:

astyle [参数] [文件路径]


如在我的电脑E盘下有一个文件main.c,现在是这样的,可以看出很不规范,多个语句写在同一行,没有合理缩进,运算符两边没有空格等等。

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
int main(void)
{
delay_init();       //延时函数初始化
LED_Init();         //初始化与LED连接的硬件接口
while(1)
{
LED0=0;LED1=1;
delay_ms(300);  //延时300ms
LED0= 1;LED1 =0;
delay_ms(300);  //延时300ms
}
}


打开CMD命令窗口,输入以下命令:

AStyle --style=ansi E:\main.c


640.jpg


回车执行命令,然后再打开main.c查看,变成了这样:

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
int main(void)
{
    delay_init();       //延时函数初始化
    LED_Init();         //初始化与LED连接的硬件接口
    while(1)
    {
        LED0 = 0;
        LED1 = 1;
        delay_ms(300);  //延时300ms
        LED0 = 1;
        LED1 = 0;
        delay_ms(300);  //延时300ms
    }
}


是不是看着很舒服,合理缩进、美观、可读性高,是规范的代码风格,当然这只是AStyle一个很基础的功能,其实它支持很多参数,还可以对整个目录及子目录下的源文件进行格式化操作。


Keil开发环境添加AStyle插件

很多IDE都有自动格式化代码功能,而单片机开发经常使用的Keil系列软件居然没有这个功能,这怎么能忍?还好Keil有自定义插件的功能,可以添加AStyle自动格式化的工具,来格式化我们不规范的代码。


1.打开Keil软件

选择Tools->Customize Tools Menu,自定义外部工具菜单。

640.jpg


2.新建工具

640.jpg


点击新建按钮,输入工具名称: AstyleCurrentFile,Command命令选项,指定AStyle.exe的路径,Argument选项输入以下参数,注意大小写,建议复制粘贴,不会出错。

-pnUk1s4 --style=ansi !E


这些命令参数的含义,在下面有详细介绍,其中 !E表示当前文件,这个参数在Keil软件的使用手册里可以查到。点击OK保存。


3.试试格式化效果

640.jpg


好了,现在来试一下一键自动格式化工具吧,无论你的代码写的有多乱,只要点击Tools->Astyle Current File工具,你就会发现代码一下子变得美观了许多,就像这样。

640.jpg


4.定义一个快捷键

为了更方便,我们还可以自定义一个快捷键,来执行这个命令。点击工具栏最右边的配置图标,切换到Shortcut Keys选项,选择Tools:Astyle Current File,点击Create Shortcut创建新的快捷键,在弹出的窗口按下你要设置的快捷键,然后保存退出就可以了,下次需要使用的时候,只要按下相对应的快捷键,就可以一键将当前文件格式化。

640.jpg


其实,我还是觉得鼠标操作更方便。


AStyle插件参数详解

AStyle插件的参数实在太多了,这里只介绍我们上面那个命令中用到的参数。

-pnUk1s4 !E --style=ansi


命令参数详解:

640.jpg


更多、更详细的参数说明可以查看自带的帮助文档。


BAT命令格式化目录下的源文件

下面这个bat命令可以格式化当前目录及子目录下的所有源文件。

新建bat文件,以记事本打开,输入以下命令:

for /R %%f in (*.c;*.h) do AStyle.exe --style=allman --indent=spaces=4 --pad-oper --pad-header --unpad-paren --suffix=none --align-pointer=name --lineend=windows --convert-tabs --verbose %%f
pause


各种代码风格的比较

这里只介绍几种常见的代码风格,更多的代码风格参考帮助文档->Brace Style Options。


allman风格

int Foo(bool isBar)
{
    if (isBar)
    {
        bar();
        return 1;
    }
    else
        return 0;
}


java风格

int Foo(bool isBar) {
    if (isBar) {
        bar();
        return 1;
    } else
        return 0;
}


kr 风格

int Foo(bool isBar)
{
    if (isBar) {
        bar();
        return 1;
    } else
        return 0;
}


gnu 风格

int Foo(bool isBar)
{
    if (isBar)
        {
            bar();
            return 1;
        }
    else
        return 0;
}


linux 风格

int Foo(bool isBar)
{
        if (isFoo) {
                bar();
                return 1;
        } else
                return 0;
}


google 风格

int Foo(bool isBar) {
    if (isBar) {
        bar();
        return 1;
    } else
        return 0;
}


参考资料


目录
相关文章
|
4月前
|
JSON JavaScript 前端开发
成功解决:正则表达式在vscode中会自动格式化一部分
这篇文章讨论了在Visual Studio Code中编写正则表达式时遇到的问题,即正则表达式因自动格式化而变形,并提供了使用双反斜杠、确保在字符串中定义正则表达式、检查文件类型等解决方法来避免这一问题。
成功解决:正则表达式在vscode中会自动格式化一部分
|
5月前
webstorm【实用教程】代码自动格式,格式化时清除空行,修改使用代码模板
webstorm【实用教程】代码自动格式,格式化时清除空行,修改使用代码模板
473 2
|
6月前
|
存储 IDE Go
怎样使用gofmt格式化代码
**gofmt**是Go语言官方的代码格式化工具,确保代码遵循统一风格。它能读取标准输入或格式化指定文件及目录中的.go文件。使用`-s`参数可以简化代码,例如移除不必要的类型声明、索引指定和变量赋值。`-w`参数将格式化结果写回源文件。`go fmt`是`gofmt`的简单封装,通常带有`-l -w`参数。在Goland中,可通过设置File Watcher自动调用gofmt进行格式化。
|
JSON 数据格式
ESlint 保存自动格式化代码
第一步:在VScode下载ESlint插件,找到右下角设置图标点击扩展设置。
235 0
Goland 开启文件保存自动进行格式化 的两种方式
Goland 开启文件保存自动进行格式化 的两种方式
Goland 开启文件保存自动进行格式化 的两种方式
|
数据格式 C++ Java
notepad++如何快速格式化代码
notepad++如何快速格式化代码
16453 0
|
人工智能 JavaScript IDE
自动写代码?别闹了!
这几天,GitHub 上有个很火的插件在抖音刷屏了——Copilot。 这个神器有啥用呢?简单来讲,它就是一款由人工智能打造的编程辅助工具。 我们来看看它有啥用。
357 0
GoLand:设置gofmt与goimports,保存时自动格式化代码
GoLand:设置gofmt与goimports,保存时自动格式化代码
1113 0
GoLand:设置gofmt与goimports,保存时自动格式化代码
Geany 代码自动补齐功能设置
Geany 代码自动补齐功能设置
397 0
Geany 代码自动补齐功能设置