文档章节

【转】Astyle:代码格式化工具简明指南

木星青龙
 木星青龙
发布于 2012/08/03 09:17
字数 2233
阅读 207
收藏 0
点赞 0
评论 0

Astyle:代码格式化工具简明指南  

2010-12-22 12:58:11|  分类: 开发工具 |  标签: |字号大中小 订阅

astyle是一个我自己常用的开放源码工具。它可以方便的将程序代码格式化成自己想要的样式而不必人工修改。本来嘛,作为高等生物应该优先去做一些智慧的事情,而不是把时间消耗在机器可以完美完成的事情上。

想要立刻开始?请先去主页http://sourceforge.net/projects/astyle下载最新版本。可以选择二进制版本,也可以下载源码自行编译。总之得到可执行文件后请将astyle放在Path(C:\Program Files\Microsoft Visual Studio 8\Common7\IDE)中,这样会方便很多。

astyle是一个命令行工具,命令语法很简单:
          astyle [options] < original > Beautified
          astyle [options] Foo.cpp Bar.cpp  [...]

例如:

          astyle --style=ansi foo.cpp

上面的命令将美化foo.cpp文件,更改其风格为ANSI,并将原始文件备份到foo.cpp.orgin。所以,你可以安全的使用该软件而不必担心会将代码改得无法回头。

具体的来说,astyle包含了以下几种预定义风格,只需在参数中简单指定即可使用:

  --style=ansi:ANSI 风格格式和缩进

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


  --style=kr :Kernighan&Ritchie 风格格式和缩进

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


  --style=linux :Linux 风格格式和缩进

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


  --style=gnu :GNU 风格格式和缩进

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


  --style=java :Java 风格格式和缩进

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

从这里开始介绍astyle的高级应用!这里要介绍的是两种应用情形,一是在Visual Studio中整合,二是批量处理。

先看如何在Visual Studio中整合。看图说话!

第一步:点击“工具”菜单

第二步:点击“外部工具”

第三步:配置并保存

在对话框中点击“添加”,如图填入各项。其中参数填写 --style=ansi $(ItemFileName)$(ItemExt)

可以勾选“使用输出窗口”,这样将不会显示黑色的命令窗口。相关信息都会显示在Visual Studio中。

经过上面设置之后,只需点击该菜单项就可以将当前文档格式化成ansi风格。如果你想要其它风格,可以自行设置参数。

值得注意的是在低版本的Visual Studio中,默认设置运行外部程序不会保存当前文档。这样的话如果在未保存的情况下运行该命令,未保存部分将会丢失。这个可以通过设置一个选项来解决。Visual Studio 6.0中:Options -> Editor -> Save Options -> Save before running tools 将该项勾选即可。我已经验证,在Visual Studio 2005中不用担心这类问题,可以放心使用。但是作为一个好习惯,我仍然建议你随时保存你的工作,尤其是做这种大幅度改动之前,甚至应该对源代码进行Check in操作。不知道Check in是什么?没关系,过几天我还会写一篇关于代码控制的文章,应该可以解决你的疑惑。

1.常用功能
(1) 单个文件--缺省美化
astyle --style=ansi Form1.cs
处理前的代码:
    private void Form1_Load(object sender, EventArgs e)
    {
        int s;
        for (int i=0;i<10;i++){
            for (int j=0;j<10; j++){
                s = s+j+i;}
        }
    }
处理后:
    private void Form1_Load(object sender, EventArgs e)
    {
        int s;
        for (int i=0;i<10;i++)
        {
            for (int j=0;j<10; j++)
            {
                s = s+j+i;
            }
        }
    }

(2) 单个文件--更改缩进2个空格
astyle --style=ansi --indent=spaces=2 Form1.cs
缺省缩进一个TAB,也可以显式说明使用Tab,如下:
astyle --style=ansi --indent=tab Form1.cs

(3) 处理多个文件--有限个
astyle --style=ansi Form1.cs Form2.cs

(4) 批量处理多个文件--无限个
for /R .\ %f in (*.cs) do astyle --style=ansi "%f"
说明:/R表明遍历一个目录树,后面紧跟的路径是根,缺省为当前目录。
本例中,根为.\表示当前目录,命令等价于:
for /R %f in (*.cs) do astyle --style=ansi "%f"
作用是从(目录树根)当前目录开始,查找所有java文件,包含子目录中的文件;然后交给astyle处理。
当然,目录树根也可以使用绝对路径,下面的命令查找C盘所有的java文件并处理。
for /R c:\ %f in (*.cs) do astyle --style=ansi "%f"

2. 其他比较有用的开关:
(1) -f
在两行不相关的代码之间插入空行,如import和public class之间、public class和成员之间等;
(2) -p
在操作符两边插入空格,如=、+、-等。
如:int a=10*60;
处理后变成int a = 10 * 60;
(3) -P
在括号两边插入空格。另,-d只在括号外面插入空格,-D只在里面插入。
如:MessageBox.Show ("aaa");
处理后变成MessageBox.Show ( "aaa" );
(4) -U
移除括号两边不必要的空格。
如:MessageBox.Show ( "aaa" );
处理后变成MessageBox.Show ("aaa");
(5) -V
将Tab替换为空格。 

下面再介绍第二项独门绝技:批量格式化!

有时候你会有很多文件需要格式化成统一风格,难道一个个点击菜单?不!那样太累了。

在Windows中,我们可以用命令行来解决问题。这里用到一个超级命令 for

我来写个范例,大家就知道该怎么处理了。

      for /R %f in (*.cpp;*.c;*.h) do astyle --style=ansi "%f"

该命令在当前目录中寻找文件名匹配模式 *.cpp;*.c;*.h 的所有文件(不同模式可用英文逗号隔开),并且对每个文件%f执行操作:

       astyle --style=ansi "%f"

好了,本教程可以结束了。希望对你有所帮助。

下面是标准的程序文档,如果你想了解更多用法,可以一读;如果你只是像我一样日常使用该工具,就可以不看了。

Artistic Style 1.15.3   (http://www.bigfoot.com/~davidsont/astyle)
                       (created by Tal Davidson, 
davidsont@bigfoot.com)

Modified edition by Qiongzhu Wan, 2004.09

Usage  :  astyle [options] < original > Beautified
          astyle [options] Foo.cpp Bar.cpp  [...]

When indenting a specific file, the resulting indented file RETAINS the
original file-name. The original pre-indented file is renamed, with a
suffix of ".orig" added to the original filename.

By default, astyle is set up to indent C/C++/C# files, with 4 spaces per
indent, a maximal indentation of 40 spaces inside continuous statements,
and NO formatting.

Option's Format:
----------------
    Long options (starting with '--') must be written one at a time.
    Short options (starting with '-') may be appended together.
    Thus, -bps4 is the same as -b -p -s4.

Predefined Styling options:
--------------------
    --style=ansi
    ANSI style formatting/indenting.

    --style=kr
    Kernighan&Ritchie style formatting/indenting.

    --style=gnu
    GNU style formatting/indenting.

    --style=java
    Java mode, with standard java style formatting/indenting.

    --style=linux
    Linux mode (i.e. 8 spaces per indent, break definition-block
    brackets but attach command-block brackets.

Indentation options:
--------------------
    -c   or   --mode=c
    Indent a C, C++ or C# source file (default)

    -j   or   --mode=java
    Indent a Java(TM) source file

    -s   or   -s#   or   --indent=spaces=#
    Indent using # spaces per indent. Not specifying #
    will result in a default of 4 spacec per indent.

    -t   or   -t#   or   --indent=tab=#
    Indent using tab characters, assuming that each
    tab is # spaces long. Not specifying # will result
    in a default assumption of 4 spaces per tab.

    -T#   or   --force-indent=tab=#    Indent using tab characters, assuming tha
t each
    tab is # spaces long. Force tabs to be used in areas
    Astyle would prefer to use spaces.

    -C   or   --indent-classes
    Indent 'class' blocks, so that the inner 'public:',
    'protected:' and 'private: headers are indented in
    relation to the class block.

    -S   or   --indent-switches
    Indent 'switch' blocks, so that the inner 'case XXX:'
    headers are indented in relation to the switch block.

    -K   or   --indent-cases
    Indent 'case XXX:' lines, so that they are flush with
    their bodies..

    -N   or   --indent-namespaces
    Indent the contents of namespace blocks.

    -B   or   --indent-brackets
    Add extra indentation to '{' and '}' block brackets.

    -G   or   --indent-blocks
    Add extra indentation entire blocks (including brackets).

    -L   or   --indent-labels
    Indent labels so that they appear one indent less than
    the current indentation level, rather than being
    flushed completely to the left (which is the default).

    -m#  or  --min-conditional-indent=#
    Indent a minimal # spaces in a continuous conditional
    belonging to a conditional header.

    -M#  or  --max-instatement-indent=#
    Indent a maximal # spaces in a continuous statement,
    relatively to the previous line.

    -E  or  --fill-empty-lines
    Fill empty lines with the white space of their
    previous lines.

    --indent-preprocessor
    Indent multi-line #define statements

Formatting options:
-------------------
    -b  or  --brackets=break
    Break brackets from pre-block code (i.e. ANSI C/C++ style).

    -a  or  --brackets=attach
    Attach brackets to pre-block code (i.e. Java/K&R style).

    -l  or  --brackets=linux
    Break definition-block brackets and attach command-block
    brackets.

    --brackets=break-closing-headers
    Break brackets before closing headers (e.g. 'else', 'catch', ..).
    Should be appended to --brackets=attach or --brackets=linux.

    -o   or  --one-line=keep-statements
    Don't break lines containing multiple statements into
    multiple single-statement lines.

    -O   or  --one-line=keep-blocks
    Don't break blocks residing completely on one line

    -p   or  --pad=oper
    Insert space paddings around operators only.

    --pad=paren
    Insert space paddings around parenthesies only.

    -P   or  --pad=all
    Insert space paddings around operators AND parenthesies.

    --convert-tabs
    Convert tabs to spaces.

    --break-blocks
    Insert empty lines around unrelated blocks, labels, classes, ...

    --break-blocks=all
    Like --break-blocks, except also insert empty lines
    around closing headers (e.g. 'else', 'catch', ...).

    --break-elseifs
    Break 'else if()' statements into two different lines.

Other options:
-------------
    --suffix=####
    Append the suffix #### instead of '.orig' to original filename.

    -X   or  --errors-to-standard-output
    Print errors and help information to standard-output rather than
    to standard-error.

    -v   or   --version
    Print version number

    -h   or   -?   or   --help
    Print this help message

Default options file:
---------------------
    Artistic Style looks for a default options file in the
    following order:
    1. The contents of the ARTISTIC_STYLE_OPTIONS environment
       variable if it exists.
    2. The file called .astylerc in the directory pointed to by the
       HOME environment variable ( i.e. $HOME/.astylerc ).
    3. The file called .astylerc in the directory pointed to by the
       HOMEPATH environment variable ( i.e. %HOMEPATH%\.astylerc ).
    If a default options file is found, the options in this file
    will be parsed BEFORE the command-line options.
    Options within the default option file may be written without
    the preliminary '-' or '--'.

 

本文转载自:http://babybandf.blog.163.com/blog/static/61993532010112205811797/

共有 人打赏支持
木星青龙
粉丝 6
博文 28
码字总数 3050
作品 0
长沙
架构师
qiuchangjie/CodeFormatter

#CodeFormatter 插件作用 个人因为无法习惯各种代码风格,因此写了个插件格式化vim当前编辑的代码文件(当前转换的代码风格是个人习惯的风格,如不习惯可自行修改,参照astyle工具的参数说明...

qiuchangjie ⋅ 2016/04/08 ⋅ 0

如何自动调整代码格式 - vim /Visual Studio/ Source Insight...

ArtisticStyle----很好用的C/C++样式格式化工具(支持VC6) 下载地址: http://srgb.googlecode.com/files/AStyle2.02windows.7z 把astyle.exe 复制到 C:WINDOWS 目录里,省的指定路径 VC6++ ...

AlphaJay ⋅ 2012/06/21 ⋅ 0

astyle使用基础教程

astyle是一个我自己常用的开放源码工具。它可以方便的将程序代码格式化成自己想要的样式而不必人工修改。本来嘛,作为高等生物应该优先去做一些智慧的事情,而不是把时间消耗在机器可以完美完...

mickelfeng ⋅ 2013/03/14 ⋅ 1

sublime Text 3 做c编辑器

基础设置 首先是常用插件安装: 然后如果点开中文名称的文件,标签上显示中文名称乱码的,需要如此设置 然后对中文支持的需要安装 ConvertToUTF8 然后是基础的配置,点开 Preferences -> Setting...

新年 ⋅ 2016/03/16 ⋅ 0

【转】SourceInsight 中集成Artistic Style 格式化代码

下载地址 http://sourceforge.net/project/showfiles.php?groupid=2319l Windows平台下也有好多人都喜欢用SourceInsight编辑C/C++程序, 但是SourceInsight没有提供对代码格式化的功能, 如果...

木星青龙 ⋅ 2012/08/03 ⋅ 0

EditPlus 添加格式化java代码功能

下载AStyle:http://sourceforge.net/projects/astyle/ 在Editplus 配置用户工具: 实例: astyle --style=java d:srcTest.java 语法: astyle [options] SourceFile1 SourceFile2 SourceFil......

LiShixi ⋅ 2012/06/05 ⋅ 0

在EditPlus中使用代码格式化插件

最近在用EditPlus学习java,本来是想学习java代码的书写格式,比如for关键字和其后的左小括号之间的空格问题,但是我发现这不是十分必要,因为EditPlus已经有了格式化代码插件。 1、下载Epi...

天蚕宝衣 ⋅ 2016/04/14 ⋅ 0

语法着色工具--Highlight

Highlight 用于将源码输出为语法高亮的格式文件: 支持输出为HTML, XHTML, RTF, ODT, TeX, LaTeX, SVG 和 BBCode格式 支持180种编程语言 包含80种着色风格 语法定义方式为正则表达式或文本列...

匿名 ⋅ 2008/09/19 ⋅ 0

SourceFormatX 2.56 代码整理软件 求搞掂?

因公司现在的整个源代码很混乱,自己想把它整理好,以便日后的维护和修改。尝试了很多种代码格式化的软件(phpcb,astyle),只有这个才比较合适,但是不能保存,也不能格式化整个网站目录。...

wankaiming ⋅ 2011/06/28 ⋅ 3

Qt Creator 代码格式美化插件--Qtc_AStyle

Qtc_AStyle是一个Qt Creator IDE的插件,使用了Artistic Style V2.04的静态库,IDE加载这个插件后,在选项中可以很直观地定义自己的代码风格,然后一键对整个项目所有的源文件进行代码格式美...

zlqzlq ⋅ 2017/05/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 30分钟前 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

vim编辑模式、vim命令模式、vim实践

vim编辑模式 编辑模式用来输入或修改文本内容,编辑模式除了Esc外其他键几乎都是输入 如何进入编辑模式 一般模式输入以下按键,均可进入编辑模式,左下角提示 insert(中文为插入) 字样 i ...

蛋黄Yolks ⋅ 昨天 ⋅ 0

大数据入门基础:SSH介绍

什么是ssh 简单说,SSH是一种网络协议,用于计算机之间的加密登录。 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码...

董黎明 ⋅ 昨天 ⋅ 0

web3j教程

web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 汇智网最新发布的web3j教程,详细讲解...

汇智网教程 ⋅ 昨天 ⋅ 0

谷歌:安全问题机制并不如你想象中安全

腾讯科技讯 5月25日,如今的你或许已经对许多网站所使用的“安全问题机制”习以为常了,但你真的认为包括“你第一个宠物的名字是什么?”这些问题能够保障你的帐户安全吗? 根据谷歌(微博)安...

问题终结者 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部