Emacs中如何为特定文件配置shell脚本语法高亮
自定义配置不生效的原因
你写的文件名匹配正则有误:
配置里的正则是"\\.bashrc__common\\.",末尾的\\.表示必须匹配一个字面量的.字符,但你的目标文件是~/.bashrc__common,common后直接是文件名结尾,没有额外的点,自然匹配不上规则。
先理清楚这行配置的逻辑:auto-mode-alist是Emacs内置的映射列表,每条规则的格式是(文件名正则 . 对应要启用的主模式)。Emacs打开文件时会从列表头部开始遍历,拿每条规则的正则去匹配当前文件的完整路径+文件名,第一个匹配成功的规则对应的模式会被激活。你用cons把自定义规则加到列表头部的思路是对的,问题完全出在正则写错了。
正确配置写法
把正则末尾多余的\\.换成Emacs正则里匹配字符串结尾的标记\\'(比通用的$更严谨,不会被路径中可能存在的换行符干扰),推荐用add-to-list代替cons,可以自动避免重复添加相同规则:
(add-to-list 'auto-mode-alist '("\\.bashrc__common\\'" . sh-mode))
替换掉原来的错误配置后,保存emacs配置,执行M-x eval-buffer重载配置,再打开~/.bashrc__common就会自动触发sh-mode的语法高亮。如果想临时验证效果,打开文件后手动执行M-x sh-mode就能直接切到shell脚本模式,确认高亮本身是正常的。
为什么~/.bashrc默认自带语法高亮
Emacs自带的sh-mode(shell脚本编辑模式)默认已经在auto-mode-alist里预置了大量常见shell配置文件的匹配规则,除了.bashrc,还覆盖了.bash_profile、.profile、.zshrc、.bash_logout等无后缀的shell配置文件,不需要用户手动加规则,打开这些文件时会自动匹配到sh-mode启用语法高亮。
内容的提问来源于stack exchange,提问作者HelloGoodbye

