
Sublime 的自动补全默认只认“见过的词”,不是真智能
它不会知道 print() 是 Python 内置函数,除非你当前文件或已打开的其他标签页里写过 print。也不会提示 requests.get,哪怕你 import requests 了——原生机制不解析语法、不读库、不推导类型。
-
"auto_complete": true必须开启,否则连弹窗都不出来 - 补全框默认靠前缀匹配,输入
pr只会列出当前项目中所有以pr开头的变量/函数名(包括拼错的prnit) - 按
Ctrl+Space可手动唤出候选框,但内容仍受限于这个“词频库”,不是语义补全 - 如果右下角显示的是
Plain Text而不是Python或JavaScript,补全逻辑压根不加载
想补函数签名和参数,必须上 LSP + 语言服务器
这才是目前唯一靠谱的路径。LSP 插件本身不提供补全,它只是个“翻译官”,把 Sublime 和你本地安装的语言服务器(比如 pylsp、typescript-language-server)连起来。没配对服务器,LSP 就是空壳,不会报错,也不会提示。
- 装插件:
Ctrl+Shift+P→Package Control: Install Package→ 搜LSP安装 - 装服务器:Python 用户运行
pip install python-lsp-server[all];JS/TS 用户运行npm install -g typescript-language-server - 配置生效:命令面板输
LSP: Enable Language Server Globally→ 选pylsp或对应服务 - 验证是否工作:打开一个
.py文件,输入import os,再敲os.+Ctrl+Space,应立刻列出os.path、os.listdir等带文档的项
.sublime-completions 文件只能做静态替换,别指望它替代 LSP
它本质是 JSON 模板,触发后直接插入文本,不查作用域、不推导类型、不跳转定义。适合写固定结构(如日志模板),不适合补函数。
- 必须放
Packages/User/目录下,且文件名以.sublime-completions结尾 - JSON 格式零容忍:少个
{、多逗号、用单引号包字符串,整个文件就失效 -
scope值必须准确,比如 Python 补全写"scope": "source.python";查真实 scope 用Ctrl+Shift+P→Developer: Show Scope Name - 示例片段(别复制粘贴就跑):
{"scope": "source.python", "completions": [{"trigger": "logd", "contents": "print(${1:obj}, ${2:'debug'})"}]}
Tab 键不补全?大概率是 auto_complete_commit_on_tab 没开
默认情况下按 Tab 只是插入制表符。要让它确认补全项,必须显式启用该开关。
- 在
Preferences → Settings(用户侧)加这行:"auto_complete_commit_on_tab": true - 同时建议搭配:
"auto_complete_with_fields": true(支持占位符跳转)、"auto_complete_delay": 20(响应更快) - 如果用了 Emmet(比如写 HTML),它的
Tab行为会覆盖原生补全,此时需在 Emmet 设置里关掉disable_auto_insert或调整优先级 - 补全弹窗没反应?先看右下角语法标识是否正确,再检查
auto_complete_selector是否误排除了当前 scope(比如写了"source - comment"却忘了 CSS 也属于source)
真正卡住的从来不是插件装没装,而是语言服务器有没有跑起来、scope 对不对、Tab 行为被谁劫持了——这些点不逐个验证,光调设置没用。










