sticky scroll 默认关闭,需手动启用 editor.stickyscroll.enabled;仅在支持大纲的语言(如ts/python/c#/rust)中生效,依赖lsp;显示异常多因注释、折叠或语法糖干扰符号解析;可通过 editor.stickyscroll.maxlayerdepth 调整嵌套层数(1–5),默认2。

Sticky Scroll 在 VSCode 里默认不开启,得手动打开
VSCode 的 Sticky Scroll(固定顶部函数名)不是开箱即用的功能,它从 v1.84 开始内置,但默认关闭。很多人以为装了新版本就自动有了,结果滚动时标题栏没反应——其实是配置没开。
打开设置最直接的方式是 Ctrl+,(Windows/Linux)或 Cmd+,(macOS),然后搜 "stickyScroll",勾选 "editor.stickyScroll.enabled" 即可。也可以手动编辑 settings.json 加一行:
"editor.stickyScroll.enabled": true
- 该设置只影响当前工作区,如果想全局生效,确保改的是「User」设置而非「Workspace」
- 开启后,只有在支持大纲(outline)的语言中才生效,比如 TypeScript、Python、C#、Rust;纯文本或 JSON 文件不会显示
- 它依赖语言服务器提供符号结构,如果某语言没启用 LSP(如未安装对应扩展),
stickyScroll就是灰色的、不工作
Sticky Scroll 显示不全或错位,大概率是折叠/注释干扰了符号解析
你可能看到顶部只显示 function 或 class 关键字,后面没名字,或者位置卡在半截代码上——这不是 UI bug,而是语言服务没能正确识别作用域边界。
常见干扰源有:
- 函数体开头用了多行注释(尤其是 JSDoc 前多了空行或非标准格式),导致
DocumentSymbolProvider解析失败 - 代码被手动折叠(
Ctrl+Shift+[),而 Sticky Scroll 不会主动展开折叠区域来读取名称 - 使用了非标准语法糖,比如 Vue SFC 中的
<script setup></script>,部分 TS 插件对这种隐式导出识别不稳定
验证方式:按 Ctrl+Shift+O 打开大纲视图,如果这里也空或层级异常,说明问题出在语言服务本身,不是 Sticky Scroll 设置的问题。
想控制显示几层嵌套?靠 editor.stickyScroll.maxLayerDepth
默认只显示当前函数 + 上一级(比如方法内嵌套的回调),但有些场景需要看三层(类 → 方法 → 回调 → 内联函数),就得调这个参数。
它接受 1–5 的整数,默认是 2。设为 3 后,光标在 Promise 链深处时,顶部可能同时显示:class UserService → function fetchProfile() → function then()。
- 值越大,计算开销略增,但日常编辑几乎无感;真正影响性能的是语言服务本身,不是 Sticky Scroll 渲染
- 超过实际嵌套深度不会报错,只是多余层级留空
- 注意:它只对支持多级符号的语言有效(如 TS/JS 的类+方法+箭头函数;Python 目前最多到函数级,不支持嵌套 def 的深度展开)
Mac 上 Command 键冲突?检查是否被终端或输入法劫持
在 macOS 上,有人发现开了 Sticky Scroll 后,按 Cmd+Shift+O 打不开大纲,或者滚动时顶部一闪就消失——大概率不是 VSCode 问题,而是系统级快捷键覆盖。
- 系统设置 → 键盘 → 快捷键 → 输入源,确认没把
Cmd+Shift组合绑定给切换输入法 - 终端应用(如 iTerm2、Hyper)有时会全局捕获
Cmd+Shift,关掉终端再试 VSCode - 个别输入法(如鼠须管、小狼毫)在“高级”设置里默认启用
Cmd+Shift切换,需手动禁用
Sticky Scroll 本身不注册独立快捷键,但它依赖大纲和符号解析能力,这些功能都受上述底层快捷键干扰。
真正麻烦的是符号解析链路:语言服务器 → VSCode 编辑器 API → sticky scroll 渲染。其中任意一环断掉,表现都是“好像开了但没完全开”。别急着重装插件,先看大纲能不能出来,再查输出面板里 Log (Extensions) 有没有对应语言服务的报错。











