2014-09-13 1 views
1

나는 Python으로 코딩하기 위해 python-mode.el을 사용하여 Emacs를 실행 중이다. 코드 영역을 자동으로 들여 쓰기하는 법을 배우기를 희망합니다.python-mode로 Emacs에서 코드를 들여 쓰려면?

다음 코드는 들여 쓰기가 잘되어 있지 않습니다. 나는 지역을 선택하고 M-x indent-region 충돌하는 경우

while match != None: 

     if match.group(1): 
      titles.append(match.group(1)) 

     if match.group(2): 
      if match.group(2) != '': 
       pns.append(int(match.group(2))) 
      else: 
       pns.append('') 
     else: 
      pns.append('') 

     if match.group(3): 
      closings.append(len(''.join(match.group(3).split()))) 
     else: 
      closings.append(0) 

    match = pat.search(match.group(4)) 

, 그것은 완전히 잘못된된다 :

while match != None: 

    if match.group(1): 
     titles.append(match.group(1)) 

     if match.group(2): 
      if match.group(2) != '': 
       pns.append(int(match.group(2))) 
      else: 
       pns.append('') 
     else: 
      pns.append('') 

      if match.group(3): 
       closings.append(len(''.join(match.group(3).split()))) 
      else: 
       closings.append(0) 

       match = pat.search(match.group(4)) 

은 이상은되어야합니다 :

while match != None: 

    if match.group(1): 
     titles.append(match.group(1)) 

    if match.group(2): 
     if match.group(2) != '': 
      pns.append(int(match.group(2))) 
     else: 
      pns.append('') 
    else: 
     pns.append('') 

    if match.group(3): 
     closings.append(len(''.join(match.group(3).split()))) 
    else: 
     closings.append(0) 

    match = pat.search(match.group(4)) 
  1. M-x indent-region 잘못 들여 쓰기를 이해 않는다 코드 줄 사이의 관계? 내 코드가 모호하기 때문에 그렇습니까?
  2. 그럼 어떻게해야합니까?

감사합니다.

답변

2

문제는 이맥스가 if-block을 끝내기를 원하는 곳을 알 수 없다는 것입니다. 원하는 코드와 indent-region 코드가 모두 유효한 파이썬입니다. C와 같은 언어에서 이것은 블록의 길이를 결정하는 괄호 때문에 문제가되지 않습니다. 파이썬의 경우, 이맥스는 각 코드 행이 여전히 이전 블록의 일부라고 가정 할 수 없다는 것을 알 수 없기 때문에.

python-indent-left ("C-<"에 바인딩 됨) 및 python-indent-right ("C-c>")를 살펴볼 수 있습니다. 귀하의 예제를 수정하려면, 첫 번째 라인을 제외한 모든 것을 강조 표시하고 python-indent-left를 실행하십시오.

1

마찬가지로 파이썬에서는 더 큰 섹션을 자동 들여 쓰기 할 수 없습니다.

그러나 줄을 서서히 처리하는 방법이 있습니다. 여기에 사용 중입니다 :

(defun indent-and-forward() 
    "Indent current line and go forward one line. " 
    (interactive "*") 
    (if (empty-line-p) 
     (fixup-whitespace) 
     (indent-according-to-mode)) 
    (if (eobp) 
     (newline-and-indent) 
    (forward-line 1)) 
    (back-to-indentation)) 

BTW는 파이썬뿐만 아니라 다른 모드에서도 작동합니다. 여기에 키가 있습니다.

(global-set-key [(super i)] 'indent-and-forward) 

이 키를 누르면 큰 부분을 이동할 수 있습니다. 원하는 부분을 계속 주시 할 수 있습니다. 그렇지 않다면이 줄에 Tab 키를 사용하고 다음 줄로 진행하십시오.