Câu trả lời được chấp nhận thực sự là sai. Emacswiki sẽ không giúp.
Chèn mã sau vào ~ /.emacs:
(defun fix-c-indent-offset-according-to-syntax-context (key val)
;; remove the old element
(setq c-offsets-alist (delq (assoc key c-offsets-alist) c-offsets-alist))
;; new value
(add-to-list 'c-offsets-alist '(key . val)))
(add-hook 'c-mode-common-hook
(lambda()
(when (derived-mode-p 'c-mode 'c++-mode 'java-mode)
;; indent
(fix-c-indent-offset-according-to-syntax-context 'substatement-open 0))
))
Xem http://blog.binchen.org/posts/ccjava-code-indentation-in-emacs.html để biết chi tiết kỹ thuật.
Vấn đề chính là đặt bù trừ c-set là không đáng tin cậy để phát hiện ngữ cảnh cú pháp nữa (Emacs24.3.1). Vì vậy, cách đáng tin cậy duy nhất là phân tích mã emacs ban đầu. Các bước chi tiết để hack mã được liệt kê trong bài viết của tôi, về cơ bản bạn cần đọc hàm c-indent-line được định nghĩa trong /usr/share/emacs/24.3/lisp/progmodes/cc-cmds.el
Một số người phàn nàn rằng thiết lập của tôi không hoạt động. Trên thực tế, nó hoạt động ở tất cả các phiên bản ổn định của Emacs (23.4, 24.3, 24.4) nếu bạn không thay đổi thiết lập mặc định (Indention có cấu hình khác nhau, thiết lập của tôi dựa trên cấu hình mặc định).
Điểm mấu chốt của tôi là, về vấn đề cụ thể này, bạn cần đọc mã.
Nguồn
2014-09-26 03:09:43
Đối với hồ sơ, điều này chế độ thụt đầu dòng là kiểu GNU Tất cả các chương trình GNU được yêu cầu theo phong cách thụt lề này – greyfade
vâng tôi đọc ở đâu đó, nhưng tôi không thể đứng đó –
Thực tiễn tốt là viết mã cho người dùng của bạn chứ không phải chính bạn. Mã GNU sử dụng các kiểu khác –