vscode原生不支持eno-notation语法折叠,需插件+手动配置;常见插件仅提供高亮而未注册foldingprovider,故无折叠箭头;启用indentation折叠或#region注释标记是可行方案。

VSCode 原生不支持 Eno-Notation 语法折叠,必须靠插件 + 手动配置才能实现区块折叠。Eno 是一种极简的配置/数据格式(类似 YAML/TOML),但 VSCode 默认语言服务不识别其结构块,editor.foldingStrategy 设为 "auto" 或 "indentation" 都无法自动识别 section、list、key-value 等语义块。
为什么 Enonot 插件装了还是不能折叠?
常见现象是:插件已安装,右下角语言模式也显示为 Eno,但行号旁没有折叠箭头,Cmd+Shift+[ 无反应。根本原因是:
- 该插件(如
eno-notion或vscode-eno)多数只提供语法高亮和基础语言支持,不注册 Folding Provider —— 即没告诉 VSCode “哪些文本范围可被折叠” - VSCode 的折叠逻辑依赖语言服务器返回的
FoldingRange[],插件若未实现此 API,就只能退化为纯缩进折叠(且需手动开启) - 部分插件甚至未声明
language-configuration.json中的folding字段,导致editor.folding设置对其无效
启用缩进式折叠(最简单可行方案)
Eno 文件本质靠缩进组织层级(如 section: 下缩进的 key、list 项等),启用缩进折叠是当前最稳定的方式:
- 打开
settings.json(命令面板输入Preferences: Open Settings (JSON)) - 添加语言专属配置:
{ "[eno]": { "editor.foldingStrategy": "indentation", "editor.showFoldingControls": "always" } } - 确保文件实际以
.eno结尾,且右下角语言标识为Eno;若显示Plain Text,点击后选择Eno - 注意:缩进必须统一(全空格或全 Tab),混用会导致某级折叠失效
用 #region 手动标记复杂区块
当缩进折叠不够精准(例如想把一整段 multi-line value 或嵌套 list 单独收起),可用注释标记强制创建折叠区:
- 在 Eno 文件中插入独占一行的标记:
// #region API config
…你的 Eno 内容…// #endregion - 该方式不依赖语言支持,只要插件没禁用注释折叠(绝大多数未禁用)即可生效
- ⚠️ 严格要求:
// #region和// #endregion必须顶格写(无前置空格),且不能与 Eno 语法行混用缩进 - 不推荐用于深层嵌套结构——Eno 本身无块级作用域,强行用
#region可能割裂语义,阅读时易误解
折叠状态不保存?这是设计使然
VSCode 默认不会记住单个文件的折叠展开状态,每次打开都重置为全展开。这不是 bug,而是为避免状态污染协作场景。若你常需保持特定折叠视图:
- 可安装扩展
fold-persist(注意兼容性,2026 年最新版需 VSCode 1.90+) - 或改用工作区设置:
"workbench.editor.restoreViewState": true,但该设置影响所有编辑器视图,非仅折叠 - 真正关键的是:Eno 文件通常作为配置被频繁读取,**过度依赖折叠状态反而掩盖结构问题**——如果一个 .eno 文件需要层层折叠才能看清,大概率该拆分成多个小文件











