Emacs shell脚本模式钩子

use*_*592 6 emacs bash shell

由于某种原因,我的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)))

同样的负面结果 - 不确定这是否相关虽然......

phi*_*ils 10

shell-script-mode是别名sh-mode.我没有检查,但我怀疑只评估'真实'函数名的钩子变量,所以我认为sh-mode-hook是要使用的.

无论如何,你的语法没有什么破坏,因此使用时可能会有些不妥(rainbow-delimiters-mode 1).例如,您应该能够观察到以下情况正常:

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

FWIW,对于钩子,我建议根本不使用匿名函数,因为如果它被命名,更新钩子函数容易得多(在添加更新的函数之前从变量中删除旧的lambda表达式在我的书中很烦人).