VSCode 不支持在悬停提示中实现代码折叠,因为 hover 仅渲染静态文本/Markdown,不执行交互逻辑或调用折叠引擎;折叠必须在编辑器主区域满足 language mode、editor.folding 启用及正确 #region 语法等条件才能生效。

VSCode 不支持“自定义悬停提示中的代码折叠”——这个说法本身存在概念混淆。悬停提示(hover)和代码折叠(folding)是两个完全独立的功能模块,分别由不同的语言服务机制驱动,不能互相嵌套或在 hover 里触发折叠。
为什么 hover 里不能折叠代码
VSCode 的 hover 提示只渲染纯文本、Markdown 或简单内联 HTML(如链接、加粗),不执行任何交互逻辑,也不加载语法解析器或折叠引擎。即使你在 hover 内容里写上 // #region,它也只会被当作文本显示,不会生成折叠控件或响应点击。
折叠操作必须发生在编辑器主区域(即源码视图),依赖以下三要素同时满足:
-
editor.folding设为true - 当前文件 language mode 正确(如
javascript,非plaintext) - 光标位于可折叠结构内部(函数体、
// #region块、缩进块等)
常见误操作:把 region 注释写进 JSDoc 或 docstring 里
比如在 JS 中这样写:
/** * @description * // #region 配置说明 * host: 'api.example.com', * timeout: 5000 * // #endregion */
结果是:hover 里能看见这段文字,但完全不可折叠。因为:
- 注释处于 JSDoc 块内,不是顶层语句级注释
- 语言服务(TypeScript Server)只在源码层解析
// #region,不穿透到 JSDoc 字符串中 - VSCode 折叠 provider 不扫描 hover 内容
想让文档块可折叠?正确做法是移出注释区
若你真需要折叠一段配置说明或文档内容,唯一可靠方式是把它放到源码层级,用对应语言的 #region 语法包裹,并确保不在注释块内部:
- JavaScript/TS:
// #region API 配置→// #endregion(顶行、无缩进、不嵌套在/** */里) - Python:
# region 数据说明→# endregion(注意#后必须有空格) - 不要试图用
/* #region */或"""#region""",这些都不被识别
折叠生效后,鼠标悬停在行号左侧折叠箭头时,VSCode 会高亮整个区域——这才是真正的“折叠相关悬停行为”,但它始终发生在编辑器 gutter,而非 hover 弹窗里。
真正容易被忽略的是:很多人花时间调试 hover 里的折叠,却没检查 editor.foldingStrategy 是否被意外设为 indentation 导致 region 失效,或 Python 扩展的 python.foldingStrategy 被覆盖成 none。这些底层配置错误,比“hover 折叠”这种不存在的需求更值得优先排查。


















