astyle是一个开源工具,它可以方便的将代码格式化成自己想要的样式而不必人工修改。可以到网站(
)上下载源码自己编译,也可以使用指令(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;}
然后在终端下输入一下指令:
效果如下:
- #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)
或者
- 1,40!astyle --mode=c --style=ansi (ansi C++ style, filter only lines 1-40)
为方便使用,可以把它写成一个脚本,代码如下:
- #! /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 '--'.
阅读(10275) | 评论(0) | 转发(1) |