2014-03-12 3 views
11

이를 변환하는 자동 방법이 : 나는에서이 작업을 수행 할 수 있다고 생각여러 변수 선언을 한 줄에 하나씩 변환 할 수 있습니까? 이클립스에서

int myX; 
int myY; 
int myZ; 

이에

int myX, myY, myZ; 

... ''정리 '와 Members Sort Order '환경 설정을 사용하지만 여러 선언을 한 줄에 하나씩 구분하지는 않습니다. 그것을 할 수있는 방법이 있습니까?

편집 : 명확하게 말하면 멤버 변수와 관련이 있습니다.

+0

포맷이이 작업을 수행 할 것이라고 생각하지 않습니다. 포맷 규칙을 만들 수 있습니다 (바로 할 수 있습니까?) –

+0

Eclipse 응답을 고집합니까? –

+0

@IraBaxter Eclipse를 통해이 작업을 수행하는 방법에 가장 관심이 있지만, 다른 IDE가 유일한 방법 인 경우에는 여전히 듣고 싶습니다. – whiskeyspider

답변

6

내 작업을 수행하는 기본 제공 정리 또는 포맷터 옵션이 없습니다 (놀라움). 그러나 플러그인을 작성하는 것은 그리 어렵지 않을 것입니다. 참고로 this extension point부터 시작합니다. org.eclipse.jdt.internal.ui.fix.VariableDeclarationCleanUp 클래스는 예제와 가이드로 공부할 수있는 잠재적 인 것 같습니다.

0

제가 알고있는 Eclipse에는 이러한 기능이 없습니다.

나는 당신이 자바 프로그래머라고 가정하고, 따라서 최선의 방법은 그러한 패턴을위한 소스 코드를 파싱하고 원하는대로 다중 라인으로 변환 할 간단한 프로그램을 작성하는 것이다. 그런 다음 필요에 따라 제대로 포맷되도록 정리하십시오.

7

이 수행하는 단일 기능, 당신은 몇 번의 키 입력과 유사한 결과를 얻을 수 있을지는 모르겠지만 :

  1. 강조 여러 변수 정의를 포함하는 라인과를 사용 찾기/바꾸기 기능 (keystroke : Ctrl-F)을 사용하여 세미콜론, 공백 및 변수 유형으로 쉼표 공간 순서를 바꿉니다. 범위는 다음 스크린 샷과 같이 "선택 선"으로 설정되어 있는지 확인합니다 :

    Find replace dialog

  2. 지금 당신은 여전히 ​​한 줄에있는 모든 변수 선언과 선을해야합니다. 같은 줄을 강조 표시하고 소스> 형식 기능 (키 입력 : Shift-Ctrl-F)을 수정하면이 문제를 해결할 수 있습니다.

    Source format menu

  3. 모두, 지금은 한 줄에 하나씩, 각각의 유형으로 변수를 수행 :

    All done

+1

이 방법은 파일보다 크지 않은 파일에서는 쓸모 없습니다. – Chase

+1

나는 find와 replace 단계를 쉼표와 선택적 공백을 찾는 정규식으로 바꿀 것이다. –

+1

@ E-Riz 대답은 궁극적으로 최고의 솔루션이 될 것이라고 생각하지만,이 문제에 대한 신속하고 치명적인 간단한 수정 작업을했습니다. 감사. – whiskeyspider

2

Eclipse는 상자에서이 포맷 기능을 제공하지 않습니다 . Checkstyle 플러그인을 사용하여 더 많은 코딩 표준을 확인할 수 있습니다. 당신이 명령 줄 도구를 사용하여 OK 경우 Checkstyle 구성 파일에서

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

,이 같은 모듈 MultipleVariableDeclarations을 사용하고 astyleGC GreatCode 두 좋은 코드 포매터입니다.

GC GreatCode은 C/C++ 코드 포맷터로 제공되지만이 시나리오에서는 코드의 형식을 잘 지정합니다.

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; 
변수 선언을 분할 GC 옵션에서

-code_split_decl_style

원본 코드

UniversalIndentGUI을 사용하여 하나의 GUI 도구에서 다양한 언어의 다른 명령 줄 서식 도구 및 구성으로 재생할 수 있습니다.


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

Astyle : astyle.sourceforge.net/

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

UniversalIndentGUI :

2

이클립스하지 않는 universalindent.sourceforge.net/ 이 기능을 제공하는 것, 그리고이 일을 플러그인을 발견하지 않았습니다. 그러나 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; 
    } 
} 

필요한 작업을 수행합니다. 이

awk -f script.awk target_file.java 

참고과 같이 호출 할이 파일에 script.awk을 저장 가정 : 대체 파일이나 소스에 출력을해야하는 것은 그래서

(비운)을 덮어 쓰게됩니다 당신은 하나의 파일 수를 처리하려는 경우 (bash 쉘을 가정)이처럼해야 이동 :

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

각 자바 파일에 대해이 종료 .java.pr에 새로운 파일을 생성합니다, 그런 다음 int를 통해 이동합니다. o .java가 끝나는 파일.

================== 편집 =================

그냥 거기를 추가 할 선택된 region에서 bash/awk 스크립트를 지원하는 Eclipse 용 플러그인이 존재합니다. 여기를 참조하십시오 :

http://eclipseexeditor.sourceforge.net/ 도 여기에

와 (아마도 새로운 이클립스의 버전 이전에) :

Bash script plugin for Eclipse?합니다.

그래서 내 스크립트는 그 플러그인 중 하나와 결합되어 Eclipse에 요청 된 기능을 추가 할 것입니다.