我有一长串文件和文件扩展名,我希望 Emacs 在 ruby​​ 模式下自动打开。从使用谷歌开始,最基本的解决方案是这样的:

(setq auto-mode-alist (cons '("\.rake$"    . ruby-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\.thor$"    . ruby-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("Gemfile$"   . ruby-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("Rakefile$"  . ruby-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("Crushfile$" . ruby-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("Capfile$"   . ruby-mode) auto-mode-alist))

这对我来说似乎是重复的。有没有一种方法可以定义一次对列表,然后将其直接循环或 cons 到 auto-mode-alist 上?我试过了
(cons '(("\\.rake" . ruby-mode)
         ("\\.thor" . ruby-mode)) auto-mode-alist)

但这似乎不起作用。有什么建议么?

最佳答案

您只需要一个正则表达式(因此是 auto-mode-alist 中的条目)来匹配所有这些选项,并且您可以让 regexp-opt 为您完成构建它的工作。

(let* ((ruby-files '(".rake" ".thor" "Gemfile" "Rakefile" "Crushfile" "Capfile"))
       (ruby-regexp (concat (regexp-opt ruby-files t) "\\'")))
  (add-to-list 'auto-mode-alist (cons ruby-regexp 'ruby-mode)))

如果您特别想要单独的条目,您可以执行以下操作:

(mapc
 (lambda (file)
   (add-to-list 'auto-mode-alist
                (cons (concat (regexp-quote file) "\\'") 'ruby-mode)))
 '(".rake" ".thor" "Gemfile" "Rakefile" "Crushfile" "Capfile"))

关于emacs - 如何将一组对列表添加到 auto-mode-alist 上?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11027783/

10-13 07:27