关联主题:: Obsidian插件
同级:: Obsidian美化:自定义复选框样式失效的排查与修复
下一级::
先说结论
这里所说的“隐藏菜单栏”,实际主要是隐藏 Obsidian 左侧文件列表中的笔记或文件夹。这个需求并不等于给文件加上 . 前缀,也不等于加密:文件仍然存在于知识库中,搜索、反向链接、同步和其他插件仍可能访问它。
我检查了本地的 Operation-File,并将它升级为 1.1.0。这次升级保留原来的隐藏路径,同时补上了文件树重建后的自动恢复、节点安全判断、路径去重、改名/移动同步和手动刷新命令。对当前已经使用 Operation-File 的知识库,先继续使用这个本地升级版是迁移成本最低的方案。
如果希望直接换插件,最接近的候选是 File Hider 和 Explorer Hider;如果需要按文件夹名称或规则批量隐藏,可以看 Hide Folders 或 File Explorer++。
一、为什么重启后隐藏文件夹会重新出现
Operation-File 的思路很简单:把被选中的路径保存到插件数据中,再给文件列表对应的 DOM 元素加上 .obsidian-hide-file 类,最后通过 CSS 的 display: none 把它从界面上隐藏。原有说明可以参阅 Operation-File 使用说明。
问题不在于“隐藏路径完全没有保存”,而在于“保存的路径”和“当前页面上的 DOM 节点”是两套状态:
- 原始代码主要在 Obsidian 完成布局时执行一次隐藏操作;
- Obsidian 折叠、展开、切换工作区、创建文件或刷新文件树时,文件列表节点可能被重新生成;
- 新生成的节点没有继承旧节点上的 CSS 类,于是被隐藏的项目又出现在列表里;
- 部分节点在文件树重建的瞬间还没有
el元素,直接操作 DOM 可能触发异常; - 原配置中还存在重复的隐藏路径,虽然通常不影响显示,但会让后续维护和判断变得不稳定;
- 单纯使用“切换 class”的写法,会把当前 DOM 状态当成真实状态,重建后容易出现显示/隐藏相反的问题。
因此,可靠的实现应该把“隐藏路径集合”作为唯一事实来源,每次文件树变化时都根据这个集合重新施加目标状态,而不是只在第一次加载时做一次操作。
二、本地 Operation-File 1.1.0 做了什么
本次修改集中在本地插件目录 .obsidian/plugins/Operation-File/,没有改变笔记文件名,也没有把隐藏功能伪装成真正的文件系统隐藏。
1. 让路径集合成为唯一状态
插件启动时会读取已有配置,清理重复路径,再保存回去。原来已经隐藏的文件和文件夹不会因为升级而丢失;第一次重新加载插件时,旧配置中的重复项会被归一化。
2. 监听文件树重建
除了初始布局,插件还会监听工作区布局变化、文件树节点变化以及相关的创建、删除、改名事件。新节点出现后,插件会再次扫描并应用隐藏状态,所以折叠/展开、切换工作区或 Obsidian 重新渲染文件列表后,隐藏项目能够恢复。
3. 用“设为目标状态”代替“盲目切换”
刷新时不再简单地对元素执行一次 toggle,而是明确判断:这个路径应该隐藏,就加上 CSS 类;不应该隐藏,就移除 CSS 类。这样重复刷新不会把结果越刷越乱。
4. 处理改名和移动
Obsidian 的文件路径会随改名或移动变化。如果隐藏状态只保存旧路径,原来的规则就会失效。现在插件会同步迁移相关路径,尽量保持改名/移动前后的隐藏意图。
5. 增加安全判断和手动刷新
文件树节点尚未完成渲染时,插件会跳过没有可操作元素的节点,而不是因为一次空节点访问导致整个刷新流程中断。同时增加了“刷新隐藏文件”命令,遇到主题或其他插件重绘文件树时可以手动执行。
三、升级后建议怎样验证
升级本地插件后,可以按下面的顺序做一次小范围验收:
- 确认原来隐藏的笔记和文件夹仍然在隐藏列表中;
- 退出并重新打开 Obsidian,检查隐藏状态;
- 折叠并展开父文件夹,检查状态是否保持;
- 切换工作区,或关闭再打开文件列表侧栏;
- 新建一个笔记,再把一个已有文件改名或移动,检查路径规则是否跟随;
- 如果界面仍由主题或其他插件重绘,执行一次“刷新隐藏文件”命令。
这套方案修复的是“界面状态没有重新应用”的问题。如果某个隐藏项仍然出现,优先检查它的实际路径是否已经改变,以及是否同时启用了其他会改写文件列表样式的插件。
四、有哪些类似插件
截至 2026 年 8 月 7 日,我按各项目公开仓库的功能描述做了对照。插件的维护状态和社区插件版本会变化,安装前仍应在 Obsidian 社区插件页面核对兼容性。
| 插件 | 适合的需求 | 与 Operation-File 的差异 |
|---|---|---|
| File Hider | 右键隐藏单个文件或文件夹,并在设置页统一管理 | 使用方式最接近,适合作为直接替代品 |
| Explorer Hider | 隐藏文件树中的文件和文件夹 | 同样偏向精确隐藏,但实现依赖插件与 CSS 配合 |
| Hide Folders | 按文件夹名称模式隐藏一组文件夹 | 更适合规则稳定的文件夹批量隐藏,不是单文件管理工具 |
| File Explorer++ | 使用自定义过滤器隐藏或固定文件、文件夹 | 规则能力更强,适合较大的知识库,但配置复杂度也更高 |
| Hider | 隐藏标题栏、状态栏、工具提示等 Obsidian 界面元素 | 它主要处理界面组件,不是本需求的文件/文件夹隐藏工具 |
我的选择建议
- 只想隐藏少数固定项目:先使用升级后的 Operation-File;想换成社区插件时,优先试 File Hider。
- 想按命名规则批量隐藏文件夹:优先考虑 Hide Folders;需要更复杂的过滤和固定规则时再考虑 File Explorer++。
- 想隐藏的是标题栏、状态栏或侧边栏按钮:这是 Hider 的范围,不要用文件隐藏插件去解决。
- 想让文件真正不被 Obsidian 索引:那是另一类“文件忽略/点号前缀”方案,会改变文件路径或索引行为,不应和单纯的界面隐藏混用。
同一个路径不建议同时交给两个隐藏插件管理。两个插件可能分别保存一份状态,最后会出现“一个插件显示、另一个插件隐藏”或无法判断由谁恢复的问题。
五、这次排查留下的通用经验
Obsidian 插件里凡是通过 DOM 和 CSS 改变界面的功能,都要把“持久化配置”和“当前 DOM”分开看。重启后出现问题,不一定意味着配置丢失,也可能只是页面重绘后没有重新应用配置。
对于这类插件,比较稳妥的实现顺序是:
持久化路径/规则
↓
监听布局、文件树和文件事件
↓
重新查找当前 DOM 节点
↓
按目标状态应用 CSS
↓
改名、移动、删除时同步清理状态这也是本次本地升级的核心:不追求“只执行一次就永远有效”,而是让插件能够在 Obsidian 重建界面后自我恢复。
相关资料
- Obsidian插件(2026.08.07):本次归档建立的 Obsidian 插件概念卡。
- Obsidian 插件列表:知识库中的插件清单入口。
- Operation-File 原始仓库:原插件公开仓库。
- Operation-File 原有说明:本知识库中的旧版使用记录。
本文记录的是本地插件 1.1.0 的升级结果,不代表上游仓库已经发布了同名版本。