AStyle2.02在VS2008下的使用

      在共同探討C++代碼編寫風格的帖子裏,看到有個提到使用AStyle工具可以自動格式化代碼風格,想過我用ctrl+K,ctrl+F的痛苦日子,我決定嘗試一個這個軟件。

      軟件下載到了,但如何使用與配置,還得有人教。上網找了一下,找到http://blog.csdn.net/akof1314/article/details/6453666這篇文章寫得不錯,引用如下。


       AStyle(全稱Artistic Style)是一個C、C++、C#和Java源代碼縮進、格式化和美化工具。官方下載是命令行版程序,可以整合到開發IDE環境中去使用,甚至也可以整合到Notepad++之類的編輯器中。

官方地址:http://astyle.sourceforge.net/
本地下載:http://download.csdn.net/source/3323725

     在這裏介紹AStyle整合到VS2008的方法,以及如何使用。
1.首先下載AStyle,將其bin文件夾下的"AStyle.exe"解壓到"D:/Program Files/Microsoft Visual Studio 9.0/Common7/Tools"文件夾下,具體路徑根據所安裝的VS路徑進行更改,這是專門放置Visual Studio外部工具的文件夾;
2.打開Visual Studio 2008,在菜單欄→"工具"→"外部工具",點擊"添加",在下面的編輯框裏分別填入信息:

標題:AStyle格式化工具
命令:D:/Program Files/Microsoft Visual Studio 9.0/Common7/Tools/AStyle.exe
參數:--style=linux --suffix=none  -M -p -H -U -k1 $(ItemFileName)$(ItemExt)


linux風格,不保留.orig原始文件 
-M是縮進函數多個參數放在不同行的情況
-p是操作符左右留空格(++,--這樣的就不留了);
-H是'if', 'for', 'while'等關鍵字右邊留空格;
-U是移除括號裏外的空格;
-k1是*和&在表示指針和引用類型時,和類型名稱並緊,和變量名之間留空格。
後面二個就是VS的環境變量了,分別表示路徑名、文件名和文件擴展名。合起來就是要格式化的文件的絕對路徑名。


初始化目錄:$(ItemDir)
√使用輸出窗口


****參數說明:

(1) -f
在兩行不相關的代碼之間插入空行,如import和public class之間、public class和成員之間等;
(2) -p
在操作符兩邊插入空格,如=、+、-等。
如:int a=10*60;
處理後變成int a = 10 * 60;
(3) -P
在括號兩邊插入空格。另,-d只在括號外面插入空格,-D只在裏面插入。
如:System.out.println(1);
處理後變成System.out.println( 1 );
(4) -U
移除括號兩邊不必要的空格。
如:System.out.println( 1 );
處理後變成System.out.println(1);
(5) -V
將Tab替換爲空格。

(6)-N

本條主要針對namespaces,如果沒有此參數,效果如下:

namespace foospace
{
class Foo
{
    public:
        Foo();
        virtual ~Foo();
};
}
有此參數就會變成這樣:

namespace foospace
{
    class Foo
    {
        public:
            Foo();
            virtual ~Foo();
    };
}

(7) -n

不生成備份文件,即默認的 .orig文件。


3.就可以在"工具"菜單欄下看到"AStyle格式化工具"選項了,要格式化文檔前,先保存文檔再調用"AStyle格式化工具"選項,這時,會彈出"是否要重新加載它"的詢問框,可在"工具"→"選項"→"環境"→"文檔"→"自動加載更改"打鉤。

4.要爲"AStyle格式化工具"選項設置快捷鍵的話,在"工具"菜單上選擇"選項",從"環境"頁中選擇"鍵盤",在"顯示命令包含"列表中鍵入"工具",在"命令名"列表中滾動到相應的"外部命令 n"項。在這裏我是第9個外部命令項,所以找到"工具.外部命令9",在"按快捷鍵"處,鍵入要設置的快捷鍵,點擊"分配"。如下圖所示:

AStyle參數如下:
①Ansi/Allman/Bsd風格(格式縮進從下一行開始括號)

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;  
}  

③Kernighan_Ritchie風格(格式縮進使用Linux方式括號)

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

④Stroustrup風格(格式縮進使用stroustrup方式括號,縮進使用5個空格)

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

⑤Whitesmith風格(格式縮進使用下一行且縮進的括號)

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

⑥Banner風格(格式縮進使用直接緊接和縮進的括號)

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風格(格式縮進使用Linux方式括號,語句塊裏面縮進8個空格)

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

⑨Horstmann風格(格式縮進使用horstman方式,括號緊接語句塊)

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

⑩1tbs/otbs風格(格式縮進使用Linux方式括號,自動補全單行語句塊括號)

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

⑾pico風格

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

⑿lisp/python風格

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

也可以自定義格式化參數:

        ①製表和括號選項

參數命令 參數說明
default indent option 默認4個空格
--indent=spaces / --indent=spaces=# / -s# 指定#個空格,#在1~20之間
--indent=tab / --indent=tab=# / -t# 使用製表符,指定#個空格(1~20)
--indent=force-tab / --indent=force-tab=# / -T#  強制使用製表符,指定#個空格,#在1~20之間
default brackets option 默認不改變括號
--brackets=break / -b 括號改爲下行( e.g. ANSI C / C++ style )
--brackets=attach / -a 括號在語句後( e.g. Java / K&R style )
--brackets=linux / -l 括號如linux風格
--brackets=stroustrup / -u 括號如stroustrup風格
--brackets=horstmann / -g 括號如horstmann 風格

      ②縮進選項

參數命令 參數說明
--indent-classes / -C 縮進class和struct塊後面的public等
--indent-switches / -S 縮進switch塊後面的case塊
--indent-cases / -K 縮進case塊後面的括號
--indent-brackets / -B 括號縮進
--indent-blocks / -G 括號縮進,函數縮進
--indent-namespaces / -N 命名空間後縮進
--indent-labels / -L 額外的標籤縮進
--indent-preprocessor / -w 多行反斜槓定義縮進
--indent-col1-comments / -Y 允許註釋跟隨代碼一起縮進
--max-instatement-indent=# / -M# 在連續聲明中縮進最大#個空格(#小於80,默認爲40)
--min-conditional-indent=# / -m# 在多行中設置最小縮進(#小於40,默認爲當前兩倍縮進)

      ③填充選項

參數命令 參數說明
--break-blocks / -f 在循環語句前後加空行
--break-blocks=all / -F 在循環語句前後、else、catch前加空行
--pad-oper / -p 運算符前後加空格
--pad-paren / -P  在括號內外都加上空格
--pad-paren-out / -d  在括號外加上空格
--pad-paren-in / -D  在括號內加上空格
--pad-header / -H  只在括弧頭部添加一個空格
--unpad-paren / -U  移除括號內外的空格
--delete-empty-lines / -x 刪除函數方法裏多餘的空行
--fill-empty-lines / -E  以空格對齊填充前一行空行

      ④格式化選項

參數命令 參數說明
--break-closing-brackets / -y  讓else語句塊下起一行
--break-elseifs / -e 讓else if 語句拆開縮進
--add-brackets / -j 自動補充括號,默認在條件語句後緊接括號
--add-one-line-brackets / -J 自動補充括號,並且保持括號與語句在一行
--keep-one-line-statements / -o  維持一行裏的多條語句不變
--keep-one-line-blocks / -O 不破壞一行裏面的塊
--convert-tabs / -c 轉換TAB 爲空格
--align-pointer=type / -k1
--align-pointer=middle / -k2 
--align-pointer=name / -k3
使指針或者引用符靠近變量類型
使指針或者引用符在變量類型和變量名稱中間
使指針或者引用符靠近變量名稱
--mode=c
--mode=cs
--mode=java
指定爲C/C++代碼格式化
指定爲C#代碼格式化
指定爲JAVA 代碼格式化
參數命令樣式,請參考Artistic Style 說明文檔:http://astyle.sourceforge.net/astyle.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章