根本原因是Sublime Text 3内置Python包将import列为禁止补全关键词,需新建Packages/Python/Completion Rules.tmPreferences文件并配置cancelCompletion规则,再删除缓存、重启生效。

为什么 import 后不显示模块补全?
根本原因是 Sublime Text 3 内置的 Python 包在解析到 import 关键字时,会主动触发 cancelCompletion 规则,直接中止补全流程。这不是 Anaconda 插件的问题,而是原生行为——它把 import 和 def、class 一起列进了“禁止补全关键词表”里。
解决路径很明确:覆盖默认的 Completion Rules。你需要在 Packages 目录下新建一个 Python 文件夹(注意不是 Python 3 或其他变体),再在里面创建文件 Completion Rules.tmPreferences(名字含空格,大小写敏感):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>scope</key>
<string>source.python</string>
<key>settings</key>
<dict>
<key>cancelCompletion</key>
<string>^(.*\b(and|or)$)|(\s*(pass|return|and|or|(class|def)\s*[a-zA-Z_0-9]+)$)</string>
</dict>
</dict>
</plist>
- 保存后必须删除缓存:
Cache/Python/Completion Rules.tmPreferences.cache - 重启 Sublime Text 才生效;仅重载插件不够
- 如果用的是 LSP-pyright,这个文件不影响 LSP 补全,但能修复原生 import 行的补全断点
LSP-pyright 补全没反应,LSP: Show Log 报 command not found
这是 pyright 二进制未就位的典型表现。LSP-pyright 插件本身不自带语言服务器,它依赖你本地安装的 pyright CLI 工具。
验证方式:终端执行 pyright --version。如果报 command not found,说明没装或没加进 PATH。
- 推荐全局安装:
npm install -g pyright - macOS 用户若用 Homebrew 安装过 Node.js,确保
$(npm config get prefix)/bin在 shell 的PATH中 - Windows 用户注意:PowerShell 和 CMD 的 PATH 加载可能不同,建议用 CMD 测试
pyright是否可执行 - 不想全局装?可在项目根目录放
pyrightconfig.json并配pythonVersion和include,但前提是pyright命令本身得存在
Tab 键不确认补全项,只插入制表符
这是 Sublime 默认行为:补全面板打开时,Tab 是「切换候选」,Enter 才是「确认上屏」。很多人卡在这一步,反复按 Tab 却没反应,其实是没意识到面板还在开着。
想改回 Tab 确认,需手动加键绑定。打开 Preferences → Key Bindings(用户侧),插入以下规则:
[
{
"keys": ["tab"],
"command": "commit_completion",
"context": [
{ "key": "auto_complete_visible" },
{ "key": "setting.auto_complete_commit_on_tab", "operator": "equal", "operand": true }
]
}
]
- 别漏掉
"setting.auto_complete_commit_on_tab"这个 context 条件,否则 Tab 会在所有场景下都 commit,破坏缩进逻辑 - 同时确保 Settings-User 里有
"auto_complete_commit_on_tab": true,否则上面 context 不成立 - 如果还冲突,检查是否被 AutoFileName、SublimeJEDI 等旧插件劫持了
Tab绑定——它们优先级更高,禁用即可
启用了 Anaconda,但补全仍卡在“当前文件内符号”
Anaconda 默认会抑制外部补全源,尤其当它检测到 Python 解释器配置异常或 worker 初始化失败时,会退化为仅提供词法级补全(即只扫当前文件变量名)。
关键排查点在 Settings User(不是 Default)里是否写了这三行:
{
"python_interpreter": "/path/to/your/python",
"suppress_word_completions": true,
"suppress_explicit_completions": true
}
-
python_interpreter必须指向真实可执行的 Python 3.7+ 二进制,不能是 conda 环境的python.exe而没激活环境(Windows 上常见) -
suppress_*两项设为true是为了关掉 Sublime 原生词补全,避免和 Anaconda 补全打架;设成false反而会让补全混乱 - 如果看到报错类似
LocalWorker object at 0x... initital check failed,基本就是解释器路径无效或权限问题
最常被忽略的一点:多个补全机制(原生 + Anaconda + LSP)可以共存,但它们彼此不感知。你看到的补全结果,是它们各自返回的候选合并后的效果——而合并顺序、过滤条件、甚至光标位置的语法上下文,都会让某类补全突然“消失”。不要只盯一个插件调,先用 LSP: Show Log 和删缓存这两招快速分边。

















