在 emacs 中读取文件时,如何为 Shell-脚本模式设置 "shell"?

When reading a file in emacs, how can I set the "shell" for Shell-script mode?

我有一些文件不是 shell 脚本 本身 ,而是设计为由 shell 脚本获取。因此,文件名与 auto-mode-alist 中的任何模式都不匹配(我也没有兴趣尝试为每个文件更新)。

当我编辑我的 bash 脚本之一时(例如,foo.bash),emacs 正确地推断出 shell 和模式行显示 Shell-script[bash]。我认为这是基于文件名还是 shebang 行并不重要。我想对我的“非脚本”脚本文件强制执行此行为。

我想到的是这个:

# -*- mode: Shell-script; eval (sh_set_shell "bash"); -*-

但这给出了关于 eval 的警告(这是正确的)。我还能如何为 Shell-脚本模式设置方言?

除了主要模式之外,您还可以使用文件局部变量块并设置sh-shell

# Local Variables:
# mode: shell-script
# sh-shell: bash
# End:

如果你不喜欢这个大的(可读性更好:))块,一个衬里就可以了(根据下面的@jwm 评论):

# -*- mode: Shell-script; sh_shell: "bash"; -*-

Nota Bene: 根据文档,使用文件局部变量 sh-shell 等同于调用 sh-set-shell,以及设置的预期方式这是:

Shell script files can cause this function be called automatically when the file is visited by having a `sh-shell' file-local variable whose value is the shell name (don't quote it).