sublime text 中 .sh 文件需手动设置为 bash 语法高亮才支持现代 bash 特性;点击右下角语言名选择 bash 可临时生效,选“open all with current extension as…”或在 syntax specific 设置中添加 {"syntax": "packages/shellscript/shell-unix-generic.sublime-syntax"} 可永久生效。

Sublime Text 默认不把 .sh 文件自动识别为 Shell 脚本,所以打开后常是纯文本或错误语法高亮——这不是插件问题,而是文件关联没配对。
如何让 .sh 文件一打开就用 Bash 语法高亮
关键在右下角状态栏:点击当前语言标识(比如 “Plain Text”),在弹出菜单里选 Bash。这操作只对当前文件生效。
要永久生效,得改文件关联规则:
- 打开任意
.sh文件 → 点击右下角语言名 → 底部选Open all with current extension as…→ 再选Bash - 或者手动编辑用户设置:菜单
Preferences → Settings – Syntax Specific,粘贴:{"syntax": "Packages/ShellScript/Shell-Unix-Generic.sublime-syntax"}(注意路径大小写,ShellScript不是shellscript) - 如果用了 Sublime Text 4,推荐用
Shell-Unix-Generic.sublime-syntax;ST3 可用ShellScript/Shell-Unix-Generic.tmLanguage,但后者高亮更弱
为什么选 Bash 而不是 Shell Script 或 Shell-Unix-Generic
Sublime 内置了多个 Shell 相关语法包,但命名容易混淆:
-
Bash:对应Packages/ShellScript/Bash.sublime-syntax,专为 Bash 扩展语法设计(如[[ ]]、$(( ))、数组、关联数组) -
Shell-Unix-Generic:更通用,兼容 sh / dash / ksh,但对 Bash 特有语法支持差,比如declare -A会标红 -
Shell Script(旧版):基本已弃用,高亮逻辑陈旧,括号匹配和变量展开常出错
如果你写的是带 Bash 扩展功能的脚本(绝大多数现代运维/部署脚本都是),直接选 Bash 语法最稳妥。
自定义语法高亮时容易踩的坑
手动修改 view.settings().set('syntax', ...) 或写插件时,路径错一个字符就失效:
- 路径必须以
Packages/开头,不能漏掉斜杠或大小写错误(shellscript≠ShellScript) - ST4 中
.sublime-syntax是 YAML 格式,若你复制了别人改过的自定义语法文件,但没重启 Sublime,新规则不会加载 - 如果装了
ShellScript插件(比如从 Package Control 安装的第三方包),它可能覆盖内置语法,导致Bash选项消失——此时卸载该插件,重启即可恢复 - 某些脚本第一行是
#!/usr/bin/env bash,但 Sublime 不会自动据此判断语法,仍依赖文件扩展名或手动指定
真正麻烦的不是设不对,而是设对了却没生效——往往卡在缓存、路径大小写、或被第三方插件静默劫持。建议先禁用所有插件,验证内置 Bash 是否可用,再逐步启用排查。











