在Eclipse中,有沒有轉換成爲一種自動自發的方式:有沒有辦法將多個變量聲明轉換爲每行一個?
int myX, myY, myZ;
...這個...
int myX;
int myY;
int myZ;
我想我可以從這樣做的「清理」和「成員排序順序「首選項,但不會將多個聲明分解爲每行一個。有沒有辦法做到這一點?
編輯:澄清,這是關於成員變量。
在Eclipse中,有沒有轉換成爲一種自動自發的方式:有沒有辦法將多個變量聲明轉換爲每行一個?
int myX, myY, myZ;
...這個...
int myX;
int myY;
int myZ;
我想我可以從這樣做的「清理」和「成員排序順序「首選項,但不會將多個聲明分解爲每行一個。有沒有辦法做到這一點?
編輯:澄清,這是關於成員變量。
有沒有內置的清理或格式化選項來做到這一點(這讓我感到驚訝)。但是,編寫一個插件來做到這一點並不困難。作爲參考,你會從this extension point開始。類org.eclipse.jdt.internal.ui.fix.VariableDeclarationCleanUp
看起來像一個潛力的研究作爲一個例子和指導。
我知道Eclipse中沒有這種功能。
我假設你是一名java程序員,因此你最好的選擇是編寫一個簡單的程序,解析出這種模式的源代碼並根據需要將其轉換爲多行。然後在其上運行清理以根據需要正確格式化。
雖然我不知道,如果一個單功能,做到這一點,你可以得到類似的結果有幾個按鍵:
突出顯示其中包含多個變量定義行,並使用查找/替換函數(按鍵:Ctrl-F
)將逗號空間序列替換爲分號,空格和變量類型。確保範圍設置爲「選擇行」如下面的截圖:
現在,你仍然有在一個單一的行中的所有變量聲明一行。這可以通過突出顯示相同的行和Source> Format函數(擊鍵:Shift-Ctrl-F
)來解決。
全部完成,現在你有你的變量各自的類型,每行一個:
這個方法在大於最小文件的任何東西中都是無用的。 – Chase
我會找到並替換步驟一個正則表達式,查找逗號加可選空白。 –
我認爲@E-Riz的答案最終會是最好的解決方案,但是這對於這個問題是一個快速,簡單的解決方案。謝謝。 – whiskeyspider
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>
如果您是使用命令行工具確定,然後astyle
和GC 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/
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。
我不認爲格式會爲你做這個,你可能會創建一個格式規則(你可以這樣做嗎?) –
你堅持要Eclipse嗎? –
@IraBaxter我最感興趣的方式是通過Eclipse完成它,但如果另一個IDE是唯一的方法,我仍然希望聽到它。 – whiskeyspider