sublimelinter-contrib-mypy状态栏无提示需先排除lsp抢占,再确认lint_mode设为background、delay设为0.5,检查selector匹配source.python,确保mypy在path中且args含--show-column-numbers和--no-color。

SublimeLinter-contrib-mypy装完状态栏没提示?先确认 LSP 和 SublimeLinter 别打架
SublimeLinter-contrib-mypy 和 LSP-pylsp(或其他 Python 语言服务器)默认会同时监听 .py 文件,但它们的提示机制互不兼容:LSP 把诊断信息走自己的通道发到编辑器底层,而 SublimeLinter 只往状态栏和行号旁写标记。两者共存时,LSP 常常抢占语法高亮和诊断入口,导致 SublimeLinter 的状态栏提示被静默吞掉。
最直接的验证方式:打开一个有类型错误的 .py 文件,按 Ctrl+Shift+P 输入 LSP: Toggle Diagnostics,如果能看到错误浮层,说明 LSP 已接管——此时 SublimeLinter-contrib-mypy 的状态栏输出大概率被压制。
- 临时解决:在命令面板运行
LSP: Disable Language Server Globally→ 选pylsp,再重启 Sublime - 长期共存:编辑
LSP.sublime-settings(User),加这一行:"only_active_view": true,让 LSP 只处理当前激活视图,给 SublimeLinter 留出空间 - 别指望“两个都开、自动择优”——Sublime 没这种调度逻辑,必须手动划清职责边界
状态栏不显示 mypy 错误?检查 SublimeLinter 的 lint_mode 和 delay 设置
SublimeLinter 默认用 load 模式(只在文件加载时跑一次),它压根不会触发状态栏实时提示。要让状态栏持续显示 mypy 结果,必须切到后台轮询模式,并配好延迟,否则每敲一个字符就扫一遍,CPU 直接拉满。
打开 Preferences → Package Settings → SublimeLinter → Settings – User,确保包含以下两项:
-
"lint_mode": "background"(不是load或save) -
"delay": 0.5(单位秒,建议 0.3–1.0;设为 0 容易卡 UI)
如果 delay 被设成 0 或缺失,SublimeLinter 会退化为同步阻塞模式,状态栏更新被挂起,控制台里还可能出现 timeout 报错。
my.py 文件右下角显示 Python,但状态栏仍空白?确认语法 selector 和 linter 绑定是否匹配
SublimeLinter 不靠文件后缀判断该不该跑 mypy,而是看当前视图的 scope 是否命中配置里的 selector。很多用户把 .py 文件设成 Python 语法,但实际 scope 是 source.python,而 SublimeLinter-contrib-mypy 的默认 selector 是 source.python.embedded 或 source.python.django,根本对不上。
验证当前 scope:按 Ctrl+Alt+Shift+P(Windows/Linux)或 Cmd+Alt+Shift+P(macOS),光标所在位置会显示完整 scope 链,比如 source.python。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
解决办法:编辑 SublimeLinter.sublime-settings(User),在 "linters" 下补全 mypy 的 selector:
"mypy": {
"selector": "source.python",
"args": ["--show-column-numbers", "--follow-imports=normal"]
}
注意:别漏掉 "args" 里的 --show-column-numbers,否则 SublimeLinter 解析 mypy 输出时会丢列号,状态栏提示位置偏移甚至不显示。
状态栏只显示 “mypy: OK”,但从不报错?检查 mypy 是否真能执行并返回非空结果
SublimeLinter-contrib-mypy 本身不带 mypy 二进制,它只是个包装器。如果系统 PATH 里没有 mypy,或者你用的是 pipx/virtualenv 里的 mypy 但没激活环境,插件会静默 fallback 到 “OK”,状态栏永远绿色。
验证方式:打开控制台(Ctrl + `),输入:
import subprocess; subprocess.run(['mypy', '--version'])
如果报 FileNotFoundError,说明 mypy 不在 PATH;如果返回版本号但状态栏仍不报错,再试:
import subprocess; subprocess.run(['mypy', '--show-column-numbers', 'test.py'])
其中 test.py 是你当前项目里一个明确有类型错误的文件。若终端能打印错误但 Sublime 不显示,问题出在插件解析逻辑——常见于 mypy 输出格式变动(如 1.10+ 默认启用 color 输出),需在 args 里加 --no-color。
容易被忽略的一点:mypy 的 exit code 是 0(无错)或 1(有错),但 SublimeLinter 默认只认非零 exit code 为失败。如果 mypy 因路径错误、配置缺失提前退出并返回 2,SublimeLinter 会当“执行失败”而非“检测到错误”,状态栏不更新。这时得加 --warn-return-code 参数强制返回 1。










