我有几个输出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? p>
答案 0 :(得分:0)
如果您检查interpreter-mode-alist
变量,则会找到("r?bash2?" . sh-mode)
或("bash" . sh-mode)
之类的条目,具体取决于您运行的emacs版本。此设置优先于magic-mode-alist
和auto-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
。