2009-02-27 2 views
12

ViewSourceWith 및 Emacs를 사용하여 StackOverflow 응답 및 질문을 편집합니다. 종종, 코드를 포함하고 StackOverflow formatting rules 은 공백으로 들여 쓰기하여 으로 인식되어야한다고 말합니다. 손으로 또는 매크로를 사용해도 고통 스럽습니다.Emacs를 사용하여 들여 쓰기 (shift 4) 코드

나는 이전 게시물에서 검색했지만 아무 것도 발견하지 못했습니다. 파이썬 모드에서 시작

, 내가 쓴 :

(defun text-shift-region (start end count) 
    "Indent lines from START to END by COUNT spaces." 
    (save-excursion 
(goto-char end) 
(beginning-of-line) 
(setq end (point)) 
(goto-char start) 
(beginning-of-line) 
(setq start (point)) 
(indent-rigidly start end count))) 

(defun text-shift-region-right (start end &optional count) 
    "Shift region of code to the right 
    Stolen from python-mode. 
    The lines from the line containing the start of the current region up 
    to (but not including) the line containing the end of the region are 
    shifted to the right, by `text-indent-offset' columns. 

    If a prefix argument is given, the region is instead shifted by that 
    many columns. With no active region, indent only the current line." 
    (interactive 
    (let ((p (point)) 
    (m (mark)) 
    (arg current-prefix-arg)) 
(if m 
    (list (min p m) (max p m) arg) 
    (list p (save-excursion (forward-line 1) (point)) arg)))) 
    (text-shift-region start end (prefix-numeric-value 
       (or count text-indent-offset))) 
) 

;; Code in StackOverflow must be marked by four spaces at the 
;; beginning of the line 
(setq text-indent-offset 4) 
(global-set-key "\C-c>" 'text-shift-region-right) 

작동하는 것 같다하지만 조언, 대안, 버그 리포트, 등

+0

이것은 거의 질문이 아닙니다. –

+0

빨리 요리 된 솔루션에 대한 대안을 얻거나 흥미로운 패치를 받기를 바랍니다. – bortzmeyer

+0

또한 어딘가에서 문서를 요청하는 데 충분한 관심이 있는지를 확인하는 방법으로 이것을 사용하는 사람들에게 도움이 될 것 같습니다. – bortzmeyer

답변

14

C-X 탭 indent-rigidly을 실행을 환영합니다. 4의 수치적인 논증을 감안할 때 그것은 당신이 원하는 것을 할 것입니다. 또는 <> < 코드>를 사용하여 코드를 입력하십시오 (첫 번째 단락 Markdown Editing Help 참조).

편집은 : 대화 형 선언은 더 나은 기록 될 것입니다 :

(interactive "r 
p") 
+0

C-x TAB은 표시 할 영역이 필요합니다. 내가 훔친 파이썬 모드 코드는 지역에 존재하거나, 현재 행에 있다면 작동합니다. – bortzmeyer

+0

활성 상태입니다. 일반적으로 한 줄을 4 줄 들여 쓰는 것은 특정 바인딩을 실제로 보증하지 않습니다. C-a 스페이스 스페이스 스페이스. – kmkaplan

+0

글쎄, 난 아직도 내 방법을 선호하지만이 두 가지 솔루션도 좋습니다. 수락 됨. – bortzmeyer

1

귀하의 코드가 나에게 잘 보인다. 나는 의 text-shift-region에 다시 설정하는 것이 필요하지 않다고 생각하지만, 그 외는 괜찮아 보입니다. 첫 번째 줄의 시작 부분에서 시작하여 당신이 (메모를 들여하려는 마지막 줄의 시작 부분에 종료 지역을 설정 :

11

할 수있는 또 다른 쉬운 방법은 이맥스의 강력한 직사각형 편집 기능을 사용하는 것입니다 그것을 있다 당신이 당신의 존재 텍스트를 교체하지 않기 때문에 라인의 시작 부분에있을!), 다음 메시지로

C-x r t (string-rectangle) 

가 그럼 그냥 4 공백을 입력 할. 빌라! 추가 리스프 해킹이 필요하지 않습니다. 이것은 추가적으로 공간의 옆에 다른 것들을 삽입 할 수있는 유연성을 제공합니다.

+2

영역의 첫 번째 또는 마지막 행이 4 자 이상인 경우 Cx ro, open-rectangle이 더 단순한 명령입니다. 영역의 양쪽 끝을 행에 4 자로 시작하고 다른 하나는 시작 부분에 위치 시키십시오 를 입력하고 Cx r o를 입력하십시오. –

8

(다른 답변에서 언급했듯이) 들여 쓰기를 위해 C-x TAB을 사용하는 것이 가장 쉬운 방법입니다. 들여 쓰기 할 영역을 선택하고 C-u C-x TAB을 누르기 만하면됩니다. C-u의 기본 접두사는 4이므로이 값은 원하는대로 정확하게 수행해야합니다.

1

python-mode에서 영역 (C-space, 커서 이동)을 표시하고 C-c >을 4 칸내어 들여 쓰기 할 수 있습니다.