문제

나는 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 파일(또는 내 버퍼의 지역 변수) 버튼은 항상 같은 일을 합니다.

  1. 위에 텍스트가 없으면 들여쓰기 8 공백
  2. 이전 줄에 텍스트가 있는 경우 두 번째 단어의 시작 부분까지 들여쓰기

내가 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++ 코드와 내부 주석에서도 작동합니다.

이 문제는 탭 정지 누락으로 인해 발생하는 것이 아닙니다.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 
               )))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top