Я начал писать сценарии Emacs в соответствии с указаниями, указанными в http://www.emacswiki.org/emacs/EmacsScripts,, которые в основном говорят, что ваши сценарии должны начинаться с:
:;exec emacs --script "$0" $@
Теперь я хотел бы настроить auto-mode-interpreter-regexp' accordingly, to make Emacs scripts automatically loaded with
emacs-lisp-mode '.
Первоначальный `auto-mode-interpreter-regexp' должен был соответствовать:
#! /bin/bash
#! /usr/bin/env perl
и т. д., и, таким образом, это был тот1012 *
"\\(?:#![ ]?\\([^ \n]*/bin/env[ ]\\)?\\([^ \n]+\\)\\)"
Я попытался добавить новое регулярное выражение в качестве альтернативы:
(setq auto-mode-interpreter-regexp
(concat ;; match "#! /bin/bash", "#! /usr/bin/env perl", etc.
"\\(?:#![ ]?\\([^ \n]*/bin/env[ ]\\)?\\([^ \n]+\\)\\)"
;; or
"\\|"
;; match ":;exec emacs "
"\\(?::;[ ]?\\(exec\\)[ ]+\\([^ \n]+\\)[ ]*\\)"))
, но этот, хотя и совпадает со всей строкой, не смог захватить его подсовпадения, особенно второй, который необходимобнаружить переводчика.Таким образом, я смешал регулярное выражение, чтобы сопоставить оба заголовка одновременно:
(setq auto-mode-interpreter-regexp
(concat ;; match "#!" or ":;"
"\\(?:#!\\|:;\\)"
;; optional spaces
"[ ]?"
;; match "/bin/bash", "/usr/bin/env" or "exec"
"\\(\\[^ \n]*/bin/env[ ]\\|exec[ ]\\)?"
;; match interpreter
"\\([^ \n]+\\)"))
Могли бы я сделать лучше?Спасибо.