由于某种原因,我的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表达式在我的书中很烦人).
| 归档时间: |
|
| 查看次数: |
5240 次 |
| 最近记录: |