2014-03-12 38 views
11

在Eclipse中,有沒有轉換成爲一種自動自發的方式:有沒有辦法將多個變量聲明轉換爲每行一個?

int myX, myY, myZ; 

...這個...

int myX; 
int myY; 
int myZ; 

我想我可以從這樣做的「清理」和「成員排序順序「首選項,但不會將多個聲明分解爲每行一個。有沒有辦法做到這一點?

編輯:澄清,這是關於成員變量。

+0

我不認爲格式會爲你做這個,你可能會創建一個格式規則(你可以這樣做嗎?) –

+0

你堅持要Eclipse嗎? –

+0

@IraBaxter我最感興趣的方式是通過Eclipse完成它,但如果另一個IDE是唯一的方法,我仍然希望聽到它。 – whiskeyspider

回答

6

有沒有內置的清理或格式化選項來做到這一點(這讓我感到驚訝)。但是,編寫一個插件來做到這一點並不困難。作爲參考,你會從this extension point開始。類org.eclipse.jdt.internal.ui.fix.VariableDeclarationCleanUp看起來像一個潛力的研究作爲一個例子和指導。

0

我知道Eclipse中沒有這種功能。

我假設你是一名java程序員,因此你最好的選擇是編寫一個簡單的程序,解析出這種模式的源代碼並根據需要將其轉換爲多行。然後在其上運行清理以根據需要正確格式化。

7

雖然我不知道,如果一個功能,做到這一點,你可以得到類似的結果有幾個按鍵:

  1. 突出顯示其中包含多個變量定義行,並使用查找/替換函數(按鍵:Ctrl-F)將逗號空間序列替換爲分號,空格和變量類型。確保範圍設置爲「選擇行」如下面的截圖:

    Find replace dialog

  2. 現在,你仍然有在一個單一的行中的所有變量聲明一行。這可以通過突出顯示相同的行和Source> Format函數(擊鍵:Shift-Ctrl-F)來解決。

    Source format menu

  3. 全部完成,現在你有你的變量各自的類型,每行一個:

    All done

+1

這個方法在大於最小文件的任何東西中都是無用的。 – Chase

+1

我會找到並替換步驟一個正則表達式,查找逗號加可選空白。 –

+1

我認爲@E-Riz的答案最終會是最好的解決方案,但是這對於這個問題是一個快速,簡單的解決方案。謝謝。 – whiskeyspider

2

Eclipse不提供這種格式功能開箱。你可以使用Checkstyle插件來檢查這個和更多的編碼標準。

在Checkstyle的配置文件,使用模塊MultipleVariableDeclarations這樣,

<module name="Checker"> 
    <module name="TreeWalker"> 
     <property name="cacheFile" value="target/cachefile"/> 
     <property name="tabWidth" value="4"/> 
     ... 
     <module name="MultipleVariableDeclarations"/> 
     ... 
    </module> 
</module> 

如果您是使用命令行工具確定,然後astyleGC GreatCode就是兩個很好的代碼格式化。

GC GreatCode是作爲C/C++代碼格式化程序給出的,但它將在此場景中良好地格式化您的代碼。

GC的選項來分離變量聲明是-code_split_decl_style

原始代碼:

String fileName, a, b, c; 

隨着-code_split_decl_style-1選項:

String fileName, 
     a, 
     b, 
     c; 

隨着-code_split_decl_style-2選項:

String fileName; 
String a; 
String b; 
String c; 

您可以使用UniversalIndentGUI在一個GUI工具中使用不同命令行格式化工具和各種語言的配置。


的Checkstyle:http://checkstyle.sourceforge.net/

的astyle:astyle.sourceforge.net/

GC GreateCode:http://sourceforge.net/projects/gcgreatcode/

UniversalIndentGUI:universalindent.sourceforge.net/

2

Eclipse不似乎爲此提供了一個功能,而且我還沒有找到這樣做的插件。但假設你有權訪問awk,你可能會發現這個小awk腳本有幫助:

{ 
    if (match($0,/([a-z|A-Z|0-9|_]+)\s+(([a-z|A-Z|0-9|_]+)\s*,\s*)+([a-z|A-Z|0-9|_]+);/)) { 
    match($0,/(\s*[a-z|A-Z|0-9|_]+)\s+([^;]*)/,components); 
    split(components[2],vars,","); 
    for(i in vars) { 
     gsub (/'[[:cntrl:]]|[[:space:]]|\x20/,"",vars[i]) 
     print components[1],vars[i]";" 
    } 
    } 
    else { 
    print $0; 
    } 
} 

它會完成所需的工作。假設你把它保存到文件script.awk你會這樣稱呼它

awk -f script.awk target_file.java 

注意:您必須直接輸出到其他文件或源將被覆蓋(空)

所以如果你想在一個處理大量的文件去,你應該做這樣的(假設是bash shell):

for f in *.java; do awk -f awk1.awk $f > $f.pr; done 

對於每一個Java文件,這將創建一個新的文件,結束.java.pr,然後你只是將這些移動到整數o以.java結尾的文件。

==================編輯=================

只是想補充一點,用於支持所選區域的bash/awk腳本的Eclipse插件。在這裏看到:

http://eclipseexeditor.sourceforge.net/ (可能是舊的Eclipse的新版本)也

這裏:

Bash script plugin for Eclipse?

因此,我的腳本加上其中一個插件可能會將所需功能添加到Eclipse。

相關問題