Sublime Text 需通过系统 file 命令获取真实 MIME 类型,因 view.settings().get("syntax") 仅返回语法路径(如 Python.sublime-syntax),与实际 MIME 无关;插件可调用 file -b --mime-type 实时更新状态栏。

Sublime Text 默认不显示 MIME 类型,但可以通过插件 + 自定义状态栏命令实现,核心是利用 view.settings().get("syntax") 推导,或调用系统命令(如 file -b --mime-type)获取真实 MIME —— 后者更准确,尤其对无扩展名、自定义语法或二进制文件有效。
为什么不能只靠 syntax 设置?
Sublime 的 settings.get("syntax") 返回的是语法文件路径(如 Packages/Python/Python.sublime-syntax),它仅表示「当前高亮规则」,和实际文件 MIME 无关。例如:
- 一个
.txt文件手动设为 Python 语法 →settings.get("syntax")返回 Python,但 MIME 仍是text/plain - 一个无扩展名的 shell 脚本,若未被识别为
shellscript语法,就完全无法推断 MIME -
application/json和application/javascript可能共用同一套 JSON 语法,但语义完全不同
推荐方案:用 Python 插件调用系统 file 命令
Sublime 支持在插件中执行系统命令并更新状态栏。以下是一个最小可用插件(保存为 ~/.config/sublime-text-3/Packages/User/mime_status.py 或对应 Windows 路径):
import sublime
import sublime_plugin
import subprocess
import os
<p>class ShowMimeTypeCommand(sublime_plugin.TextCommand):
def run(self, edit):
if not self.view.file_name():
self.view.set_status("mime_type", "MIME: unsaved")
return</p><pre class='brush:php;toolbar:false;'> filepath = self.view.file_name()
try:
# Linux/macOS:使用 file 命令
result = subprocess.run(
["file", "-b", "--mime-type", filepath],
capture_output=True,
text=True,
timeout=1
)
if result.returncode == 0 and result.stdout.strip():
mime = result.stdout.strip()
self.view.set_status("mime_type", f"MIME: {mime}")
return
except (subprocess.TimeoutExpired, FileNotFoundError, OSError):
pass
# fallback:尝试从扩展名简单映射(极简版)
ext = os.path.splitext(filepath)[1].lower()
mime_map = {
".py": "text/x-python",
".js": "application/javascript",
".json": "application/json",
".html": "text/html",
".css": "text/css",
".md": "text/markdown",
}
mime = mime_map.get(ext, "unknown")
self.view.set_status("mime_type", f"MIME: {mime}")然后绑定快捷键或菜单项触发,或进一步做成自动刷新(见下一条)。
如何让状态栏实时更新 MIME?
Sublime 没有“文件保存后自动重查 MIME”的内置机制,需监听事件。添加一个 EventListener 插件(可合并到同一文件):
class MimeStatusListener(sublime_plugin.EventListener):
def on_activated(self, view):
# 切换标签页时刷新
view.run_command("show_mime_type")
<pre class='brush:php;toolbar:false;'>def on_post_save(self, view):
# 保存后刷新
view.run_command("show_mime_type")
def on_load(self, view):
# 文件打开后刷新
view.run_command("show_mime_type")注意点:
- Windows 用户需安装
file命令(如通过 Git for Windows 或 Cygwin),否则 fallback 映射生效 -
subprocess.run在 Sublime 的 Python 环境中可用(ST4 内置 Python 3.8+) - 避免高频调用(如
on_modified)——file命令有 IO 开销,on_post_save和on_activated已覆盖主要调试场景 - 状态栏 key
"mime_type"可自定义,但需与set_status中一致
真实调试时,MIME 类型常比扩展名或语法更关键——比如确认 API 返回体是否真的是 application/vnd.api+json,或上传文件时服务端是否按预期解析 multipart/form-data。这一步看似小,但省去反复 curl -I 或开终端查的麻烦;唯一要留心的是跨平台兼容性,别在没装 file 的 Windows 上依赖它返回结果。










