在Emacs中打开文件时如何为Shell-script模式指定shell方言?
你之前的写法触发警告是因为Emacs默认会对模式行中的eval语句做安全校验,避免加载恶意文件时执行不受信的代码,改用Shell-script模式内置的sh-shell变量指定方言即可解决,不需要用到eval,有以下几种可选方案:
解决方案
单文件模式行方案
把你原来的模式行替换成下面的标准写法即可:# -*- mode: Shell-script; sh-shell: bash; -*-这是Emacs模式行的原生用法,直接为当前文件的局部变量赋值。
sh-shell是sh-mode官方提供的用于指定shell方言的变量,可选值包括bash、sh、zsh、ksh等,和你需要匹配的方言对应即可。目录批量配置方案
如果这类供source调用的脚本都存放在固定的目录下,可以不用给每个文件单独加模式行,直接在对应目录下新建.dir-locals.el文件,写入以下内容:((sh-mode . ((sh-shell . "bash"))))这样该目录(包括子目录)下所有进入Shell-script模式的文件,都会自动使用bash作为默认方言,不需要修改任何业务文件内容。
全局规则配置方案
如果这类文件有统一的命名规则(比如统一后缀为.bashlib、.inc.sh等),可以直接在你的Emacs配置文件中加一条全局规则:(add-to-list 'auto-mode-alist '("\\.inc\\.sh\\'" . (lambda () (sh-mode) (setq-local sh-shell "bash"))))把正则中的
.inc.sh替换成你实际的文件后缀匹配规则即可,所有匹配的文件打开后会自动进入带bash方言的Shell-script模式。
内容的提问来源于stack exchange,提问作者jwm
相关产品推荐
相关产品推荐

