为什么我的Emacs正则表达式与^匹配行的开头?

时间:2010-11-10 05:05:08

标签: regex emacs dot-emacs

我正在尝试设置.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 个答案:

答案 0 :(得分:7)

这是因为文件名前面有一个路径组件,请尝试:

"/makefile[^/]*$"

请参阅http://www.gnu.org/s/emacs/manual/html_node/elisp/Auto-Major-Mode.html(页面底部)

EDI:根据肖恩评论更正了正则表达式

答案 1 :(得分:1)

所以这只是一个有根据的猜测,但我注意到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))

代替。

答案 2 :(得分:0)

为方便起见,试试

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