sublime text默认仅支持单词级补全,需先启用auto_complete及auto_complete_commit_on_tab,再通过lsp+pylsp/pyright实现函数参数、类型提示等语义补全。

Sublime Text 默认只做单词级补全,不识别语法、不提示参数、不跨文件索引——这不是设置没开,而是它本来就不具备这些能力。要获得接近 IDE 的体验,必须分两步走:先调通内置补全的触发逻辑,再用 LSP 补上语义层。
为什么输入 print 没反应?检查 auto_complete 和作用域
原生补全不是“输啥补啥”,它只在满足以下全部条件时才扫描当前文件和已打开标签页里的词:
-
auto_complete必须设为true(用户设置里没这行=关闭) - 光标所在位置的语法作用域必须匹配
auto_complete_selector,默认值"source, text"覆盖大部分代码,但像.vue里的<style></style>块可能被识别为source.css.embedded.html,需显式加到 selector 中 - 右下角显示的语法名必须是正确类型(如
CSS,不是Plain Text),否则所有补全静默失效 - 补全不会在输入中途弹出,通常要等你敲完一个完整标识符(比如
prin不会触发,print才可能)
怎么让 . 或 : 后立刻补全?用 auto_complete_triggers
原生补全默认不监听点号或冒号,必须手动告诉 Sublime:“在 Python 里输 .,在 CSS 里输 :,就该扫一遍了”。
在用户设置中添加:
{
"auto_complete_triggers": [
{"selector": "source.python", "characters": "."},
{"selector": "source.css", "characters": ":"}
]
}
注意:
- 每个 trigger 是独立生效的,
source.python不会响应:,source.css不会响应. - 如果用了 SCSS,作用域是
source.scss,得单独加一条;Vue 单文件里<script></script>是source.js.embedded.html,也要单独配 - 别把
auto_complete_triggers和auto_close_tags搞混——后者管 HTML 标签闭合,和补全无关
Tab 键不选中补全项?缺了 auto_complete_commit_on_tab
很多人按 Tab 只插入制表符,不是接受补全建议,根本原因就是用户设置里没这句:
"auto_complete_commit_on_tab": true
没有它,Sublime 默认禁用 Tab 补全行为。加上后还要注意:
- 如果装了
AutoFileName或All Autocomplete,它们可能劫持Tab,临时禁用测试是否冲突 -
auto_complete_with_fields设为true才能让 Emmet 或 snippet 中的${1}占位符被Tab跳转 - 某些输入法(如搜狗)会拦截
Tab,切英文输入法再试
Python 函数参数/类型提示怎么出来?必须上 LSP + pylsp/pyright
原生补全永远无法知道 requests.get() 有哪些参数,也不会提示 str.split(sep=None, maxsplit=-1)。这类语义补全只能靠语言服务器。
操作路径很明确:
- 用
Package Control: Install Package装LSP -
pip install python-lsp-server[all]或pip install pyright - 确认
LSP.sublime-settings里"clients": {"pylsp": {"enabled": true}},且"command"路径能被找到(比如["python", "-m", "pylsp"]) - 打开
.py文件,等右下角出现LSP-pylsp active(通常 2–5 秒),此时补全才真正启用
别碰 SublimeCodeIntel——它已停更多年,对 Python 3.11+ 和现代类型注解基本无响应,还常卡死编辑器。











