Почему мое регулярное выражение Emacs с ^, чтобы соответствовать началу строки, не работает? - PullRequest
5 голосов
/ 10 ноября 2010

Я пытаюсь настроить .emacs, чтобы любой файл, который начинается с букв makefile, переводил его в режим makefile. Например. makefile-something должен быть в режиме makefile.

Это не работает:

(setq auto-mode-alist (cons '("^makefile" . makefile-mode) auto-mode-alist))

Но это так:

(setq auto-mode-alist (cons '("makefile" . makefile-mode) auto-mode-alist))

Кто-нибудь может объяснить, почему?

Ответы [ 3 ]

7 голосов
/ 10 ноября 2010

Это потому, что перед именем файла есть компонент пути, попробуйте:

"/makefile[^/]*$"

см. http://www.gnu.org/s/emacs/manual/html_node/elisp/Auto-Major-Mode.html (внизу страницы)

EDI: исправлено регулярное выражение в соответствии с комментарием Шона

1 голос
/ 10 ноября 2010

Так что это только обоснованное предположение, но я заметил, что другие регулярные выражения в auto-mode-alist, которые хотят соответствовать началу имени файла, не используют ^, они используют /. Например:

("/\\.?\\(?:gnokiirc\\|kde.*rc\\|mime\\.types\\|wgetrc\\)\\'" . conf-mode)

(из Emacs 23.2.1) Исходя из этого, я думаю, что, возможно, регулярное выражение применяется к полному пути файла, а не к базовому имени. Так что попробуйте

(setq auto-mode-alist (cons '("/makefile" . makefile-mode) auto-mode-alist))

вместо.

0 голосов
/ 10 ноября 2010

Просто для удобства, попробуйте

 (add-to-list 'auto-mode-alist ...
...