sublime text 的 lsp 插件默认不自动触发 code action,仅支持快捷键(ctrl+/cmd+.)或右键菜单调用;需确认语言服务器已就绪且选区准确,否则返回空列表。

Code Action 在 LSP 插件里默认不自动触发
Sublime Text 的 LSP 插件(即官方维护的 LSP 包)本身不会在光标悬停或选中代码时自动弹出 Code Action 列表。它只在你明确调用命令时才执行,这点和 VS Code 的悬浮提示+灯泡图标行为不同——别等它“自己跳出来”。
触发方式只有两种:快捷键或右键菜单。默认快捷键是 ctrl+.(Windows/Linux)或 cmd+.(macOS),但该绑定在部分系统或键盘布局下可能被拦截(比如 macOS 的 Spotlight 冲突),建议优先检查并确认是否生效。
- 打开
Preferences → Package Settings → LSP → Key Bindings,确认存在类似这样的条目:[{"keys": ["ctrl+."], "command": "lsp_code_actions"}] - 若无,手动添加;若有但无效,试试改用
ctrl+shift+a等更稳妥的组合 - 右键菜单项叫
Code Actions...,点击后会列出所有可用操作(如 “Import ‘xxx’”、“Convert to async function”),但仅限当前光标所在行/选区有语义支持时才非空
Code Action 不出现?先看语言服务器是否支持且已就绪
Code Action 是语言服务器(LSP server)提供的能力,不是 LSP 插件自己生成的。如果列表为空或提示 “No code actions available”,大概率是服务端没返回,而非客户端配置错误。
- 确保对应语言的 server 已安装并启用:比如 Python 需
pylsp或pyright,JavaScript/TypeScript 推荐typescript-language-server - 打开
Command Palette → LSP: Show Log,输入触发命令后观察日志里是否有textDocument/codeAction请求发出,以及响应是否含actions字段 - 常见坑:server 启动失败(如
node未加入 PATH)、项目根目录缺失tsconfig.json或pyproject.toml导致 server 拒绝提供语义功能 - 部分 server(如 older
eslint-lsp)需额外配置"codeActionOnSave": {"enable": true}才返回修复类 action,但这属于保存时自动触发,和手动lsp_code_actions无关
选中代码范围影响 Code Action 可用性
LSP 插件会把当前选中文本(或光标所在语法节点)作为 context 发送给 server,server 根据这个上下文决定返回哪些 action。选得不准,很可能什么也不返回。
- 想触发 import 补全?光标必须落在未声明的标识符上(如
useState),不能在括号里、引号内或注释中 - 想转换 for 循环为 map?需完整选中整个
for (let i = 0; i 块,只选花括号或只选变量名都不行 - 某些 server(如
rust-analyzer)对 AST 节点粒度敏感:光标在函数名上可能给出 “Go to definition”,但在函数调用括号内才给出 “Extract to function” - 不确定该选什么?先取消选择(
esc),把光标放在疑似问题位置,再按ctrl+.—— 多数 server 支持“光标位置推断上下文”
自定义 Code Action 快捷键与过滤显示项
默认的 ctrl+. 会列出全部可用 action,包括低频或危险操作(如 “Delete entire file”)。你可以通过 key binding 传参过滤,或用插件扩展行为。
- 只显示 quickfix 类 action(即错误修复):
{"keys": ["ctrl+alt+f"], "command": "lsp_code_actions", "args": {"kind": "quickfix"}} - 只显示 refactor 类(重命名、提取变量等):
"kind": "refactor";支持的值见 LSP spec 的CodeActionKind - 注意:
kind过滤依赖 server 实际返回的action.kind字段,不是所有 server 都严格遵循分类,pyright较准,pylsp有时全返回"" - 想进一步自动化?可写 mini plugin 监听
on_post_text_command,在保存时自动运行lsp_code_actions并 apply 第一个quickfix,但需自行处理冲突和 UX 反馈
Code Action 的实际效果高度依赖 server 实现质量,同一份代码在 typescript-language-server 和 deno 下能触发的 action 可能完全不同。别纠结“为什么这里没灯泡”,先查 log、试选区、换 server。











