답변:
Emacs를 사용하여 Python을 프로그래밍하는 경우 python-mode를 사용해야합니다. 파이썬 모드에서는 코드 블록을 표시 한 후
C-c >
또는 C-c C-l
영역을 4 칸 오른쪽으로 이동
C-c <
또는 C-c C-r
영역을 4 칸 왼쪽으로 이동
코드를 두 레벨의 들여 쓰기 또는 임의의 양만큼 이동해야하는 경우 명령 앞에 인수를 붙일 수 있습니다.
C-u 8 C-c >
영역을 8 칸 오른쪽으로 이동
C-u 8 C-c <
영역을 8 칸 왼쪽으로 이동
또 다른 대안은 다음과 같은 것을 사용 M-x indent-rigidly
하는 것입니다 C-x TAB
.
C-u 8 C-x TAB
영역을 8 칸 오른쪽으로 이동
C-u -8 C-x TAB
영역을 8 칸 왼쪽으로 이동
텍스트 줄 대신 텍스트 사각형에서 작동 하는 사각형 명령 도 유용 합니다.
예를 들어 직사각형 영역을 표시 한 후
C-x r o
직사각형 영역을 채우기 위해 공백을 삽입합니다 (효과적으로 코드를 오른쪽으로 이동).
C-x r k
직사각형 영역을 강제 종료합니다 (효과적으로 코드를 왼쪽으로 이동)
C-x r t
사각형을 바꿀 문자열을 묻습니다. 입력 C-u 8 <space>
하면 8 칸이 입력 됩니다.
추신. 우분투에서 파이썬 모드를 모든 .py 파일의 기본 모드로 만들려면 간단히 python-mode
패키지 를 설치하십시오 .
C-c >
python-mode.el에 정의되어 있으므로 python-mode
패키지를 어딘가에 설치해야한다고 생각합니다 . 다행입니다.
C-c C-l
그리고 C-c C-r
당신은 자신을 설정 한 사용자 정의 바인딩해야합니다. 당신이 실행하면 emacs -q
(는 init 파일을로드하지 않고 실행 이맥스에) 당신은 더 바인딩이 없습니다 볼 수 있습니다 C-c C-l
또는 C-c C-r
파이썬 모드가.
기본적으로 indent-region
매핑되는 외에도 C-M-\
사각형 편집 명령은 Python에 매우 유용합니다. 영역을 정상으로 표시 한 후 다음을 수행하십시오.
C-x r t
( string-rectangle
) : 각 줄에 삽입 할 문자를 입력하라는 메시지가 나타납니다. 특정 수의 공백을 삽입하는 데 적합C-x r k
( kill-rectangle
) : 사각형 영역을 제거합니다. 들여 쓰기 제거에 좋습니다C-x r y
( yank-rectangle
) 도 가능 하지만 거의 유용하지 않습니다.
indent-region
매핑 C-M-\
트릭을해야한다.
이 함수를 사용하여 들여 쓰기 및 들여 쓰기를 처리했습니다.
(defun unindent-dwim (&optional count-arg)
"Keeps relative spacing in the region. Unindents to the next multiple of the current tab-width"
(interactive)
(let ((deactivate-mark nil)
(beg (or (and mark-active (region-beginning)) (line-beginning-position)))
(end (or (and mark-active (region-end)) (line-end-position)))
(min-indentation)
(count (or count-arg 1)))
(save-excursion
(goto-char beg)
(while (< (point) end)
(add-to-list 'min-indentation (current-indentation))
(forward-line)))
(if (< 0 count)
(if (not (< 0 (apply 'min min-indentation)))
(error "Can't indent any more. Try `indent-rigidly` with a negative arg.")))
(if (> 0 count)
(indent-rigidly beg end (* (- 0 tab-width) count))
(let (
(indent-amount
(apply 'min (mapcar (lambda (x) (- 0 (mod x tab-width))) min-indentation))))
(indent-rigidly beg end (or
(and (< indent-amount 0) indent-amount)
(* (or count 1) (- 0 tab-width))))))))
그런 다음 키보드 단축키에 할당합니다.
(global-set-key (kbd "s-[") 'unindent-dwim)
(global-set-key (kbd "s-]") (lambda () (interactive) (unindent-dwim -1)))
나는 Emacs newb 이므로이 대답은 아마도 쓸모없는 경계에있을 것입니다.
답변 중에 지금까지 언급되지 같은 리터럴의 재 들여 쓰기 다루 dict
또는 list
. 예 M-x indent-region
또는 M-x python-indent-shift-right
당신이 한 다음과 같은 문자를 잘라 내기 및 붙여 넣기하고 다시 들여 현명 할 필요 경우 회사는 도움말을하지 않을 수 있습니다 :
foo = {
'bar' : [
1,
2,
3 ],
'baz' : {
'asdf' : {
'banana' : 1,
'apple' : 2 } } }
M-x indent-region
에서 현명하게 무언가를 해야하는 것처럼 느껴지 python-mode
지만, 아직은 그렇지 않습니다.
리터럴이 대괄호로 묶인 특정 경우에는 공백이 역할을하지 않기 때문에 문제의 줄에 Tab 키를 사용하면 원하는 것을 얻을 수 있습니다.
따라서 이러한 경우 F3, Ctrl-n (또는 아래쪽 화살표), TAB, F4 와 같은 키보드 매크로를 빠르게 기록한 <f3> C-n TAB <f4>
다음 F4를 반복적으로 사용하여 매크로를 적용하면 몇 가지 키 입력을 저장할 수 있습니다. 또는 C-u 10 C-x e
10 번 적용 할 수 있습니다 .
(별로 들리지는 않지만 아래쪽 화살표를 놓치지 않고 100 줄의 가비지 리터럴을 다시 들여 쓰기 한 다음 5 줄 위로 올라가서 물건을 반복해야합니다.)).
다음 스 니펫을 사용합니다. 선택이 비활성화되면 탭에서 현재 행을 들여 씁니다 (보통과 동일). 선택이 비활성화되면 전체 영역이 오른쪽으로 들여 쓰기됩니다.
(defun my-python-tab-command (&optional _)
"If the region is active, shift to the right; otherwise, indent current line."
(interactive)
(if (not (region-active-p))
(indent-for-tab-command)
(let ((lo (min (region-beginning) (region-end)))
(hi (max (region-beginning) (region-end))))
(goto-char lo)
(beginning-of-line)
(set-mark (point))
(goto-char hi)
(end-of-line)
(python-indent-shift-right (mark) (point)))))
(define-key python-mode-map [remap indent-for-tab-command] 'my-python-tab-command)
대화식으로 들여 쓰기를하십시오.
내 게시물에서 복사 : Emacs에서 여러 줄 들여 쓰기
나는 이런 식으로 보편적으로
;; intent whole buffer
(defun iwb ()
"indent whole buffer"
(interactive)
;;(delete-trailing-whitespace)
(indent-region (point-min) (point-max) nil)
(untabify (point-min) (point-max)))
C-c >
맞습니다.C-c <
왼쪽으로