Phần Smart inference of indentation style của trang Không may trên EmacsWiki rất hữu ích. Nó cho bạn thấy cách thiết lập khoảng trống cho hầu hết các dự án, nhưng chuyển sang tab nếu tệp bạn đang chỉnh sửa có nhiều dòng bắt đầu bằng tab hơn các dòng bắt đầu bằng dấu cách.
Dưới đây là các mã:
(defun infer-indentation-style()
;; if our source file uses tabs, we use tabs, if spaces spaces, and if
;; neither, we use the current indent-tabs-mode
(let ((space-count (how-many "^ " (point-min) (point-max)))
(tab-count (how-many "^\t" (point-min) (point-max))))
(if (> space-count tab-count) (setq indent-tabs-mode nil))
(if (> tab-count space-count) (setq indent-tabs-mode t))))
[trong móc c-mode của tôi, hoặc bất kỳ phương tiện khác mà tôi muốn có thụt đầu dòng smart]
(setq indent-tabs-mode nil)
(infer-indentation-style)
Điều này có thể vẫn là một vấn đề khi chỉnh sửa các tệp mới phải luôn có các tab như makefiles. Đối với những người, móc chế độ của bạn sẽ chỉ cần đặt nó vào các tab. Ví dụ:
(add-hook 'makefile-mode-hook
'(lambda()
(setq indent-tabs-mode t)
)
)
Có, đối với emacs, việc chèn tab thay vì không gian sẽ tự động nếu bạn ở chế độ makefile (hoặc chế độ BSDmakefile). Nếu bạn bằng cách nào đó cần phải chèn một tab khi bạn không thể do cấu hình sai lầm sử dụng "C-q tab". –