코드 블록에 try / except를 추가하려는 경우 Emacs에서 Python으로 작업하면 전체 블록을 한 줄씩 들여 쓰기 해야하는 경우가 종종 있습니다. Emacs에서는 한 번에 전체 블록을 어떻게 들여 쓰기합니까?
저는 숙련 된 Emacs 사용자는 아니지만 ssh를 통해 작업하는 데 가장 적합한 도구라는 것을 알았습니다. 차이가 나는 경우 GUI가 아닌 명령 줄 (Ubuntu)에서 Emacs를 사용하고 있습니다.
답변
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
패키지 를 설치하십시오 .
답변
기본적으로 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)
답변
대화식으로 들여 쓰기를하십시오.
- 들여 쓰기 할 영역을 선택하십시오.
- Cx TAB.
- 화살표 ( <-및 ->)를 사용 하여 대화식으로 들여 쓰기하십시오.
- Esc필요한 들여 쓰기가 끝나면 세 번 누릅니다 .
내 게시물에서 복사 : Emacs에서 여러 줄 들여 쓰기