Sublime Text 4 的上下文感知补全需 LSP 插件+语言服务器+正确语法 scope 和 auto_complete_triggers 配置;原生仅支持词频匹配,不解析语法或类型。

Sublime Text 4 的上下文感知自动补全不是开箱即用的“智能 IDE 功能”,它默认只做基础词频匹配;真正实现跨文件、带类型推断、响应 . 或 : 的上下文感知,必须装 LSP 插件 + 对应语言服务器,且语法 scope 必须正确。
为什么输入 requests. 不弹方法列表?
原生 Sublime 不解析 Python 语法,也不读取 import 语句或标准库定义。它只从当前已打开的标签页里“扒单词”——哪怕你刚写了 requests.get(),再输 requests. 也不会触发方法补全。
- 这是设计使然,不是 bug:Sublime 的
auto_complete机制只索引文本,不运行 AST 解析 - 唯一能识别
.后成员、提供函数签名和文档的是 LSP(如LSP-pyright或LSP-pylsp) - 确认是否启用:光标停在
requests.后按Ctrl+Space,若候选框空或只有requests自身,说明 LSP 未激活或 server 未启动
auto_complete_triggers 配错会导致 CSS/JS 补全失效
CSS 中输入 display: 要弹属性值、JS 中输入 arr. 要弹 map/filter,都依赖 auto_complete_triggers 指定触发字符和作用域。配错就等于关掉了入口。
- CSS 必须加:
{"selector": "source.css", "characters": ":"}—— 冒号是关键触发点,不是输dis就出display - Python/JS 建议加:
{"selector": "source.python", "characters": "."}和{"selector": "source.js", "characters": "."} - 别把
text.html错加进 selector:否则 HTML 标签名会被当成 JS 变量补全,结果全是错的 - scope 错了比插件没装更致命:.vue 文件里
<style></style>块没补全?用Tools → Developer → Show Scope Name看光标处是否为source.css;不是就换 Vue Syntax Highlight 插件
LSP 插件和语言服务器必须成对启用
只装 LSP 插件不装具体语言服务器(如 LSP-pyright),或装了但没在 LSP.sublime-settings 里启用对应 client,补全就卡在“有界面、无内容”。
- 安装后必须手动启用:按
Ctrl+Shift+P→ 输入LSP: Enable Language Server→ 选中目标语言(如pyright) - 检查 server 是否运行:底部状态栏出现
LSP-pyright active才算生效;若显示not found,需确认command路径是否指向正确的可执行文件(如pyright-langserver) - Python 用户注意:
pip install python-lsp-server安装的是pylsp,不是pyright;二者配置项不同,不能混用 - 重启 Sublime 不解决 server 未加载问题——必须显式执行启用命令,且首次启用可能需几秒初始化索引
CSS 补全不准?大概率是 AutoFileName 和 CSS3 插件没协同工作
CSS3 插件负责属性/值/函数(如 gap、clamp()、::before),AutoFileName 负责 url( 后的路径补全。两者独立运作,但缺一不可。
- 确保文件语法是
CSS:右下角状态栏必须显示CSS,不是Plain Text或SCSS;.scss文件要装 SCSS 插件,并在SCSS.sublime-settings中设"auto_complete_selector": "source.scss -comment" - 路径补全只在
url(后触发:输入background: url(再按Ctrl+Space,才会列出当前项目图片 - 别指望
background:后直接出url():CSS3 插件只补属性值(如red、flex),不补函数;函数补全靠单独的 snippets 或 LSP(如用 LSP-css) - 如果
url(后没反应,检查 AutoFileName 设置里是否启用了"enable_auto_filename_for_css": true
最常被忽略的点是 scope 和触发器的耦合关系:LSP server 再强,scope 不对就收不到请求;auto_complete_triggers 再准,server 没启用也弹不出内容。调试时优先看状态栏提示和 Show Scope Name 输出,而不是反复重装插件。











