在emacs中设置模式

时间:2015-04-01 18:19:22

标签: elisp

我有几个输出SQL的bash脚本。 99%的时间我希望emacs在sql-mode中编辑它。我把它插入我的.emacs文件中:

(add-to-list 'auto-mode-alist '("\\.sql\\.sh\\'" . sql-mode))

如果我在emacs中打开像'foobar.sql.sh'这样的非现有文件,我会得到正确的模式。但是,如果我打开一个以#!/bin/bash作为第一行的现有文件,我将获得shell-script-mode。如何更改它以便我获得sql-mode?

1 个答案:

答案 0 :(得分:0)

如果您检查interpreter-mode-alist变量,则会找到("r?bash2?" . sh-mode)("bash" . sh-mode)之类的条目,具体取决于您运行的emacs版本。此设置优先于magic-mode-alistauto-mode-alist

我建议从interpreter-mode-alist删除该条目,删除您添加到auto-mode-alist的新条目,然后向magic-mode-alist添加两个新条目:

(add-to-list 'magic-mode-alist '("r?bash2?" . sh-mode))
(add-to-list 'magic-mode-alist
  '((lambda ()
      (string-match "\\.sql\\.sh$" (buffer-file-name))) . sql-mode))

请务必按此顺序添加它们,以便第二个位于结果列表中的第一个之前(是的,还有其他方法可以做到这一点,但为了清楚起见,我是以这种方式显示它)。将首先尝试的第二个条目检查缓冲区名称以查看它是否与.sql.sh后缀匹配,如果是,则设置sql-mode。如果该匹配失败,则另一个条目检查缓冲区的开头是否为interpreter-mode-alist寻找的相同模式,如果匹配则设置sh-mode