当文件为不是一个独立的程序?
sh
Emacs 允许我通过在编辑器提示中设置局部变量来指定应在模式下打开 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-shell
或sh-shell-file
作为文件本地变量来允许这一点。但实际上两者都不起作用。请考虑向维护者提交sh-mode
有关此问题的错误报告。它看起来真的应该像添加sh-shell: bash
到文件本地变量块一样简单,这甚至可能是最初的意图,但它就是不起作用。
有效的方法是以下任一项:
给您的文件命名以 结尾的名称
.bash
。添加
eval: (sh-set-shell "bash")
到文件局部变量块。默认情况下,Emacs 会显示一条警告,指出这可能是不安全的代码,但可以禁用该警告。