在 emacs 中设置模式
Setting mode in emacs
我有几个 bash 脚本输出 SQL。 99% 的时间我希望 emacs 在 sql 模式下编辑它。我将其插入到我的 .emacs 文件中:
(add-to-list 'auto-mode-alist '("\.sql\.sh\'" . sql-mode))
如果我在 emacs 中打开一个不存在的文件,如 'foobar.sql.sh',我会得到正确的模式。但是,如果我打开一个第一行为 #!/bin/bash
的现有文件,我会得到 shell-script-mode。我如何更改它以便获得 sql-模式?
如果您检查您的 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
。
我有几个 bash 脚本输出 SQL。 99% 的时间我希望 emacs 在 sql 模式下编辑它。我将其插入到我的 .emacs 文件中:
(add-to-list 'auto-mode-alist '("\.sql\.sh\'" . sql-mode))
如果我在 emacs 中打开一个不存在的文件,如 'foobar.sql.sh',我会得到正确的模式。但是,如果我打开一个第一行为 #!/bin/bash
的现有文件,我会得到 shell-script-mode。我如何更改它以便获得 sql-模式?
如果您检查您的 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
。