2014-03-12 59 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。

相关问题