转自<http://blog.chinaunix.net/uid-25885064-id-3363736.html>
astyle是一个开源工具,它可以方便的将代码格式化成自己想要的样式而不必人工修改。可以到网站(http://astyle.sourceforge.net/)上下载源码自己编译,也可以使用指令(apt-get install astyle)安装。
下面介绍一下astyle的简单使用。例如有以下的源码:
#include <stdio.h> int main() {int i;printf("Just a test!\n");for(i=0;i<10;++i)printf("%d\n",i);}return 0;}
然后在终端下输入一下指令:
- astyle test1.c
效果如下:
#include <stdio.h> int main() { int i; printf("Just a test!\n"); for(i=0; i<10; ++i) { printf("%d\n",i); } return 0; }
当然也可以加上一些选项,例如“astyle --style=bsd test1.c”,“ astyle --style=gnu test1.c”等等。
在vim中的命令模式下,可以使用下面的某一种方式来格式化代码。
%!astyle (simple case - astyle default mode is C/C++)
或者
%!astyle --mode=c --style=ansi -s2 (ansi C++ style, use two spaces per indent level)
或者
%!astyle --mode=c --style=ansi -s2 (ansi C++ style, use two spaces per indent level)
为方便使用,可以把它写成一个脚本,代码如下:
#! /bin/bash for f in $(find . -name '*.c' -or -name '*.cpp' -type f) do astyle $f done
在格式化完代码后,会生成一个后缀为orig的文件,将脚本更改如下:
#! /bin/bash for f in $(find . -name '*.c' -or -name '*.cpp' -or -name '*.h' -type f) do astyle $f done # after formate the code,we need to rm '*.orig' files for f in $(find . -name '*.orig' -type f) do rm $f done
astyle其使用说明如下:
Usage : astyle [options] Source1.cpp Source2.cpp [...] astyle [options] < Original > Beautified 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. Wildcards (* and ?) may be used in the filename. A 'recursive' option can process directories recursively. By default, astyle is set up to indent C/C++/C#/Java files, with four spaces per indent, a maximal indentation of 40 spaces inside continuous statements, a minimum indentation of eight spaces inside conditional statements, and NO formatting options. 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 Style Options: ------------------------- --style=allman OR --style=ansi OR --style=bsd OR -A1 Allman style formatting/indenting. Broken brackets. --style=java OR -A2 Java style formatting/indenting. Attached brackets. --style=k&r OR --style=k/r OR -A3 Kernighan & Ritchie style formatting/indenting. Linux brackets. --style=stroustrup OR -A4 Stroustrup style formatting/indenting. Stroustrup brackets. --style=whitesmith OR -A5 Whitesmith style formatting/indenting. Broken, indented brackets. Indented class blocks and switch blocks. --style=banner OR -A6 Banner style formatting/indenting. Attached, indented brackets. Indented class blocks and switch blocks. --style=gnu OR -A7 GNU style formatting/indenting. Broken brackets, indented blocks, indent is 2 spaces. --style=linux OR -A8 GNU style formatting/indenting. Linux brackets, indent is 8 spaces. --style=horstmann OR -A9 Horstmann style formatting/indenting. Horstmann brackets, indented switches, indent is 3 spaces. --style=1tbs OR --style=otbs OR -A10 One True Brace Style formatting/indenting. Linux brackets, add brackets to all conditionals. Tab and Bracket Options: ------------------------ default indent option If no indentation option is set, the default option of 4 spaces will be used. --indent=spaces=# OR -s# Indent using # spaces per indent. Not specifying # will result in a default of 4 spaces per indent. --indent=tab OR --indent=tab=# OR -t OR -t# Indent using tab characters, assuming that each tab is # spaces long. Not specifying # will result in a default assumption of 4 spaces per tab. --indent=force-tab=# OR -T# Indent using tab characters, assuming that each tab is # spaces long. Force tabs to be used in areas Astyle would prefer to use spaces. default brackets option If no brackets option is set, the brackets will not be changed. --brackets=break OR -b Break brackets from pre-block code (i.e. ANSI C/C++ style). --brackets=attach OR -a Attach brackets to pre-block code (i.e. Java/K&R style). --brackets=linux OR -l Break definition-block brackets and attach command-block brackets. --brackets=stroustrup OR -u Attach all brackets except function definition brackets. --brackets=horstmann OR -g Break brackets from pre-block code, but allow following run-in statements on the same line as an opening bracket. Indentation options: -------------------- --indent-classes OR -C Indent 'class' blocks, so that the inner 'public:', 'protected:' and 'private: headers are indented in relation to the class block. --indent-switches OR -S Indent 'switch' blocks, so that the inner 'case XXX:' headers are indented in relation to the switch block. --indent-cases OR -K Indent case blocks from the 'case XXX:' headers. Case statements not enclosed in blocks are NOT indented. --indent-brackets OR -B Add extra indentation to '{' and '}' block brackets. --indent-blocks OR -G Add extra indentation entire blocks (including brackets). --indent-namespaces OR -N Indent the contents of namespace blocks. --indent-labels OR -L 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). --indent-preprocessor OR -w Indent multi-line #define statements. --indent-col1-comments OR -Y Indent line comments that start in column one. --max-instatement-indent=# OR -M# Indent a maximal # spaces in a continuous statement, relative to the previous line. --min-conditional-indent=# OR -m# Indent a minimal # spaces in a continuous conditional belonging to a conditional header. Padding options: -------------------- --break-blocks OR -f Insert empty lines around unrelated blocks, labels, classes, ... --break-blocks=all OR -F Like --break-blocks, except also insert empty lines around closing headers (e.g. 'else', 'catch', ...). --pad-oper OR -p Insert space paddings around operators. --pad-paren OR -P Insert space padding around parenthesis on both the outside and the inside. --pad-paren-out OR -d Insert space padding around parenthesis on the outside only. --pad-paren-in OR -D Insert space padding around parenthesis on the inside only. --pad-header OR -H Insert space padding after paren headers (e.g. 'if', 'for'...). --unpad-paren OR -U Remove unnecessary space padding around parenthesis. This can be used in combination with the 'pad' options above. --delete-empty-lines OR -x Delete empty lines within a function or method. It will NOT delete lines added by the break-blocks options. --fill-empty-lines OR -E Fill empty lines with the white space of their previous lines. Formatting options: ------------------- --break-closing-brackets OR -y Break brackets before closing headers (e.g. 'else', 'catch', ...). Use with --brackets=attach, --brackets=linux, or --brackets=stroustrup. --break-elseifs OR -e Break 'else if()' statements into two different lines. --add-brackets OR -j Add brackets to unbracketed one line conditional statements. --add-one-line-brackets OR -J Add one line brackets to unbracketed one line conditional statements. --keep-one-line-blocks OR -O Don't break blocks residing completely on one line. --keep-one-line-statements OR -o Don't break lines containing multiple statements into multiple single-statement lines. --convert-tabs OR -c Convert tabs to the appropriate number of spaces. --align-pointer=type OR -k1 --align-pointer=middle OR -k2 --align-pointer=name OR -k3 Attach a pointer or reference operator (* or &) to either the operator type (left), middle, or operator name (right). --mode=c Indent a C or C++ source file (this is the default). --mode=java Indent a Java source file. --mode=cs Indent a C# source file. Other options: -------------- --suffix=#### Append the suffix #### instead of '.orig' to original filename. --suffix=none OR -n Do not retain a backup of the original file. --options=#### Specify an options file #### to read and use. --options=none Disable the default options file. Only the command-line parameters will be used. --recursive OR -r OR -R Process subdirectories recursively. --exclude=#### Specify a file or directory #### to be excluded from processing. --errors-to-stdout OR -X Print errors and help information to standard-output rather than to standard-error. --preserve-date OR -Z The date and time modified will not be changed in the formatted file. --verbose OR -v Verbose mode. Extra informational messages will be displayed. --formatted OR -Q Formatted display mode. Display only the files that have been formatted. --quiet OR -q Quiet mode. Suppress all output except error messages. --lineend=windows OR -z1 --lineend=linux OR -z2 --lineend=macold OR -z3 Force use of the specified line end style. Valid options are windows (CRLF), linux (LF), and macold (CR). --version OR -V Print version number. --help OR -h OR -? 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 USERPROFILE environment variable ( i.e. %USERPROFILE%\astylerc ). If a default options file is found, the options in this file will be parsed BEFORE the command-line options. Long options within the default option file may be written without the preliminary '--'.