file_name_patterns 必须用正则而非.conf后缀硬配,因.conf是通用后缀,全局绑定会导致redis、nginx等配置互相干扰着色;正则可精准匹配路径语义,且优先级高于extensions,避免拼写错误静默失效。

为什么 file_name_patterns 必须用正则,不能靠 .conf 后缀硬配
因为 .conf 是通用后缀,/etc/redis/redis.conf、/etc/logrotate.d/nginx、/etc/apt/apt.conf 全都用它。Sublime 语法系统不支持“同一扩展名多上下文”,强行全局绑定 "extensions": ["conf"] 会导致这些文件被套上 Nginx 关键字着色——比如 Redis 的 timeout 被当成字符串高亮,Nginx 的 timeout 30s 却因单位缺失被标红,反而干扰判断。
更隐蔽的问题是拼写错误:"extension": ["conf"](少个 s)会静默失效,不报错也不提示;而 file_name_patterns 是正则,优先级高于 extensions,能真正隔离路径语义。
-
file_name_patterns匹配的是完整路径,不是文件名,所以必须写"/etc/nginx/.*",不能只写"nginx.conf" - 点号
.在正则里是通配符,要匹配真实点号得转义成.,否则conf.d/*.conf会被误读成conf.d/*c[任意字符]nf - Windows 用户必须用正斜杠
/或双反斜杠\,单反斜杠会直接让高亮崩溃
file_name_patterns 正则怎么写才真正生效
打开一个真实的 Nginx 配置文件(比如 /etc/nginx/nginx.conf),先手动切换语法(右下角点 Plain Text → 选 Nginx),确保它当前已高亮,再进 Preferences → Settings – Syntax Specific,在右侧粘贴以下内容:
{
"syntax": "Packages/nginx-sublime-syntax/nginx-sublime-syntax.sublime-syntax",
"file_name_patterns": [
"/etc/nginx/.*",
"/usr/local/etc/nginx/.*",
"nginx.conf",
"sites-.*.conf",
"conf.d/.*.conf"
]
}
注意三点:
-
"syntax"路径必须和你实际安装的插件严格一致;装的是nginx-conf就得改成Packages/nginx-conf/nginx-conf.tmLanguage - 正则里所有点号都要写成
.,conf.d不是conf.d,sites-enabled要写成sites-enabled/.*.conf - 如果只配了
"nginx.conf",那/etc/nginx/conf.d/app.conf依然不会高亮——路径匹配是全路径比对,不是文件名 glob
高亮了但 server_name ~^www.(.+)$ 里 ~^ 还是灰色?这不是 bug
这是 Sublime 语法高亮的能力边界:它只做静态词法分析,不解析上下文语义。server、location、proxy_pass 这类固定指令能着色,是因为它们是预定义 token;但 ~^、=、~* 在 location 块里是正则前缀,在 if 块里可能是普通字符串,词法分析器无法动态判断,所以统一按字符串处理,显示为灰色。
同理:$arg_foo 在 if 块里可能有基础高亮,在 map 块里基本不识别;js_import 指令能着色,但其后的路径变量不会额外染色。这些都不是插件失效,而是设计如此。
- 灰色不等于错误,
nginx -t才是唯一验证方式 - 别指望高亮能帮你发现
upstream块里漏写了least_conn,或map块里用了未声明的变量 - 如果你看到
proxy_pass灰了,那才是真问题——说明语法没绑对,或插件路径错了
确认 nginx-sublime-syntax 插件真装对了的两个硬指标
右下角显示 Plain Text 是正常现象,不代表插件没装好。验证是否真可用,只看两点:
- 按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入Package Control: List Packages,列表里必须出现nginx-sublime-syntax(首选)、nginx-conf或小写nginx(作者 bradleyg)之一 - 进
Preferences → Browse Packages…,打开对应文件夹,检查是否存在nginx-sublime-syntax.sublime-syntax(前者)或nginx-conf.tmLanguage(后者);空文件夹或只有README说明安装不完整
装完不用重启,但首次需手动触发一次语法切换。如果菜单里没有 Nginx,运行 Package Control: Satisfy Dependencies 再试。别选已停更的 sublimenginx 或 Nginx Highlighter,它们不兼容 ST4.5+,且 if ($arg_foo) { } 里的变量常不染色。











