为啥我的带有 ^ 的 Emacs 正则表达式不能匹配行的开头?
Posted
技术标签:
【中文标题】为啥我的带有 ^ 的 Emacs 正则表达式不能匹配行的开头?【英文标题】:Why doesn't my Emacs regular expression with ^ to match the start of a line work?为什么我的带有 ^ 的 Emacs 正则表达式不能匹配行的开头? 【发布时间】:2010-11-10 05:05:07 【问题描述】:我正在尝试设置.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))
谁能解释一下原因?
【问题讨论】:
【参考方案1】:是因为文件名前面有路径组件,试试:
"/makefile[^/]*$"
见http://www.gnu.org/s/emacs/manual/html_node/elisp/Auto-Major-Mode.html(页面底部)
EDI:根据 Sean 评论更正正则表达式
【讨论】:
该正则表达式还将匹配 /foo/makefiles/bar 之类的内容。我想你想要“/makefile[^/]*$”。 幸运的是我没有 /foo/makefiles/bar 之类的东西,但感谢 Sean 的更正。【参考方案2】:所以这只是一个有根据的猜测,但我注意到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))
改为。
【讨论】:
【参考方案3】:为了方便,试试
(add-to-list 'auto-mode-alist ...
【讨论】:
感谢您的提示。我的emacs知识很差。以上是关于为啥我的带有 ^ 的 Emacs 正则表达式不能匹配行的开头?的主要内容,如果未能解决你的问题,请参考以下文章