어떤 사람들은 그것을 요청했기 때문에이 답변 을 패키지로 바꿨습니다
.
Melpa를 구성한 경우 다음과 같이 설치할 수 있습니다.
M-x package-install RET aggressive-indent
모든 옵션에 대해서는 Readme 를 참조하십시오. 가장 간단한 방법은 다음과 같습니다.
(add-hook 'emacs-lisp-mode-hook #'aggressive-indent-mode)
옛 대답
다음은 elisp 버퍼에서만 자동 들여 쓰기를 수행합니다. 입력하는 대신 물건을 지우거나 k 때 작업하는 이점도 있습니다. 다른 모드에도 쉽게 추가 할 수 있습니다.
이 함수는 현재 내부에있는 s- 표현을 들여 쓰기합니다. 원하는 경우 키에 바인딩 할 수 있지만 먼저 아래를 참조하십시오.
(require 'cl-lib)
(defun endless/indent-defun ()
"Indent current defun.
Do nothing if mark is active (to avoid deactivating it), or if
buffer is not modified (to avoid creating accidental
modifications)."
(interactive)
(ignore-errors
(unless (or (region-active-p)
buffer-read-only
(null (buffer-modified-p)))
(let ((l (save-excursion (beginning-of-defun 1) (point)))
(r (save-excursion (end-of-defun 1) (point))))
(cl-letf (((symbol-function 'message) #'ignore))
(indent-region l r))))))
이 후크는 아무것도 입력 한 후 elisp 버퍼에서만이 기능이 실행되도록합니다. 이렇게하면 모든 것이 항상 들여 쓰기됩니다.
(add-hook
'emacs-lisp-mode-hook
(lambda ()
(add-hook 'post-command-hook
#'endless/indent-defun nil 'local)))
시도 해봐! 그것은 잘 작동합니다.
또한 주석에서 @holocronweaver의 제안에 따라 c와 같은 언어에 다음과 같은 것을 사용할 수 있습니다.
(define-key c++-mode-map ";"
(lambda () (interactive)
(insert ";")
(endless/indent-defun)))