在 Emacs 本地变量中为文件指定 shell 变体

在 Emacs 本地变量中为文件指定 shell 变体

当文件为不是一个独立的程序?

shEmacs 允许我通过在编辑器提示中设置局部变量来指定应在模式下打开 shell 包含文件:

# Local variables:
# coding: utf-8
# mode: sh
# End:
# vim: fileencoding=utf-8 filetype=bash :

我可以向 Vim 指定文件的 shell 变体是 Bash,它会遵从编辑器提示来显示特定的 Bash 语法高亮。但 Emacs 有sh覆盖所有 shell 变体的模式。

如果文件包含 shebang 行(例如#! /bin/bash),Emacs 将正确解释此类文件。但有些文件不是独立程序,因此我不希望这些文件包含 shebang 行。

Emacssh模式将这些文件视为 Posix shell 语法,但事实并非如此。sh模式有 shell 语法“变体”的概念;但我无法在文件的编辑器提示中找到如何指定对文件使用哪种变体。

我如何在文件中设置编辑器提示来告诉 Emacs 它的语法是 Bash?

更新2014-04-24:我已举报Emacs 错误#17333对于这种缺失的行为。

答案1

查看sh-mode代码,似乎有人可能打算通过设置sh-shellsh-shell-file作为文件本地变量来允许这一点。但实际上两者都不起作用。请考虑向维护者提交sh-mode有关此问题的错误报告。它看起来真的应该像添加sh-shell: bash到文件本地变量块一样简单,这甚至可能是最初的意图,但它就是不起作用。

有效的方法是以下任一项:

  1. 给您的文件命名以 结尾的名称.bash

  2. 添加eval: (sh-set-shell "bash")到文件局部变量块。默认情况下,Emacs 会显示一条警告,指出这可能是不安全的代码,但可以禁用该警告。

相关内容