चूंकि कुछ लोगों ने इसके लिए कहा, मैंने इस जवाब को एक पैकेज में बदल दिया
।
यदि आपके पास मेलपा कॉन्फ़िगर है, तो आप इसे स्थापित कर सकते हैं
M-x package-install RET aggressive-indent
सभी विकल्पों के लिए रीडमी देखें , लेकिन इसे चालू करने का सबसे सरल तरीका है:
(add-hook 'emacs-lisp-mode-hook #'aggressive-indent-mode)
पुराना उत्तर
निम्नलिखित केवल ऑटो-इंडेंटेशन करता है, जो कि अपरिहार्य बफ़र्स पर होता है। यह तब भी काम करता है जब आप सामान को मिटा देते हैं (या केवल टाइप करने के बजाय)। अन्य मोड में भी इसे जोड़ना आसान है।
यह फ़ंक्शन वर्तमान में अंदर जो भी एस-एक्सप्रेशन है, उसे इंडेंट करेगा। यदि आप चाहें, तो आप इसे एक कुंजी से बांध सकते हैं, लेकिन पहले नीचे देखें।
(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))))))
यह हुक ऐसा बना देगा कि यह फ़ंक्शन आपके द्वारा कुछ भी टाइप करने के बाद चलाया जाएगा, लेकिन केवल क्विक बफ़र्स में। यह सब कुछ हमेशा प्रेरित रखना चाहिए।
(add-hook
'emacs-lisp-mode-hook
(lambda ()
(add-hook 'post-command-hook
#'endless/indent-defun nil 'local)))
कोशिश करो! यह उल्लेखनीय रूप से अच्छी तरह से काम करता है।
इसके अलावा, टिप्पणियों में @ holocronweaver के सुझाव के बाद, आप सी जैसी भाषाओं के लिए कुछ का उपयोग कर सकते हैं:
(define-key c++-mode-map ";"
(lambda () (interactive)
(insert ";")
(endless/indent-defun)))