2015-04-01 89 views
0

我有幾個輸出SQL的bash腳本。 99%的時間我希望emacs在sql-mode中編輯它。我插入到這一點我.emacs文件:在emacs中設置模式

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

我得到正確的方式,如果我打開一個不存在的文件中像emacs的內「foobar.sql.sh」。但是,如果我打開一個#!/bin/bash作爲第一行的現有文件,我將獲得shell腳本模式。我如何改變它,以便獲得sql模式?

+1

這可能是因爲魔模式ALIST正在優先於自動模式ALIST – PuercoPop 2015-04-02 15:03:59

回答

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

+0

對我的作品上的Emacs 22.1.1。我用'(delete'(「bash」.sh-mode)interpreter-mode-alist)'刪除了這個條目 – dan 2015-04-02 20:39:56