sublime自动补全失效主因是触发链中断:语法识别为plain text、auto_complete未显式启用、auto_complete_commit_on_tab缺失或lsp未连语言服务器;须逐项检查scope、用户设置、lsp日志及触发器配置。

Sublime Text 自动补全“失效”,90% 不是插件坏了,而是触发链断在某个环节——语法识别错、auto_complete 没显式开、auto_complete_commit_on_tab 缺失,或 LSP 根本没连上语言服务器。
右下角显示 Plain Text 就别指望补全
补全弹窗压根不出现?先看编辑器右下角:如果写的是 Python 代码但显示 Plain Text,LSP 和所有语言专属补全都不会加载。这不是“延迟”或“卡”,是直接跳过。
- 按
Ctrl+Shift+P→ 输入Developer: Show Scope Name,确认当前 scope 是source.python而非text.plain - 手动设置语法:菜单 →
View → Syntax → Python(或对应语言) - 如果每次打开都回退成 Plain Text,检查文件扩展名是否被误识别(比如
.pyi或无后缀文件),或项目里存在.sublime-project覆盖了语法设置
Tab 键不提交补全项?缺这三项配置
补全列表明明弹出来了,按 Tab 却只缩进、不填入,是因为 Sublime 默认把 Tab 绑给「切换候选」而非「确认」——除非你明确告诉它要改行为。
- 打开
Preferences → Settings – User,右侧必须有这三行(缺一不可):"auto_complete": true"auto_complete_commit_on_tab": true(最关键)"tab_completion": false(关掉旧式单词补全,避免干扰) - 别信左侧默认设置里写了
true就够了——Sublime 不继承,你没写进右侧,它就当关着 - 改完保存即生效,不用重启;但已打开的文件需切个 tab 再切回来,或执行
Reload Syntax
LSP 补全没反应?语言服务器根本没连上
LSP 插件(如 LSP-pyright 或 LSP-typescript)自己不提供补全,只是个中转站。状态栏没显示 LSP-pyright active,说明通信链路断了。
- 按
Ctrl+Shift+P→ 输入LSP: Show Log,看有没有command not found或module not found报错 - Python 用户:确认是否运行过
pip install python-lsp-server[all]或npm install -g pyright;Windows 用户常因Scripts目录未加进PATH导致找不到命令 - JS/TS 用户:装完
typescript-language-server后,终端直接运行typescript-language-server --version应返回版本号;否则 LSP 插件永远连不上 - 禁用其他补全插件(如
AutoFileName、SublimeJEDI),它们会劫持Tab或覆盖补全源
import 后不提示模块?原生规则主动拦截
写 import os 回车后敲 os. 有提示,但 import numpy as np 后敲 np. 没反应?不是插件问题,是 Sublime Text 3 内置的 Python 包把 import 关键字列入了 cancelCompletion 黑名单。
- 路径:
Packages/Python/Completion Rules.tmPreferences(注意大小写和空格,不能是Python 3或python) - 内容必须是标准 XML 格式,含
<key>cancelCompletion</key>的<dict></dict>块;只要这个文件存在且名字对,Sublime 就会读取并覆盖默认规则 - 改完后删掉
Cache/目录下所有文件(路径见系统知识库),再重启 Sublime —— 缓存不清理,新规则不生效
最易忽略的一点:auto_complete_triggers 里的 selector 必须严格匹配 scope 名(如 source.css),多一个 -、少一个 s,或者写成 text.css,补全就在该语言下彻底静默——它不会报错,也不会 fallback,就只是不工作。











