astyle使用基礎教程

astyle使用基礎教程

轉自:html

http://babybandf.blog.163.com/blog/static/61993532010112205811797/java


astyle是一個我本身經常使用的開放源碼工具。它能夠方便的將程序代碼格式化成本身想要的樣式而沒必要人工修改。原本嘛,做爲高等生物應該優先去作一些智慧的事情,而不是把時間消耗在機器能夠完美完成的事情上。linux

想要馬上開始?請先去主頁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  [...]
app

例如:less

          astyle --style=ansi foo.cppide

上面的命令將美化foo.cpp文件,更改其風格爲ANSI,並將原始文件備份到foo.cpp.orgin。因此,你能夠安全的使用該軟件而沒必要擔憂會將代碼改得沒法回頭。工具

具體的來講,astyle包含了如下幾種預約義風格,只需在參數中簡單指定便可使用:post

  --style=ansi:ANSI 風格格式和縮進this

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 '--'.

相關文章
相關標籤/搜索