关联主题:: Obsidian插件
同级:: Obsidian美化:自定义复选框样式失效的排查与修复
下一级::

先说结论

这里所说的“隐藏菜单栏”,实际主要是隐藏 Obsidian 左侧文件列表中的笔记或文件夹。这个需求并不等于给文件加上 . 前缀,也不等于加密:文件仍然存在于知识库中,搜索、反向链接、同步和其他插件仍可能访问它。

我检查了本地的 Operation-File,并将它升级为 1.1.0。这次升级保留原来的隐藏路径,同时补上了文件树重建后的自动恢复、节点安全判断、路径去重、改名/移动同步和手动刷新命令。对当前已经使用 Operation-File 的知识库,先继续使用这个本地升级版是迁移成本最低的方案。

如果希望直接换插件,最接近的候选是 File HiderExplorer Hider;如果需要按文件夹名称或规则批量隐藏,可以看 Hide FoldersFile 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. 增加安全判断和手动刷新

文件树节点尚未完成渲染时,插件会跳过没有可操作元素的节点,而不是因为一次空节点访问导致整个刷新流程中断。同时增加了“刷新隐藏文件”命令,遇到主题或其他插件重绘文件树时可以手动执行。

三、升级后建议怎样验证

升级本地插件后,可以按下面的顺序做一次小范围验收:

  1. 确认原来隐藏的笔记和文件夹仍然在隐藏列表中;
  2. 退出并重新打开 Obsidian,检查隐藏状态;
  3. 折叠并展开父文件夹,检查状态是否保持;
  4. 切换工作区,或关闭再打开文件列表侧栏;
  5. 新建一个笔记,再把一个已有文件改名或移动,检查路径规则是否跟随;
  6. 如果界面仍由主题或其他插件重绘,执行一次“刷新隐藏文件”命令。

这套方案修复的是“界面状态没有重新应用”的问题。如果某个隐藏项仍然出现,优先检查它的实际路径是否已经改变,以及是否同时启用了其他会改写文件列表样式的插件。

四、有哪些类似插件

截至 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 重建界面后自我恢复。

相关资料

本文记录的是本地插件 1.1.0 的升级结果,不代表上游仓库已经发布了同名版本。