astyle是一個(gè)我自己常用的開放源碼工具。它可以方便的將程序代碼格式化成自己想要的樣式而不必人工修改。本來嘛,作為高等生物應(yīng)該優(yōu)先去做一些智慧的事情,而不是把時(shí)間消耗在機(jī)器可以完美完成的事情上。
想要立刻開始?請(qǐng)先去主頁http://sourceforge.net/projects/astyle下載最新版本??梢赃x擇二進(jìn)制版本,也可以下載源碼自行編譯。總之得到可執(zhí)行文件后請(qǐng)將astyle放在Path(C:\Program Files\Microsoft Visual Studio 8\Common7\IDE)中,這樣會(huì)方便很多。
astyle是一個(gè)命令行工具,命令語法很簡(jiǎn)單:
astyle [options] < original > Beautified
astyle [options] Foo.cpp Bar.cpp [...]
例如:
astyle --style=ansi foo.cpp
上面的命令將美化foo.cpp文件,更改其風(fēng)格為ANSI,并將原始文件備份到foo.cpp.orgin。所以,你可以安全的使用該軟件而不必?fù)?dān)心會(huì)將代碼改得無法回頭。
具體的來說,astyle包含了以下幾種預(yù)定義風(fēng)格,只需在參數(shù)中簡(jiǎn)單指定即可使用:
--style=ansi:ANSI 風(fēng)格格式和縮進(jìn)
namespace foospace { int Foo() { if (isBar) { bar(); return 1; } else return 0; } } |
--style=kr :Kernighan&Ritchie 風(fēng)格格式和縮進(jìn)
namespace foospace { int Foo() { if (isBar) { bar(); return 1; } else return 0; } } |
--style=linux :Linux 風(fēng)格格式和縮進(jìn)
namespace foospace { int Foo() { if (isBar) { bar(); return 1; } else return 0; } } |
--style=gnu :GNU 風(fēng)格格式和縮進(jìn)
namespace foospace { int Foo() { if (isBar) { bar(); return 1; } else return 0; } } |
--style=java :Java 風(fēng)格格式和縮進(jìn)
class foospace { int Foo() { if (isBar) { bar(); return 1; } else return 0; } } |
從這里開始介紹astyle的高級(jí)應(yīng)用!這里要介紹的是兩種應(yīng)用情形,一是在Visual Studio中整合,二是批量處理。
先看如何在Visual Studio中整合??磮D說話!
第一步:點(diǎn)擊“工具”菜單
第二步:點(diǎn)擊“外部工具”
第三步:配置并保存
在對(duì)話框中點(diǎn)擊“添加”,如圖填入各項(xiàng)。其中參數(shù)填寫 --style=ansi $(ItemFileName)$(ItemExt)
可以勾選“使用輸出窗口”,這樣將不會(huì)顯示黑色的命令窗口。相關(guān)信息都會(huì)顯示在Visual Studio中。
經(jīng)過上面設(shè)置之后,只需點(diǎn)擊該菜單項(xiàng)就可以將當(dāng)前文檔格式化成ansi風(fēng)格。如果你想要其它風(fēng)格,可以自行設(shè)置參數(shù)。
值得注意的是在低版本的Visual Studio中,默認(rèn)設(shè)置運(yùn)行外部程序不會(huì)保存當(dāng)前文檔。這樣的話如果在未保存的情況下運(yùn)行該命令,未保存部分將會(huì)丟失。這個(gè)可以通過設(shè)置一個(gè)選項(xiàng)來解決。Visual Studio 6.0中:Options -> Editor -> Save Options -> Save before running tools 將該項(xiàng)勾選即可。我已經(jīng)驗(yàn)證,在Visual Studio 2005中不用擔(dān)心這類問題,可以放心使用。但是作為一個(gè)好習(xí)慣,我仍然建議你隨時(shí)保存你的工作,尤其是做這種大幅度改動(dòng)之前,甚至應(yīng)該對(duì)源代碼進(jìn)行Check in操作。不知道Check in是什么?沒關(guān)系,過幾天我還會(huì)寫一篇關(guān)于代碼控制的文章,應(yīng)該可以解決你的疑惑。
1.常用功能
(1) 單個(gè)文件--缺省美化
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) 單個(gè)文件--更改縮進(jìn)2個(gè)空格
astyle --style=ansi --indent=spaces=2 Form1.cs
缺省縮進(jìn)一個(gè)TAB,也可以顯式說明使用Tab,如下:
astyle --style=ansi --indent=tab Form1.cs
(3) 處理多個(gè)文件--有限個(gè)
astyle --style=ansi Form1.cs Form2.cs
(4) 批量處理多個(gè)文件--無限個(gè)
for /R .\ %f in (*.cs) do astyle --style=ansi "%f"
說明:/R表明遍歷一個(gè)目錄樹,后面緊跟的路徑是根,缺省為當(dāng)前目錄。
本例中,根為.\表示當(dāng)前目錄,命令等價(jià)于:
for /R %f in (*.cs) do astyle --style=ansi "%f"
作用是從(目錄樹根)當(dāng)前目錄開始,查找所有java文件,包含子目錄中的文件;然后交給astyle處理。
當(dāng)然,目錄樹根也可以使用絕對(duì)路徑,下面的命令查找C盤所有的java文件并處理。
for /R c:\ %f in (*.cs) do astyle --style=ansi "%f"
2. 其他比較有用的開關(guān):(均在--style之前寫)
(1) -f
在兩行不相關(guān)的代碼之間插入空行,如import和public class之間、public class和成員之間等;
(2) -p
在操作符兩邊插入空格,如=、+、-等。
如:int a=10*60;
處理后變成int a = 10 * 60;
(3) -P
在括號(hào)兩邊插入空格。另,-d只在括號(hào)外面插入空格,-D只在里面插入。
如:MessageBox.Show ("aaa");
處理后變成MessageBox.Show ( "aaa" );
(4) -U
移除括號(hào)兩邊不必要的空格。
如:MessageBox.Show ( "aaa" );
處理后變成MessageBox.Show ("aaa");
(5) -V
將Tab替換為空格。
下面再介紹第二項(xiàng)獨(dú)門絕技:批量格式化!
有時(shí)候你會(huì)有很多文件需要格式化成統(tǒng)一風(fēng)格,難道一個(gè)個(gè)點(diǎn)擊菜單?不!那樣太累了。
在Windows中,我們可以用命令行來解決問題。這里用到一個(gè)超級(jí)命令 for
我來寫個(gè)范例,大家就知道該怎么處理了。
for /R %f in (*.cpp;*.c;*.h) do astyle --style=ansi "%f"
該命令在當(dāng)前目錄中尋找文件名匹配模式 *.cpp;*.c;*.h 的所有文件(不同模式可用英文逗號(hào)隔開),并且對(duì)每個(gè)文件%f執(zhí)行操作:
astyle --style=ansi "%f"
聯(lián)系客服