যেহেতু কিছু লোক এটি চেয়েছিল, আমি এই উত্তরটিকে একটি প্যাকেজে পরিণত করেছি
।
আপনার যদি মেলপা কনফিগার করা থাকে তবে আপনি এটি দিয়ে ইনস্টল করতে পারেন
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)))
চেষ্টা করে দেখুন! এটি লক্ষণীয়ভাবে ভাল কাজ করে।
এছাড়াও, মন্তব্যে @ হোলোক্রোনউইভারের পরামর্শ অনুসরণ করে, আপনি সি-জাতীয় ভাষার জন্য নীচের মতো কিছু ব্যবহার করতে পারেন:
(define-key c++-mode-map ";"
(lambda () (interactive)
(insert ";")
(endless/indent-defun)))