如何在Emacs正则表达式中为auto-mode-alist匹配.ASM和.S?

时间:2016-10-10 08:31:44

标签: regex emacs

  

如何在Emacs正则表达式中为auto-mode-alist匹配.ASM和.S?

我尝试编写如下的正则表达式,但它不起作用,即.asm和.s文件不被识别为属于nasm模式。

(require 'nasm-mode)
(add-to-list 'auto-mode-alist '("\\.\(ASM\)\|S\\'" . nasm-mode))

但是,仅匹配.asm的简化版本可以正常工作:

(require 'nasm-mode)
(add-to-list 'auto-mode-alist '("\\.ASM\\'" . nasm-mode))

另外,为什么我使用大写字符? (我遵循了nasm-mode.el中的描述。)

2 个答案:

答案 0 :(得分:1)

直接回答问题(总是使用double \,因为字符串解释“使用”第一个和正则表达式代码第二个):

(add-to-list 'auto-mode-alist '("\\.\\(ASM\\|S\\)\\'" . nasm-mode))

替代方式我会用

(add-to-list 'auto-mode-alist '("\\.ASM\\'" . nasm-mode))
(add-to-list 'auto-mode-alist '("\\.S\\'" . nasm-mode))

答案 1 :(得分:1)

(add-to-list 'auto-mode-alist `(,(concat (regexp-opt '(".ASM" ".S")) "\\'") . nasm-mode))

regexp-opt获取字符串列表(不是正则表达式),并构建一个匹配任何字符串的正则表达式。这里有点矫枉过正,但它很适合匹配较长的字符串列表。