it-swarm-ko.tech

텍스트 모드에서 Emacs에서 4 개의 들여 쓰기 설정

Emacs가 8 개의 스페이스 탭에서 4 개의 스페이스 탭으로 전환하는데 실패했습니다. TAB 주 모드가 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 파일 (또는 버퍼의 로컬 변수)을 어떻게 변경하더라도 TAB 버튼은 항상 같은 일을합니다.

  1. 위에 텍스트가 없으면 들여 쓰기 8 공백
  2. 이전 줄에 텍스트가 있으면 두 번째 말씀의 시작 부분에 들여 쓰기

내가 Emacs를 좋아하는 한 이것은 성가시다. 이전 줄에 텍스트가 없을 때 Emacs가 4 칸 이상 들여 쓰기 할 수있는 방법이 있습니까?

154
Cristian
(customize-variable (quote tab-stop-list))

또는 . emacs 파일에서 tab-stop-list 항목을 custom-set-variables에 추가하십시오.

(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))))
28
Bert F

짧은 답변:

요점은 이멕스가 들여 쓰기 할 때 원하는 것을 삽입하도록 지시하는 것입니다. 이는 들여 쓰기 라인 기능을 변경하여 수행됩니다. 탭을 삽입하도록 변경 한 다음 4 개의 공백을 삽입하도록 변경하는 것보다 탭을 4 개의 공백으로 변경하는 것이 더 쉽습니다. 다음 구성은 문제를 해결합니다.

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)

설명:

주요 모드에서 제어되는 들여 쓰기 @ emacs manual :

각 주요 모드의 중요한 기능은 편집중인 언어에 맞게 들여 쓰기되도록 키를 사용자 정의하는 것입니다.

[...]

Indent-line-function 변수는 현재 행을 들여 쓰기 위해 (및 indent-region을 호출 할 때와 같은 다양한 명령) 사용되는 함수입니다. 들여 쓰기 모드로 명령은 더 이상이 함수를 호출하지 않습니다.

[...]

많은 모드에서 기본값은 들여 쓰기 기준입니다.

들여 쓰기 기준 @ emacs 매뉴얼에서 :

들여 쓰기 기준 이전 공백이 아닌 줄의 다음 들여 쓰기 지점 아래로 공백.

[...]

이전의 비 공백 라인이 열 포인트 시작점을 넘어서서 들여 쓰기 포인트가 없다면,`tab-to-tab-stop '이 대신 수행됩니다.

Indent-line-function의 값을 insert-tab 함수로 변경하고 탭 삽입을 4 개의 공백으로 구성하십시오.

133
alcortes

업데이트 : 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))
64
phils

다음과 같이 탭을 설정하는 것이 더 쉬울 수 있습니다.

M-x customize-group

에서 Customize group: 프롬프트 indent를 입력하십시오.

들여 쓰기 옵션을 모두 설정하고 현재 세션에 대해 설정하거나 향후 모든 세션에 저장할 수있는 화면이 표시됩니다.

이렇게하면 사용자 정의 파일 설정 을 원할 것입니다.

21
Dave Webb
(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)
11
Yan Li
(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++ 코드와 주석 내부에서도 작동합니다.

9
user2318996
(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)
9
lawlist

이 문제는 탭 중지 누락으로 인한 것이 아닙니다. emacs에는 테이블 형식의 데이터를 정렬하도록 설계된 들여 쓰기 기준이라는 (새로운?) 탭 방법이 있습니다. Tab 키는 indent-for-tab-command 메소드에 맵핑됩니다.이 메소드는 indent-line-function 변수가 설정되어있는 모든 메소드를 호출합니다.이 메소드는 텍스트 모드의 들여 쓰기 상대 메소드입니다. indent-line-function 변수를 대체하는 좋은 방법을 찾지 못했습니다 (텍스트 모드 후크가 작동하지 않으므로 모드 후크가 실행 된 후 재설정 될 수 있습니까?). 그러나 이것을 제거하는 간단한 방법 TAB을 더 간단한 tab-to-tab-stop 방법으로 설정하여 tab-in-to-command 명령 방법을 실행하는 것입니다.

(키 텍스트 모드 맵 정의 (kbd "TAB") '탭-탭-정지)

7
Glenn

이 시도:

(add-hook 'text-mode-hook
  (function
   (lambda ()
     (setq tab-width 4)
     (define-key text-mode-map "\C-i" 'self-insert-command)
     )))

그러면 TAB은 항상 4 문자마다 탭 정지가있는 리터럴 TAB 문자를 삽입합니다 (단, 텍스트 모드에서만). 그것이 당신이 원하는 것이 아닌 경우,보고 싶은 행동을 설명하십시오.

6
cjm

이러한 코드 줄을 .emacs 파일에 추가 할 수 있습니다. 들여 쓰기 기준이 아닌 insert-tab을 사용하기 위해 텍스트 모드에 대한 후크를 추가합니다.

(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)))

도움이 되길 바랍니다.

6
gigilibala

이것을 .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)

즐겨!

4
qwerty9967

C-set-style로 스타일을 바꾸는 것만으로 충분했습니다.

4
dividebyzero

맞춤 설정은 (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)
2
Yary

.emacs 파일에 이것을 쓸 때까지 가장 좋은 답변이 작동하지 않았습니다.

(global-set-key (kbd "TAB") 'self-insert-command)
1
user1009285

이것은 탭을 공백으로 변환하거나 변환하지 않고 탭을 삽입하지 못하게하는 유일한 솔루션입니다. 둘 다 적절 해 보였지만 낭비였습니다.

(setq-default
    indent-tabs-mode nil
    tab-width 4
    tab-stop-list (quote (4 8))
)

quote가 작동하려면 두 개의 숫자가 필요합니다.

또한 대부분의 주요 모드 (예 : Python)에서 Emacs에서는 들여 쓰기가 자동으로 수행됩니다. 자동 들여 쓰기 이외의 들여 쓰기가 필요한 경우 다음을 사용하십시오.

M-i

1
ryanpcmcquen

Init 파일에서 탭 대신 공백을 원했기 때문에 다릅니다.

 
 (add-hook 'sql-mode-hook 
 (람다 () 
 (progn 
) (setq-default tab-width 4)) 
 (setq 들여 쓰기-탭 모드 nil) 
 (setq 들여 쓰기-라인 기능 '탭-탭-멈춤'
 (-수정 구문 구문? _ "w "); 이제 '_'는 단어 구분 기호로 간주되지 않습니다 
 (modify-syntax-entry?-"w "); 이제 '-'는 단어 구분 기호로 간주되지 않습니다 
) ) 
0
forkandwait

당신이 시도 했습니까

(setq  tab-width  4)
0
GrokCode

그런데 C-mode 에 대해 (setq-default c-basic-offset 4) ~ .emacs. 자세한 내용은 http://www.emacswiki.org/emacs/IndentingC 를 참조하십시오.

0
flyrain
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
0
waseemq