Существует несколько способов определения основного режима для файла, который не зависит от расширения, см. Выбор режимов файла в руководстве.
В зависимости от типов файлов, с которыми вы имеете дело, возможно, вы можете использовать magic-mode-alist
. Также обратите внимание, что auto-mode-alist
это не ограничивается соответствующими расширениями: вы можете сопоставить любую часть имени файла или пути.
Если файлы, с которыми вы работаете, недостаточно согласованы для этих механизмов, можно добавить auto-mode-alist
записи, которые соответствуют полному имени файла или корневому пути какого-либо проекта, и вызвать пользовательскую функцию для сопоставления имен с режимами.
Если все файлы в данном каталоге имеют одинаковый тип, вы также можете использовать локальную переменную directory для установки режима. Переменные каталога могут быть установлены в вашем файле инициализации, а не в файле .dir-locals - подробности см. В разделе Переменные каталога .
Обновить
Вот быстрая попытка управления собственным списком абсолютных имен файлов и основных режимов.
(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 -*-
и это поможет Emacs использоватьconf-mode
. Если их немного, и вы можете сопоставить их с помощью регулярного выражения, вы можете добавить регулярное выражение вautomode-alist
.