Có một số cách để xác định chế độ chính cho một tệp không dựa vào tiện ích mở rộng, xem phần Chọn chế độ tệp trong hướng dẫn.
Tùy thuộc vào loại tệp bạn đang xử lý, có lẽ bạn có thể sử dụng magic-mode-alist
. Cũng lưu ý rằng auto-mode-alist
không giới hạn đối với các tiện ích mở rộng phù hợp: bạn có thể khớp bất kỳ phần nào của tên tệp hoặc đường dẫn.
Nếu các tệp bạn đang xử lý không đủ nhất quán cho các cơ chế đó, một tùy chọn là thêm auto-mode-alist
các mục khớp với toàn bộ tên tệp hoặc khớp với đường dẫn gốc của một số dự án và gọi một hàm tùy chỉnh để khớp tên với các chế độ.
Nếu tất cả các tệp trong một thư mục đã cho là cùng loại, bạn cũng có thể sử dụng biến thư mục cục bộ để đặt chế độ. Các biến thư mục có thể được đặt trong tệp init của bạn chứ không phải trong tệp .dir-locals - xem Biến thư mục để biết chi tiết.
Cập nhật
Đây là một nỗ lực nhanh chóng trong việc quản lý các tên tệp và chế độ chính tuyệt đối của riêng bạn.
(defvar my-custom-mode-alist '())
(defvar my-custom-mode-alist-file (expand-file-name "custom-file-assoc" user-emacs-directory))
;; command to save the file->mode association of the current buffer
(defun save-file-mode-association ()
(interactive)
(when buffer-file-name
(add-to-list 'my-custom-mode-alist (cons buffer-file-name major-mode))
(write-custom-mode-alist my-custom-mode-alist-file)))
(defun write-custom-mode-alist (file)
(with-current-buffer (get-buffer-create " *Custom File Assocations*")
(goto-char (point-min))
(delete-region (point-min) (point-max))
(pp my-custom-mode-alist (current-buffer))
(condition-case nil
(write-region (point-min) (point-max) file)
(file-error (message "Can't write %s" file)))
(kill-buffer (current-buffer))
(message "Wrote custom file associations to file %s" file)))
(defun load-custom-mode-alist (file)
(when (file-exists-p file)
(with-current-buffer
(let ((enable-local-variables nil))
(find-file-noselect file))
(goto-char (point-min))
(setq my-custom-mode-alist (read (current-buffer)))
(setq auto-mode-alist (append auto-mode-alist my-custom-mode-alist))
(kill-buffer (current-buffer)))))
;; Load any custom file associations and add them to auto-mode-alist
(load-custom-mode-alist my-custom-mode-alist-file)
# -*- mode: conf -*-
và điều đó sẽ khiến Emacs không sử dụngconf-mode
. Nếu có một vài trong số chúng và bạn có thể kết hợp chúng thông qua biểu thức chính quy, bạn có thể thêm biểu thức chính quyautomode-alist
.