用source insight 編輯代碼時(shí),苦于source insight沒(méi)有集成的代碼格式化工具, GNU的astyle是一個(gè)免費(fèi)的代碼格式化工具,能夠整理符合c/c++規(guī)范。
目前創(chuàng)新互聯(lián)建站已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、浦北網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
我們可以將astyle.exe外掛到SourceInsight中。詳細(xì)步驟如下:
1:從http //astyle sourceforge net上下載AStyle_2.01_windows.zip (開(kāi)放源碼,可以仔細(xì)閱讀);
2:解壓縮后將bin文件夾下的astyle.exe放到source insight目錄下(自己可以放在任意位置)
在SourceInsight菜單欄里,Options--Custom Commands界面上選擇:Add,在彈出對(duì)話框?qū)懭?Astyle.
3:在run中添加astyle.exe --style=ansi %f,其中,如果astyle.exe所在路徑中有空格,必須用""括起來(lái),參數(shù)--style=ansi 代表ansi C 格式(如果你需要格式化java代碼,這個(gè)地方改為:--style=java),"%f"是指作用于當(dāng)前文件,這個(gè)必須的.其它命令參數(shù)可以參考astyle的幫助參數(shù)可以查看網(wǎng)頁(yè)http //astyle sourceforge net/astyle.html
4:此外,在此界面上還可以為這個(gè)命令設(shè)置快捷鍵,點(diǎn)擊"keys",添加你覺(jué)得方便的按鈕;
5:在SourceInsight菜單欄里,Options--Menu Assignments界面上,將這個(gè)命令名稱(chēng)為Astyle添加到某工具欄下,我是依然放在了view下,在左面的Command列表里找到我們剛才添加的"Astyle",在右面的Menu中選擇你要加到那個(gè)菜單下,這里我加到"view"下,可以在"Menu Contents"選擇適當(dāng)位置,點(diǎn)擊"insert"即可。
1. 格式化從根開(kāi)始的整個(gè)項(xiàng)目
AStyle.exe -A1 -R ./*.c ./*.h -bt4 -Sw -fpxHU -Jk3 -n %f
參數(shù) 意義
Predefined Style Options
-A1 代表 --style = ansi or allman模式
Tab and Bracket options
-b 代表 語(yǔ)句塊之前加上空格
-t4 代表 each tab as 4 spaces
Indentation options
-S 代表 switch開(kāi)關(guān)語(yǔ)句,以便于使case x: 對(duì)自動(dòng)對(duì)齊
-w 代表 用“/”對(duì)齊多行參數(shù)
Padding options
-f 代表 不相關(guān)的代碼之間加空行
-p 代表 雙目運(yùn)算符前后加上空格,如:+ - * /
-x 代表 刪除相關(guān)語(yǔ)句之是的空行. 如:if, else語(yǔ)句間的空行
-H 代表 在if, for, while關(guān)鍵字與括號(hào)()之間加上空格
-U 代表 移除括號(hào)兩邊不必要的空格
Formatting options
-J 代表 為單行語(yǔ)句加上{}
-k3 代表 指針及引用(*, )符號(hào),挨著變量名
Other option
-n 代表 不生成備份。默認(rèn)生成 .orig文件
-R 代表 目錄遞歸
注:
格式化從根開(kāi)始的整個(gè)項(xiàng)目,指的是把整個(gè)項(xiàng)目里的所有.c .h文件都格式化。打開(kāi)工程目錄,插件會(huì)自動(dòng)識(shí)別出項(xiàng)目的根目錄的。格式化后,這個(gè)項(xiàng)目就會(huì)全部更改。而且在格式化的過(guò)程中,會(huì)很消耗時(shí)間。
造成的后果:在進(jìn)行SVN提交時(shí),由于先前的SVN代碼與此不同,會(huì)進(jìn)行大面積的更改。如果修改了格式化選項(xiàng),還會(huì)造成代碼的重新提交。如果大量文件產(chǎn)生格式問(wèn)題,會(huì)把實(shí)際修改的內(nèi)容掩蓋掉,在回溯記錄進(jìn)行問(wèn)題確認(rèn)時(shí),會(huì)產(chǎn)生麻煩。容易忽略了主要問(wèn)題。
建議:盡量少用此選項(xiàng)。如果為了使用整個(gè)項(xiàng)目更規(guī)范,可以使用此選項(xiàng)。提交單個(gè)文件時(shí)最好不要使用此選項(xiàng)。
2. 格式化當(dāng)前目錄下的.c文件
AStyle.exe -A1 -R ./test/*.c -bt4 -Sw -fpxHU -Jk3 -n %f
參數(shù)意義從略,看上面.
-R 后面添加所修改工程的路徑,及文件名,就可以執(zhí)行只格式化該目錄下的.c文件。路徑中的是用“/” or “/”都可以錄找到路徑。
建議:在進(jìn)行工程項(xiàng)目部分模塊開(kāi)發(fā)時(shí),如果為了使這部分項(xiàng)目模塊更規(guī)范,可以使用此選項(xiàng)。對(duì)于頻繁修改少量多個(gè)文件??梢允褂么诉x項(xiàng),以實(shí)現(xiàn)批處理文件的功能。
3. 格式化單個(gè)文件
AStyle.exe -A1 -bt4 -Sw -fpxHU -Jk3 -n %f
參數(shù)從略,看上面
只進(jìn)行當(dāng)前修改文件的格式化處理。只針對(duì)單個(gè)文件起作用。這樣很容易使所寫(xiě)文件更加的規(guī)范。在編寫(xiě)代碼過(guò)程中,可以省去很多調(diào)整代碼結(jié)構(gòu)的時(shí)間,是最常用的選項(xiàng)。
建議:在平時(shí)編寫(xiě)代碼時(shí),盡量使用此選項(xiàng)。只對(duì)單個(gè)文件進(jìn)行處理,不會(huì)影響其它文件。
在SVN進(jìn)行提交時(shí),影響最小。
下面是各選項(xiàng)的效果,如果個(gè)人有需要,可以按其效果進(jìn)行更改參數(shù),可能會(huì)造成多人編寫(xiě)代碼的樣式不同。
--recursive / -r / -R
在每個(gè)目錄下執(zhí)行命令。可以處理所有子目錄下的文件。當(dāng)用此選項(xiàng)時(shí),文件名應(yīng)當(dāng)包含通配符,應(yīng)當(dāng)指名路徑,名稱(chēng)。以便shell會(huì)執(zhí)行。 e.g. "$HOME/src/*.cpp"
--brackets=break / -b
void Foo(bool isFoo)
{
if (isFoo)
{
bar();
}
else
{
anotherBar();
}
}
--indent=tab / --indent=tab=# / -t / -t#
對(duì)齊使用tab字符。每個(gè)tab 代表 # 個(gè)spaces ( e.g. -t6 / --indent=tab=6) #必須在2-20之間, 如果不設(shè)置,就當(dāng)作4個(gè)spaces.
--indent-switches / -S
switch開(kāi)關(guān)語(yǔ)句,以便于使case x: 對(duì)自動(dòng)對(duì)齊。
switch (foo)
{
case 1:
a += 1;
break;
case 2:
{
a += 2;
break;
}
}
becomes:
switch (foo)
{
case 1:
a += 1;
break;
case 2:
{
a += 2;
break;
}
}
--indent-preprocessor / -w
用“/”對(duì)齊多行參數(shù)
#define Is_Bar(arg,a,b) /
(Is_Foo((arg), (a)) /
|| Is_Foo((arg), (b)))
becomes:
#define Is_Bar(arg,a,b) /
(Is_Foo((arg), (a)) /
|| Is_Foo((arg), (b)))
--break-blocks / -f
在關(guān)鍵字if, for, while與()之間填充空格,在不相關(guān)代碼之間加上空行
isFoo = true;
if (isFoo) {
bar();
} else {
anotherBar();
}
isBar = false;
becomes:
isFoo = true;
if (isFoo) {
bar();
} else {
anotherBar();
}
isBar = false;
--pad-oper / -p
在各雙目運(yùn)算符的前后分別加上空格,行末會(huì)保持原樣。
if (foo==2)
a=bar((b-c)*a,d--);
becomes:
if (foo == 2)
a = bar((b - c) * a, d--);
--delete-empty-lines / -x
刪除函數(shù)里邊的空行。函數(shù)外面的空行不會(huì)被刪除。
void Foo()
{
foo1 = 1;
foo2 = 2;
}
becomes:
void Foo()
{
foo1 = 1;
foo2 = 2;
}
--pad-header / -H
在關(guān)鍵字 ‘if’,‘for’, ‘while’..與括號(hào)之間填充空格。任何行注釋的末尾都會(huì)保留原始列。
if(isFoo(a, b))
bar(a, b);
becomes:
if (isFoo(a, b))
bar(a, b);
--unpad-paren / -U
移除括號(hào)里邊和外邊的的無(wú)用空間
if ( isFoo( a, b ) )
bar ( a, b );
becomes (with no padding option requested):
if(isFoo(a, b))
bar(a, b);
--add-one-line-brackets / -J
為 ‘if’, ‘for’, ‘while’里的單行語(yǔ)句加上{}。這條語(yǔ)句只能和{}在同一行。如果相變成不同行,需要手動(dòng)修改。
if (isFoo)
isFoo = false;
becomes:
if (isFoo)
{ isFoo = false; }
--align-pointer=type / -k1
--align-pointer=middle / -k2
--align-pointer=name / -k3
對(duì)齊指針,引用(* or )的標(biāo)號(hào)位置,使其位于變量類(lèi)型一側(cè)或變量名一側(cè),也可以處在類(lèi)型與名稱(chēng)之間。
char *foo1;
becomes (with align-pointer=type):
char* foo1;
char* foo2;
becomes (with align-pointer=middle):
char * foo2;
char foo3;
becomes (with align-pointer=name):
char foo3;
--suffix=none / -n
不保留文件的備份文件。文件在格式化之后,原始文件會(huì)清除
Ctrl+Alt+L 格式化代碼
Ctrl+Shift+J 兩行合成一行,刪去不必要的空格匹配代碼格式
其他快捷鍵:
【常規(guī)】
Ctrl+Shift + Enter,語(yǔ)句完成
“!”,否定完成,輸入表達(dá)式時(shí)按 “!”鍵
Ctrl+E,最近的文件
Ctrl+Shift+E,最近更改的文件
Shift+Click,可以關(guān)閉文件
Ctrl+[ OR ],可以跑到大括號(hào)的開(kāi)頭與結(jié)尾
Ctrl+F12,可以顯示當(dāng)前文件的結(jié)構(gòu)
Ctrl+F7,可以查詢(xún)當(dāng)前元素在當(dāng)前文件中的引用,然后按 F3 可以選擇
Ctrl+N,可以快速打開(kāi)類(lèi)
Ctrl+Shift+N,可以快速打開(kāi)文件
Alt+Q,可以看到當(dāng)前方法的聲明
Ctrl+P,可以顯示參數(shù)信息
Ctrl+Shift+Insert,可以選擇剪貼板內(nèi)容并插入
Alt+Insert,可以生成構(gòu)造器/Getter/Setter等
Ctrl+Alt+V,可以引入變量。例如:new String(); 自動(dòng)導(dǎo)入變量定義
Ctrl+Alt+T,可以把代碼包在一個(gè)塊內(nèi),例如:try/catch
Ctrl+Enter,導(dǎo)入包,自動(dòng)修正
Ctrl+Alt+L,格式化代碼
Ctrl+Alt+I,將選中的代碼進(jìn)行自動(dòng)縮進(jìn)編排,這個(gè)功能在編輯 JSP 文件時(shí)也可以工作
Ctrl+Alt+O,優(yōu)化導(dǎo)入的類(lèi)和包
Ctrl+R,替換文本
Ctrl+F,查找文本
Ctrl+Shift+Space,自動(dòng)補(bǔ)全代碼
Ctrl+空格,代碼提示(與系統(tǒng)輸入法快捷鍵沖突)
Ctrl+Shift+Alt+N,查找類(lèi)中的方法或變量
Alt+Shift+C,最近的更改
Alt+Shift+Up/Down,上/下移一行
Shift+F6,重構(gòu) – 重命名
Ctrl+X,刪除行
Ctrl+D,復(fù)制行
Ctrl+/或Ctrl+Shift+/,注釋?zhuān)?/或者/**/)
Ctrl+J,自動(dòng)代碼(例如:serr)
Ctrl+Alt+J,用動(dòng)態(tài)模板環(huán)繞
Ctrl+H,顯示類(lèi)結(jié)構(gòu)圖(類(lèi)的繼承層次)
Ctrl+Q,顯示注釋文檔
Alt+F1,查找代碼所在位置
Alt+1,快速打開(kāi)或隱藏工程面板
Ctrl+Alt+left/right,返回至上次瀏覽的位置
Alt+left/right,切換代碼視圖
Alt+Up/Down,在方法間快速移動(dòng)定位
Ctrl+Shift+Up/Down,向上/下移動(dòng)語(yǔ)句
F2 或 Shift+F2,高亮錯(cuò)誤或警告快速定位
Tab,代碼標(biāo)簽輸入完成后,按 Tab,生成代碼
Ctrl+Shift+F7,高亮顯示所有該文本,按 Esc 高亮消失
Alt+F3,逐個(gè)往下查找相同文本,并高亮顯示
Ctrl+Up/Down,光標(biāo)中轉(zhuǎn)到第一行或最后一行下
Ctrl+B/Ctrl+Click,快速打開(kāi)光標(biāo)處的類(lèi)或方法(跳轉(zhuǎn)到定義處)
Ctrl+Alt+B,跳轉(zhuǎn)到方法實(shí)現(xiàn)處
Ctrl+Shift+Backspace,跳轉(zhuǎn)到上次編輯的地方
Ctrl+O,重寫(xiě)方法
Ctrl+Alt+Space,類(lèi)名自動(dòng)完成
Ctrl+Alt+Up/Down,快速跳轉(zhuǎn)搜索結(jié)果
Ctrl+Shift+J,整合兩行
Alt+F8,計(jì)算變量值
Ctrl+Shift+V,可以將最近使用的剪貼板內(nèi)容選擇插入到文本
Ctrl+Alt+Shift+V,簡(jiǎn)單粘貼
Shift+Esc,不僅可以把焦點(diǎn)移到編輯器上,而且還可以隱藏當(dāng)前(或最后活動(dòng)的)工具窗口
F12,把焦點(diǎn)從編輯器移到最近使用的工具窗口
Shift+F1,要打開(kāi)編輯器光標(biāo)字符處使用的類(lèi)或者方法 Java 文檔的瀏覽器
Ctrl+W,可以選擇單詞繼而語(yǔ)句繼而行繼而函數(shù)
Ctrl+Shift+W,取消選擇光標(biāo)所在詞
Alt+F7,查找整個(gè)工程中使用地某一個(gè)類(lèi)、方法或者變量的位置
Ctrl+I,實(shí)現(xiàn)方法
Ctrl+Shift+U,大小寫(xiě)轉(zhuǎn)化
Ctrl+Y,刪除當(dāng)前行
Shift+Enter,向下插入新行
psvm/sout,main/System.out.println(); Ctrl+J,查看更多
Ctrl+Shift+F,全局查找
Ctrl+F,查找/Shift+F3,向上查找/F3,向下查找
Ctrl+Shift+S,高級(jí)搜索
Ctrl+U,轉(zhuǎn)到父類(lèi)
Ctrl+Alt+S,打開(kāi)設(shè)置對(duì)話框
Alt+Shift+Inert,開(kāi)啟/關(guān)閉列選擇模式
Ctrl+Alt+Shift+S,打開(kāi)當(dāng)前項(xiàng)目/模塊屬性
Ctrl+G,定位行
Alt+Home,跳轉(zhuǎn)到導(dǎo)航欄
Ctrl+Enter,上插一行
Ctrl+Backspace,按單詞刪除
Ctrl+”+/-”,當(dāng)前方法展開(kāi)、折疊
Ctrl+Shift+”+/-”,全部展開(kāi)、折疊
Alt+1,項(xiàng)目
Alt+2,收藏
Alt+6,TODO
Alt+7,結(jié)構(gòu)
Ctrl+Shift+C,復(fù)制路徑
Ctrl+Alt+Shift+C,復(fù)制引用,必須選擇類(lèi)名
Ctrl+Alt+Y,同步
Ctrl+~,快速切換方案(界面外觀、代碼風(fēng)格、快捷鍵映射等菜單)
Ctrl+Tab,轉(zhuǎn)到下一個(gè)拆分器
Ctrl+Shift+Tab,轉(zhuǎn)到上一個(gè)拆分器
【重構(gòu)】
Ctrl+Alt+Shift+T,彈出重構(gòu)菜單
Alt+Delete,安全刪除
Ctrl+Alt+N,內(nèi)聯(lián)
【查找】
Ctrl+F,查找
Ctrl+R,替換
Ctrl+Shift+F,在路徑中查找
Ctrl+Shift+R,在路徑中替換
Ctrl+Shift+S,搜索結(jié)構(gòu)
Ctrl+Shift+M,替換結(jié)構(gòu)
【VCS】
Alt+~,VCS 操作菜單
Ctrl+K,提交更改
Ctrl+T,更新項(xiàng)目
Ctrl+Alt+Shift+D,顯示變化
補(bǔ)充說(shuō)明:
IDEA 全稱(chēng)IntelliJ IDEA,是java語(yǔ)言開(kāi)發(fā)的集成環(huán)境,IntelliJ在業(yè)界被公認(rèn)為最好的java開(kāi)發(fā)工具之一,尤其在智能代碼助手、代碼自動(dòng)提示、重構(gòu)、J2EE支持、Ant、JUnit、CVS整合、代碼審查、 創(chuàng)新的GUI設(shè)計(jì)等方面的功能可以說(shuō)是超常的。IDEA是JetBrains公司的產(chǎn)品,這家公司總部位于捷克共和國(guó)的首都布拉格,開(kāi)發(fā)人員以嚴(yán)謹(jǐn)著稱(chēng)的東歐程序員為主。
java堆棧代碼行數(shù)不一致,需要4個(gè)步驟進(jìn)行修復(fù)。
1、這個(gè)錯(cuò)誤明顯是字符串轉(zhuǎn)int時(shí)出現(xiàn)的,但當(dāng)前行號(hào)701不會(huì)出現(xiàn)此問(wèn)題。
2、觀察其前后代碼,發(fā)現(xiàn)703行開(kāi)始有轉(zhuǎn)換代碼。
3、檢查代碼和業(yè)務(wù),發(fā)現(xiàn)是調(diào)用接口傳參有問(wèn)題。
4、代碼修復(fù)。
HTML頁(yè)面的代碼如何格式化、整理?解決辦法如下:
1、打開(kāi)Windows——“Preference(首選項(xiàng))”
2、在彈出的“Preference(首選項(xiàng))”窗口界面,找到左側(cè)java導(dǎo)航?----“editor ”-----“save actions”。
3、在右側(cè)“Save Actions”里找到“Perform the selected actions on save”前打上√,點(diǎn)擊“ok”保存。