2011-03-28 2 views
2

나는 코드가있을 때 :이맥스에서 들여 쓰기 영역에 할당과 해시를 지능적으로 정렬하는 방법은 무엇입니까?

a = 1 
foo = 2 

을 나는 것처럼 보이게하려는 :

a = 1 
foo = 2 

내가 사용할 수있는 정렬 --같음 기능 여기에 정의 :

Emacs hotkey to align equal signs

영역을 선택하고 기능을 실행하십시오. 나는 함수 정의에 '=>'에서 '='변경뿐만 아니라 해시 일하기 기능을 변경하고 할 수 있습니다 :

bar = { :a => 1, 
:foo => 2 } 

는로 변환 :

bar = { :a => 1, 
     :foo => 2 } 

나는이 원하는 전체 버퍼를 선택하고 indent-region을 실행할 때 모든 코드에 대해 정렬을 수행해야합니다. 그러나 나는 그것을 지능적으로 수행하기를 원합니다 - 버퍼의 모든 '='를 가장 오른쪽 '='에 정렬하지 말고 할당 블록과 개별 해시 리터럴을 위해 수행하십시오.

편집 :이 마지막 부분을 명확히하기 위해, 나는 다음과 같은 버퍼 있다고 가정 :

a = 1 
foo = 2 

some_other_code 

def fn 
    bar = { :a => 1, 
    :foo => 2 } 
end 

내가 (전체 버퍼를 선택) 'CX의 시간'을하고 싶지을, 'MC- \'(indent- 지역)과는 다음과 같이 있습니다

a = 1 
foo = 2 

some_other_code 

def fn 
    bar = { :a => 1, 
      :foo => 2 } 
end 

답변

8

M-x align-regexp=을보십시오. 다른 사람들도 마찬가지입니다.

+0

이것은 정렬 - 투 - 동일 기능을 대체 작동하지만, 어떻게 내가-들여 지역이을 추가 할 수 있으며 그것은 단지 지정의 정의 나 그룹을 해시 로컬 신청 한? (I이 무엇을 의미하는의 설명에 대한 원래의 질문에 편집을 참조하십시오.) – Loren

+0

을 아마도 정렬 - 정규 표현식 다음-지역을 들여 호출하는 새로운 defun는 함께. 그러나 나는 단순히 indent-region을 수행 한 다음 모든 align-regexp를 수동으로 수행 할 것입니다. 이 워크 플로우가 그러한 자동화에 충분히 호소력이 있는지 확실하지 않습니다. – vpit3833

+0

놀라운! 고맙습니다! – film42

1

align.el 이럴 정렬 기능을 제공 : 이맥스에서

은 M-X 정렬 루비 모드에서 해시를 정렬한다

 (push (ruby-hash-string 
      (regexp . "\\(\\s-*\\)\\(\"[^\"]*\"\\|:[a-zA-Z]*\\)\\(\\s-*\\)=>\\(\\s-*\\)") 
      (group . (1 3 4)) 
      (repeat . t) 
      (modes '(ruby-mode))) 
     align-rules-list) 

추가. 당신은 정렬하고자하는 다른 thuings에 대한 다른 그룹을 추가해야합니다.