在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