簡體   English   中英

Emacs shell腳本模式鈎子

[英]Emacs shell script mode hook

由於某種原因,我的shell腳本模式掛鈎不會被執行。 我的.emacs中的示例:

(add-hook 'shell-script-mode-hook (lambda () (rainbow-delimiters-mode 1)))

導致設置變量,但未為打開的腳本文件加載模式。 在這里掛鈎的正確方法是什么?

我使用默認的shell腳本模式(modeline表示例如Shell-script[bash] )。 我是否必須單獨掛鈎每個shell類型(sh,bash,zsh)? 如果是的話,請告訴我怎么樣?

非常感謝你!

EDIT3:

事實證明是由於textmate模式與sh-mode中的骨架對插入沖突(我試圖通過在sh模式中禁用textmate來避免沖突,然后在sh-mode中留下了sh-mood-hook aparatus我完全刪除了textmate模式,現在使用標准的骨架對approch globaly。

我會接受phils回答 - 沒有他,我可能無法自己調試。

EDIT2:

感謝phils,我認為他的評論讓我們更接近解決方案。 然而,彩虹分隔符並不是問題。 我刪除了除你的hello消息之外的所有sh-mode-hook並重新啟動Emacs。 當我打開.sh文件時,我得到了這個:

為shell類型bash設置縮進設置縮進內容縮進變量現在是本地的。 shell類型bash的縮進設置文件模式規范錯誤:(void-function nil)

注意沒有“你好”的消息。 sh-mode-hook的值是: (nil (lambda nil (message "hello")))

我認為這個問題是第一個零值 - 盡管我沒有看到它會被設置在任何地方。

如果我評價這個:

(setq sh-mode-hook t) (add-hook 'sh-mode-hook (lambda () (message "hello")))

我看到了hello消息,但是在重新啟動之后(我將這些行放在.emacs中)它再次消失(nil再次位於掛鈎之上)。

知道怎么做才能在安裝時有活動的鈎子嗎?

編輯1:我也嘗試過:

(add-hook 'sh-mode-hook (lambda () (rainbow-delimiters-mode 1)))

同樣的負面結果 - 不確定這是否相關雖然......

shell-script-modesh-mode的別名。 我沒有檢查過,但我懷疑只評估'真實'函數名的鈎子變量,所以我認為sh-mode-hook是要使用的。

無論如何,你的語法沒有什么破壞,因此使用(rainbow-delimiters-mode 1)可能會有些不對勁。 例如,您應該能夠觀察到以下情況正常:

(add-hook 'sh-mode-hook (lambda () (message "hello")))

FWIW,對於鈎子,我建議根本不使用匿名函數,因為如果它被命名,更新鈎子函數容易得多 (在添加更新的函數之前從變量中刪除舊的lambda表達式在我的書中很煩人)。

嘗試刪除':

(add-hook 'shell-script-mode-hook (lambda () (rainbow-delimiters-mode 1)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM