텍스트 모드의 Emacs에서 4개의 공백 들여쓰기 설정
-
09-06-2019 - |
문제
나는 Emacs가 8개의 스페이스 탭에서 4개의 스페이스 탭으로 전환하는 데 실패했습니다. 탭 주요 모드가 있는 버퍼에서 text-mode
.내 항목에 다음을 추가했습니다. .emacs
:
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
;;; And I have tried
(setq indent-tabs-mode nil)
(setq tab-width 4)
내가 어떻게 바꿔도 .emacs
파일(또는 내 버퍼의 지역 변수) 탭 버튼은 항상 같은 일을 합니다.
- 위에 텍스트가 없으면 들여쓰기 8 공백
- 이전 줄에 텍스트가 있는 경우 두 번째 단어의 시작 부분까지 들여쓰기
내가 Emacs를 좋아하는 만큼 이것은 점점 짜증나고 있습니다.이전 줄에 텍스트가 없을 때 Emacs에서 최소한 4개의 공백을 들여쓰도록 만드는 방법이 있습니까?
해결책
(customize-variable (quote tab-stop-list))
또는 추가 탭 정지 목록 입장 맞춤 설정 변수 ~에 .emacs 파일:
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120))))
다른 팁
짧은 답변:
핵심은 들여쓰기할 때 원하는 것을 삽입하도록 emacs에 지시하는 것입니다. 이는 indent-line-function을 변경하여 수행됩니다.스페이스 4개를 삽입하는 방식으로 변경하는 것보다 탭을 삽입한 후 탭을 스페이스 4개로 변경하는 방식이 더 쉽습니다.다음 구성으로 문제가 해결됩니다.
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
설명:
에서 주요 모드에 의해 제어되는 들여쓰기 @ emacs 매뉴얼:
각 주요 모드의 중요한 기능은 열쇠를 사용자 정의하여 편집하는 언어를 올바르게 들여 보내는 것입니다.
[...]
인트 라인 기능 변수는 현재 라인을 들여 쓰기 위해 사용하는 기능 (그리고 Indent-Region을 호출 할 때와 같은 다양한 명령)입니다.명령 인센트-어코드-모드는이 기능을 호출하는 것 이상을 수행하지 않습니다.
[...]
기본값은 많은 모드에 대해 들여 쓰기와 관련이 있습니다.
들여쓰기 기준 @ emacs 매뉴얼에서:
이전의 비 흑인 라인의 다음 들여 쓰기 지점 아래로의 계약 관계 공간.
[...]
이전의 비 블랭크 라인에 열 지점을 넘어 간장 포인트가없는 경우 'Tab-to-Tab-Stop'이 대신 수행됩니다.
indent-line-function의 값을 insert-tab 기능으로 변경하고 탭 삽입을 공백 4개로 구성하면 됩니다.
업데이트: Emacs 24.4 이후:
tab-stop-list
이제 암시적으로 무한대로 확장됩니다.기본값이 다음으로 변경됩니다.nil
이는 탭 정지를 의미합니다.tab-width
열.
이는 더 이상 설정할 필요가 없음을 의미합니다. tab-stop-list
아래 표시된 방식으로 설정을 유지할 수 있습니다. nil
.
원래 답변은 다음과 같습니다 ...
이런 것들을 보면 항상 약간 마음이 아프다. (setq tab-stop-list 4 8 12 ................)
때 number-sequence
함수가 사용되기를 기다리고 있습니다.
(setq tab-stop-list (number-sequence 4 200 4))
또는
(defun my-generate-tab-stops (&optional width max)
"Return a sequence suitable for `tab-stop-list'."
(let* ((max-column (or max 200))
(tab-width (or width tab-width))
(count (/ max-column tab-width)))
(number-sequence tab-width (* tab-width count) tab-width)))
(setq tab-width 4)
(setq tab-stop-list (my-generate-tab-stops))
다음과 같이 탭을 설정하는 것이 더 쉬울 수 있습니다.
M-x customize-group
에서 Customize group:
프롬프트 입력 indent
.
모든 들여쓰기 옵션을 설정하고 현재 세션에 대해 설정하거나 향후 모든 세션을 위해 저장할 수 있는 화면이 표시됩니다.
이런 식으로 하면 좋겠다. 사용자화 파일 설정.
(setq tab-width 4)
(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80))
(setq indent-tabs-mode nil)
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
(setq c-default-style "linux")
(setq c-basic-offset 4)
(c-set-offset 'comment-intro 0)
이것은 C++ 코드와 내부 주석에서도 작동합니다.
(defun my-custom-settings-fn ()
(setq indent-tabs-mode t)
(setq tab-stop-list (number-sequence 2 200 2))
(setq tab-width 2)
(setq indent-line-function 'insert-tab))
(add-hook 'text-mode-hook 'my-custom-settings-fn)
이 문제는 탭 정지 누락으로 인해 발생하는 것이 아닙니다.emacs에는 표 형식의 데이터를 정렬하도록 설계된 indent-relative라는 탭 방법이 있습니다.TAB 키는 indent-for-tab-command 메소드에 매핑됩니다. 이 메소드는 indent-line-function 변수에 설정된 메소드(텍스트 모드의 들여쓰기 기준 메소드)를 호출합니다.indent-line-function 변수를 재정의하는 좋은 방법을 찾지 못했습니다(텍스트 모드 후크가 작동하지 않아서 모드 후크가 실행된 후 재설정되는 것일 수도 있습니다.). 하지만 이를 제거하는 간단한 방법이 하나 있습니다. 동작은 TAB를 더 간단한 탭에서 탭 정지 방법으로 설정하여 탭 명령에 대한 의도 방법을 무시하는 것입니다.
(키 텍스트 모드 맵 정의(kbd "TAB") '탭에서 탭 중지)
이 시도:
(add-hook 'text-mode-hook
(function
(lambda ()
(setq tab-width 4)
(define-key text-mode-map "\C-i" 'self-insert-command)
)))
그러면 TAB은 항상 4자마다 탭 정지가 있는 리터럴 TAB 문자를 삽입하게 됩니다(단, 텍스트 모드에서만).그것이 당신이 요구하는 것이 아니라면, 당신이 원하는 동작을 설명해 주십시오.
.emacs 파일에 다음 코드 줄을 추가할 수 있습니다.들여쓰기 상대 대신 삽입 탭을 사용하도록 텍스트 모드에 대한 후크를 추가합니다.
(custom-set-variables
'(indent-line-function 'insert-tab)
'(indent-tabs-mode t)
'(tab-width 4))
(add-hook 'text-mode-hook
(lambda() (setq indent-line-function 'insert-tab)))
도움이 되었으면 좋겠습니다.
c-set-style로 스타일을 바꾸는 것만으로도 충분했습니다.
.emacs 파일에 다음을 추가하세요:
탭이 표시되는 너비를 2자로 설정합니다(숫자 2를 원하는 대로 변경).
(setq default-tab-width 2)
emacs가 실제로 공백 대신 탭을 사용하고 있는지 확인하려면 다음을 수행하십시오.
(global-set-key (kbd "TAB") 'self-insert-command)
여담으로, 탭 위에서 백스페이스를 수행할 때 emacs의 기본값은 탭을 공백으로 변환한 다음 공백을 삭제하는 것입니다.이는 짜증스러울 수 있습니다.탭만 삭제하려면 다음을 수행하세요.
(setq c-backspace-function 'backward-delete-char)
즐기다!
사용자 정의는 그림자를 만들 수 있습니다. (setq tab width 4)
그래서 둘 중 하나를 사용 setq-default
또는 Customize에게 현재 무엇을 하고 있는지 알려주세요.저도 OP와 비슷한 문제가 있었는데 이것만으로 해결했는데 조정할 필요가 없었습니다. tab-stop-list
아니면 뭐든지 insert
기능:
(custom-set-variables
'(tab-width 4 't)
)
(emacsWiki의 팁) 바로 뒤에 이것을 추가하는 것이 유용하다는 것을 알았습니다.
(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)
.emacs 파일에 이것을 작성할 때까지 가장 좋은 답변은 작동하지 않았습니다.
(global-set-key (kbd "TAB") 'self-insert-command)
이것은 탭을 공백으로 순서대로 변환하거나 변환하지 않고도 탭이 삽입되는 것을 방지하는 유일한 솔루션입니다.둘 다 적절해 보였지만 낭비였습니다.
(setq-default
indent-tabs-mode nil
tab-width 4
tab-stop-list (quote (4 8))
)
참고하세요 quote
작동하려면 두 개의 숫자가 필요합니다(하지만 그 이상은 아닙니다!).
또한 대부분의 주요 모드(Python
예를 들어) Emacs에서는 들여쓰기가 자동으로 수행됩니다.자동 들여쓰기 외부에서 들여쓰기가 필요한 경우 다음을 사용하세요.
중-나
시도해 보셨나요?
(setq tab-width 4)
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
그건 그렇고, C 모드, 나는 덧붙인다 (setq-default c-basic-offset 4)
.emacs로.보다 http://www.emacswiki.org/emacs/IndentingC 자세한 내용은.
내 초기화 파일에서는 탭 대신 공백을 원했기 때문에 다릅니다.
(add-hook 'sql-mode-hook (lambda () (progn (setq-default tab-width 4) (setq indent-tabs-mode nil) (setq indent-line-function 'tab-to-tab-stop) (modify-syntax-entry ?_ "w") ; now '_' is not considered a word-delimiter (modify-syntax-entry ?- "w") ; now '-' is not considered a word-delimiter )))