MDRazor

approved

by Sofqi

Hide formatting markers, list enhancement with soft-break, dir focus, vertical tabs, auto save workspace, auto pic clean. - This plugin has not been manually reviewed by Obsidian staff.

14 stars957 downloadsUpdated 14d ago0BSD

MDRazor

像剃刀一样精准打磨你的 Markdown 编辑体验。

GitHub Release License Obsidian Min App GitHub Stars

🇨🇳 中文 · 🇬🇧 English


安装

通过社区插件市场安装(推荐)

  1. 打开 Obsidian → 设置 → 第三方插件 → 社区插件市场
  2. 搜索 MDRazor 并安装
  3. 在已安装插件列表中启用

通过 BRAT 安装(预览版)

  1. 安装 BRAT 插件
  2. 在 BRAT 设置中添加 Dyse-Sofqi/MDRazor
  3. 手动启用 MDRazor 插件

简介

MDRazor 是一款 Obsidian 插件,专注于提升 Markdown 编辑体验。 目前提供隐藏样式列表增强标签页增强三大功能模块,更多功能正在开发中。

功能

功能按设置面板的四大部分组织,每项均可在设置面板中独立开关。


✂️ 隐藏样式

隐藏 Markdown 标记符号,光标移入时自动显示。更干净的实时预览,零干扰。

以下每种格式可独立开关:

  • 隐藏加粗符号 — 隐藏 ** 加粗标记符号
  • 隐藏斜体符号 — 隐藏 * 斜体标记符号
  • 隐藏高亮符号 — 隐藏 == 高亮标记符号
  • 隐藏删除线符号 — 隐藏 ~~ 删除线标记符号
  • 隐藏行内代码符号 — 隐藏 ` 行内代码标记符号
  • 隐藏转义符号 — 隐藏 \ 转义符号
  • 隐藏标题符号 — 隐藏 # 标题标记符号(支持 H1-H6),# 后无空格时不隐藏
  • 隐藏双链符号 — 隐藏 [[]] 双链格式标记
  • 隐藏 HTML 颜色标签 — 在实时预览中隐藏 <font color="#c00000"></font> 等 Hex 颜色标签对
  • 隐藏 HTML 下划线符号 — 在实时预览中隐藏 <u></u> 下划线 HTML 标签对

所有隐藏格式共享以下特性:

  • 鼠标点击格式内容边界时,光标会自动落在标记符号之外,避免输入时误判格式。
  • 由于格式符号被隐藏,可以根据光标经过时光标的闪烁判断光标途径的距离。

👁️ 空格可视化 — 以半透明 · 标记显示空格位置,一目了然看清缩进和对齐。基于 CM6 视图范围迭代,仅处理可视行,性能开销极低。半透明样式不干扰编辑。作为隐藏样式区域中的一项独立开关。

🔍 符号边界提示 — 光标处于格式标识符与文本内容边界时,在光标下方弹出小框,展示光标与隐藏标识符的位置关系(左/右两侧符号)。使用 CM6 showTooltip 系统,自动跟随光标位置、响应滚动和编辑器销毁生命周期。在隐藏样式设置区独立开关。


🗑️ 清理失联图片

  • 清理失联图片 — 在设置中启用后,左侧 ribbon 功能区出现垃圾桶图标按钮(trash-2)。点击后扫描库中所有 Markdown 笔记,提取三种图片引用语法(![[path]]![](path)<img src>),找出未被任何笔记引用过的图片文件(jpg/jpeg/png/gif/svg),将其移入系统回收站。每处理一张图片时弹出 Notice 报告具体文件名。

📝 列表增强

列表编辑体验优化,提供以下独立开关:

  • 列一体化 — 将列表标记(-1.*)视为原子单元:光标定位跳过标记,退格键一次删除整个标记。编辑体验更接近所见即所得。

  • 回车软换行 — 在列表项内按 Enter 仅插入换行、缩进及两个空格(等效原生 Shift+Enter 行为),不新建列表项。需要新建列表项时,再按一次 Enter 即可,也就是连续回车新建列表项。适合多行列表项。

  • 选项聚焦 — 光标移入列表项时,自动折叠所有非直属内容(兄弟、父兄弟等),仅展开焦点链(当前项、其祖先、及其子孙)。深度嵌套列表导航不再眼花缭乱。鼠标未弹起时不触发折叠,避免拖选过程中闪烁。

    • 二级子项最大展开数 — 选项聚焦的子设置(滑块 1-9 + 开关)。开启后,一级项的第二级子项数量 ≤ 设定值时该一级项展开。仅影响一级项,其后代仍受选项聚焦影响。选项聚焦关闭时此设置自动禁用。
  • 目录聚焦 — 点击文件列表中的文件夹名称时,仅展开该文件夹及其祖先链,同时折叠所有无关分支(同级、父同级、祖父同级等),专注当前目录结构。点击文件夹名称(非折叠箭头)触发,触发后再次点击同一个文件夹仅触发折叠状态的改变。折叠箭头可正常独立控制单层展开/折叠。

    • 🖱️ 空白区域展开 — 与目录聚焦共用开关(目录聚焦开启时可用)。点击文件列表空白区域时,展开所有一级文件夹,快速浏览全局目录结构。点击排序/筛选等操作区域不会误触。
  • 显示目录文件数量 — 在文件浏览器的每个文件夹标题右侧显示直接子项(子文件夹 + 文件)数量,不递归统计子文件夹内的内容。数量随文件创建/删除实时更新。基于 Obsidian vault 事件监听,创建或删除文件后 200ms 自动刷新。字体大小与文件夹名称一致。


📑 标签页增强

文件标签页管理,提供以下独立开关:

  • 默认新标签页打开 — 单击文件目录中的文件时,若标签页已存在则跳转到该标签页,否则打开新标签页。右键菜单新建文件时同样在新标签页中打开。避免重复标签页,文件导航更高效。Ctrl/Meta+ 点击时恢复 Obsidian 原生行为(在新标签页中打开)。

  • 🗂️ 垂直标签页 — 在文件列表中为已打开的文件提供标签页管理。顶部添加切换按钮(arrow-left-right 图标),一键切换「仅标签页」视图,隐藏未打开的文件和空文件夹;已打开的文件标题右侧显示关闭按钮。支持「仅标签页」与「完整目录」两种视图切换。标签页视图下隐藏未打开的文件和空文件夹,专注当前工作文件。关闭按钮显示在标题右侧,一目了然。关闭当前激活标签页时自动聚焦上一个标签页,与原生标签栏行为一致。

设置

在 Obsidian 设置 → 第三方插件 → MDRazor 中配置:

  • 隐藏样式 — 12 个开关:加粗、斜体、高亮、删除线、行内代码、转义符号、标题符号、双链符号、HTML 颜色标签、HTML 下划线符号、空格可视化、符号边界提示
  • 清理失联图片 — 1 个开关:启用后 ribbon 显示垃圾桶图标,扫描未引用图片
  • 列表增强 — 6 个开关 + 1 个子设置:列一体化、回车软换行、选项聚焦(含二级子项最大展开数)、目录聚焦、目录文件数量
  • 标签页增强 — 2 个开关:默认新标签页打开、垂直标签页
  • 状态栏增强 — 2 个开关:工作区切换、自动更新工作区布局

版本历史

2.3.3 (2026-07-27)

  • 修复:垂直标签页关闭按钮误关侧边栏笔记属性标签页closeTab() 使用 isInMainArea DOM 容器检测,跳过侧边栏叶子,笔记属性标签页不再被错误关闭
  • 新增:关闭激活标签页后自动聚焦上一个标签页 — 点击垂直标签页中当前激活标签页的关闭按钮时,自动按标签顺序激活上一个标签页(若关闭的是首个标签页则激活下一个),与 Obsidian 顶部标签栏原生关闭行为一致

2.3.2 (2026-07-26)

  • 新增:隐藏 HTML 下划线符号 — 隐藏样式设置区新增「隐藏 HTML 下划线符号」开关(默认开启)。在实时预览中隐藏 <u></u> 下划线 HTML 标签对。基于正则扫描,不依赖 CM6 语法树。格式启闭按钮一并控制此项

2.3.1 (2026-07-26)

  • 新增:符号边界提示 — 隐藏样式设置区新增「符号边界提示」开关。光标处于格式标识符与文本内容边界时,在光标下方弹出小框展示光标与隐藏标识符的位置关系。使用 CM6 showTooltip 系统,自动处理 tooltip 的滚动重定位和编辑器销毁清理
  • 修复:提示框不跟随滚动 + 切换标签页提示框残留 — 将手动 position: fixed tooltip DOM 管理替换为 CM6 原生 showTooltip 系统,自动处理滚动跟随和编辑器生命周期
  • 修复:加粗/斜体/高亮/删除线提示框字符重复getHintMarkers() 添加 seenRanges 去重,跳过装饰建产生的同范围 open+close 重复条目
  • 修复:Error: Calls to EditorView.update are not allowed while an update is in progressupdateHint()clearHint()view.dispatch() 包裹 queueMicrotask,避免在 update cycle 中递归 dispatch
  • 修复:构建配置错误导致 CM6 重复实例 — 使用 esbuild.config.mjs 正确配置 CM6 外部化,替代内联 --external:obsidian 构建
  • 重构:cursor-boundary-hint.ts 改为 CM6 StateEffect/StateField/showTooltip 架构 — 移除手动 DOM 管理,复用 CM6 原生 tooltip 系统

2.3.0 (2026-07-24)

  • 修复:垂直标签页切换回文件列表时全部文件夹被折叠(开关关闭时) — 移除有缺陷的 snapshot-restore 循环。VT 模式下真实 fileItems 仅被 CSS display:none 隐藏从未被修改,且 Obsidian 虚拟滚动导致大量文件夹不在 DOM 中,snapshot 误判为 collapsed。现在 toggle 关闭时跳过同步,原始折叠状态完好保留
  • 修复:目录聚焦开关切换后需重启 Obsidian 才生效 — 移除 registerDirFocus 中的 if (!enabled()) return 提前返回。handler 始终注册,每次点击时检查 enabled() 守卫,开关切换即时生效
  • 重构:Decoration 构建改为先收集 → 排序 → 一次性写入同一个 RangeSetBuilder — 消除多余分支(colorBuilder + RangeSet.join()),确保写入顺序正确

2.2.0 (2026-07-23)

  • 新增:隐藏 HTML 颜色标签 — 隐藏样式设置区新增「隐藏 HTML 颜色标签」开关(默认开启)。在实时预览中隐藏 <font color="#c00000"></font> 等 Hex 颜色标签对。基于正则扫描,不依赖 CM6 语法树,支持任意 Hex 颜色值。格式启闭按钮一并控制此项
  • 新增:垂直标签页关闭按钮悬停效果 — 关闭按钮新增 hover 背景色,默认图标色及悬停图标色,适配 Obsidian 标签页主题色。cursorpointer 改为 default
  • 新增:设置面板「状态栏增强」区域折叠功能 — 状态栏增强标题现可折叠/展开,效果与同界面下隐藏样式、列表增强、标签页增强等其他区域一致。折叠图标(chevron)点击正常触发折叠
  • 修复:设置面板折叠标题区域点击偶发不触发折叠 — 移除标题右侧 chevron 图标独立注册的 onClick 处理器及 .clickable-icon 拦截判断。标题文字区域和 chevron 图标区域统一由同一个 click listener 处理,消除两路点击路径的竞争问题

2.1.9 (2026-07-21)

  • 新增:新标签页打开双链 — 标签页增强设置区新增「新标签页打开双链」开关(默认开启)。在文档内点击双链(包括普通双链、别名双链、块引用双链)时,自动检测目标文档是否已存在标签页:若已存在则跳转到该标签页并定位到对应块位置(块引用时),否则在新标签页中打开。Ctrl/Meta+点击时恢复 Obsidian 原生行为。
  • 修复:新标签页打开双链处理逻辑完善 — 采用 CM6 编辑器源文本读取为主要策略,确保别名 [[page|label]] 和块引用 [[page#^blockid]] 格式的链接均能正确提取目标文件路径及子路径(subpath),并在已存在的标签页中准确定位到块位置

2.1.8 (2026-07-15)

  • 新增:隐藏样式启闭按钮 — 状态栏增强设置区新增「隐藏样式启闭按钮」开关(默认关闭)。开启后状态栏最左侧显示「标识」按钮,图标 square-dashed-mouse-pointer(任一格式隐藏开启)/ square-mouse-pointer(全部关闭),一键切换所有格式隐藏样式(加粗、斜体、高亮、删除线、行内代码、转义符号、标题符号、双链符号),不影响空格可视化。常驻命令面板命令 mdrazor-toggle-formatting 可绑定快捷键。设置开关仅控制按钮显隐。
  • 新增:格式隐藏按钮 hover 样式 — 与侧边栏伸缩按钮一致的 hover 背景色、圆角、文字颜色效果
  • 优化:侧边栏伸缩按钮图标更换 — 从 columns-3 改为 gallery-horizontal

2.1.7 (2026-07-14)

  • 新增:仅显示直接子项数量切换开关 — 「显示目录文件数量」下新增子开关,可选择统计直接子项(子文件夹 + 文件)或递归统计所有后代文件数量
  • 新增:右键新建文件在新标签页中打开 — 文件列表中右键菜单「新建文件」后自动在新标签页中打开,不再覆盖当前标签页
  • 修复:目录文件数量在折叠文件夹展开时丢失 — 使用 MutationObserver + 属性变更监听替代一次性 DOM 扫描,确保虚拟滚动中的文件夹展开后立即显示文件数量
  • 修复:插件重载后目录文件数量不刷新 — 初始化阶段使用 RAF 循环重试,覆盖 React 虚拟滚动的异步渲染延迟
  • 修复:目录文件数量因 React data-path 延迟设置而丢失 — 通过 setTimeout(0) + 50ms 重试机制推迟 badge 创建,确保 Obsidian React 渲染器完成属性写入后再处理
  • 修正:目录聚焦说明与实际行为不符 — README、设置面板、源码注释中的目录聚焦说明同步为实际行为(仅展开祖先链 + 点击文件夹,不展开子孙文件夹)

2.1.6 (2026-07-14)

  • 重构:状态栏按钮改用 Obsidian 原生 Lucide 图标 — 侧边栏伸缩按钮 SVG 图标改用 columns-3 Lucide 图标,工作区切换按钮 SVG 改用 panels-top-left Lucide 图标。原生图标自动适配 Obsidian 主题和暗色模式
  • 新增:侧边栏按钮显示"侧栏"标签 — 图标右侧显示文字,清晰标识按钮功能
  • 新增:侧边栏按钮原生 hover 阴影 — 鼠标悬停时显示背景色 + 圆角,与 Obsidian 原生状态栏按钮一致
  • 统一:按钮图标与文字间距 — 侧边栏与工作区按钮均使用 gap: 4px,视觉一致

2.1.5 (2026-07-12)

  • 修复:重启后工作区切换覆盖布局 — 关闭 Obsidian 时若第二个工作区为当前状态,重启后状态栏 currentWorkspaceName 错误初始化为第一个工作区名。点击切换时先将当前布局(实际为工作区 2)自动保存到工作区 1,导致两工作区布局一致。修复 findCurrentWorkspace 优先读取工作区插件内部 activeWorkspace 属性,不再默认取列表第一个

2.1.4 (2026-07-08)

  • 修复:重命名文件后垂直标签页关闭按钮失效 — 关闭按钮绑定时捕获旧路径闭包,重命名后 closeTab(oldPath) 找不到叶子。改存储路径为 data-path 属性,点击时实时读取;refreshCloseButtons 原地更新属性而非替换 DOM,避免 MutationObserver 死循环导致 Obsidian 卡死

2.1.3 (2026-07-07)

  • 新增:垂直标签页退出时同步折叠状态到文件列表 — 从「仅标签页」视图切回文件列表时,VT 中展开的文件夹保持展开,VT 中折叠的文件夹及 VT 中未显示的文件夹全部折叠,保持浏览状态一致性

2.1.2 (2026-07-06)

  • 新增:隐藏双链符号 — 设置面板「隐藏样式」新增"隐藏双链符号"开关。在实时预览中隐藏 [[]] 格式标记,同时具备光标排斥功能(点击 [[ 与内容交界处,光标自动移出标记)。[[page|alias]] 中的 | 分隔符保持可见
  • 修复:失联图片清理漏检纯链接引用[[image.png]](不带 ! 的 wiki link)现在也计入图片引用。之前仅匹配 ![[embed]] / ![md](img) / <img> 三种形式,导致通过纯链接引用的图片被误判为失联

2.1.0 (2026-07-05)

  • 新增:自动更新工作区布局 — 切换或加载工作区时自动保存当前工作区布局。与 Obsidian 原生"加载工作区"功能联动(monkey-patch loadWorkspace),同时与本插件状态栏工作区切换联动。设置面板「状态栏增强」新增独立开关,默认开启

2.0.7 (2026-07-05)

  • 修复:失联图片清理 API 兼容性FileManager.trashFile() 仅 Obsidian ≥1.1.x 可用,回退至 Vault.trash(),使 minAppVersion 1.0.0 通过 eslint-plugin-obsidianmd 校验
  • 优化:CSS lint 清理 — 移除 4 处 !important(改用更高优先级选择器覆盖)、重构 :has() 写法消除 :not(:has()),消除 no-important / no-recent-has 警告

2.0.6 (2026-07-05)

  • 修复:弃用 API 替换Workspace.activeLeafWorkspace.getMostRecentLeaf(),消除 @typescript-eslint/no-deprecated 报错
  • 修复:垂直标签页隐藏方案 — 移除 renderCustomListelement.style.display = 'none'destroyCustomList 中的 style.display = '',改用 CSS class 控制可见性
  • 修复:失联图片清理 API 替换Vault.trash()FileManager.trashFile(),尊重用户回收站偏好设置
  • 修复:空格可视化参数声明 — 移除 toDOM(view?: EditorView) 的可选标记,CM6 运行时始终传入 EditorView 实例;删除 document 兜底降级

2.0.5 (2026-07-04)

  • 重写:垂直标签页渲染引擎 — 弃用 CSS 隐藏 + fileItems API 方案,改为生成自定义 DOM 树替换虚拟滚动列表,仅渲染打开的标签页及祖先文件夹。使用原生 Obsidian CSS 类名,自动继承所有主题样式
  • 修复:文件列表中已打开文件的关闭按钮不显示 — 双路径 data-path 检测(.nav-file-title 优先,降级 .nav-file 祖先)+ MutationObserver 处理虚拟滚动延迟渲染
  • 修复:切换标签页后高亮 (is-active) 丢失 — 点击文件时立即设置高亮,不等待 leaf-change 异步重建;非文件 leaf 激活时回退 lastActiveFilePath 缓存
  • 修复:启动/刷新后首次切换 VT 视图无高亮 — resolve 活跃路径失败时 fallback 到第一个打开的标签页
  • 修复:VT 自定义列表中文件夹名误去除扩展名name.replace(/\.[^/.]+$/, '') 仅限文件节点,文件夹不再错误移除末尾字符
  • 修复:VT 文件列表关闭按钮在标签页关闭后残留refreshCloseButtons()detach() 及 leaf-change 时重新扫描,移除 orphan 关闭按钮
  • 优化:VT 交互改为捕获阶段事件containerEl.parentElement 上 capture listener 优先于 containerEl 上的目录聚焦事件触发
  • 删除:弃用的轮询重试、save/restore 文件夹状态、CSS display:none 隐藏方案、全量 forceExplorerRefresh

2.0.4 (2026-07-03)

  • 修复:垂直标签页同步流程重构 — 弃用轮询重试 + 全量折叠展开刷新,改用 MutationObserver 等待文件标题 DOM 就绪 + 单次 syncFolderStates 展开祖先/折叠非祖先,起始处 collapseAllFolders 折叠全部文件夹
  • 修复:垂直标签页展开祖先与折叠非祖先各遍历一次 fileItems — 合并为单次 syncFolderStates 遍历,展开祖先 + 折叠余下同时完成
  • 修复:tab-enhancer.ts 中 iterateAllLeaves 仅匹配已加载 leaf(.view.file),未匹配未加载 leaf — 增加 getViewState().state.file 兜底匹配
  • 修复:tsconfig.json moduleResolution: "node" 已弃用(TS 5.8+ 警告)— 改为 "bundler" 配合 esbuild
  • 优化:目录聚焦点击空白区域改为折叠全部文件夹(不再仅限一级文件夹)
  • 优化:垂直标签页退出时保留折叠/展开状态 — 切换前后不再全量破坏性展开

2.0.3 (2026-07-03)

  • 修复:点击文件列表中的文件时所有文件夹被展开 — 三个 register* 函数(目录聚焦/标签页增强/垂直标签页)在功能关闭时不再向文件管理器附加捕获阶段事件监听器。此前即使开关关闭,监听器仍被附加,干扰 Obsidian React 事件系统
  • 修复:垂直标签页从「仅标签页」视图切回文件列表时所有文件夹被展开 — 进入垂直标签页前保存各文件夹的折叠状态,退出时通过 setCollapsed() API 逐一还原,替代破坏性的 forceExplorerRefresh() 全展开
  • 修复:目录聚焦点击文件夹时同时展开其所有子孙文件夹 — computeCollapseStates 仅保留祖先链 + 点击文件夹展开,不再展开点击文件夹的全部子孙分支
  • 修复:目录聚焦空白区域点击行为与描述不符 — 空白区域展开 → 空白区域折叠,逻辑从展开全部一级文件夹修正为折叠全部一级文件夹
  • 优化:移除目录聚焦 applyStates 末尾多余的 view.requestUpdate?.() 调用 — setCollapsed() 直接触发 React 重渲染,无需额外刷新

2.0.2 (2026-07-03)

  • 修复:vertical-tabs.ts TS 类型错误 — leaf.view 缺少 .file 属性,添加显式类型断言
  • 修复:status-bar-enhancer.ts 与 vertical-tabs.ts 中无描述的 eslint-disable 指令 — 替换为精准的作用域抑制,附带描述;移除冗余 as WorkspacesPluginInstance 强转
  • 新增:vertical-tabs.ts 跨窗口安全 isHTMLElement 类型守卫,替代 instanceof HTMLElement
  • 优化:提升类型安全 — WorkspaceLeaf 类型参数替代隐式 any,AppInternalPlugins 接口替代 as any 链式强转

2.0.1 (2026-07-03)

  • 修复:状态栏工作区切换按钮初始化时自动获取并显示当前工作区名称,无需先点击

2.0.0 (2026-07-02)

  • 新增:状态栏工作区切换按钮 — 右下角状态栏显示工作区切换按钮,0-1 个工作区不显示、2 个工作区点击直接切换、3+ 个弹出浮层列表选切
  • 新增:浮层列表紧贴状态栏上方,hover 高亮、Escape / 点击外部关闭
  • 新增:工作区名称跟踪 — 切换时闭包记录当前名称,列表高亮当前项
  • 新增:设置面板「状态栏增强」分组 +「工作区切换」开关(默认开启)
  • 修复:工作区插件未启用时按钮自动隐藏,静默降级

1.9.9 (2026-07-02)

  • 修复:垂直标签页在文件列表很长时显示空白/不全 — 虚拟滚动因 display:none 隐藏大量元素后高度计算错误
  • 修复:切回文件列表后文件显示不全 + 滚动循环 — 退出时 forceExplorerRefresh() 强制重建虚拟滚动
  • 优化:非祖先文件夹改用 setCollapsed(true) API 折叠而非 CSS 隐藏 — 子节点物理移出 DOM,虚拟滚动不再错误测量
  • 新增:collapseNonAncestors() — 进入垂直标签页时折叠所有非活跃文件路径链上的文件夹
  • 优化:RAF 重试从 3 帧增至 8 帧,覆盖大型目录树的异步渲染
  • 优化:MutationObserver 新增对新插入 .nav-folder 节点的祖先标记,覆盖异步渲染的文件夹

1.9.8 (2026-07-02)

  • 新增:清理失联图片 — 设置开关 + ribbon 垃圾桶图标(trash-2),扫描库中未被任何笔记引用过的图片(jpg/jpeg/png/gif/svg),移入系统回收站
  • 优化:清理时逐张报告具体文件名,而非笼统进度

1.9.7 (2026-07-02)

  • 修复:选项聚焦将列表间有内容段落行误判为续行 — 两个列表被合并为同一块,触发前一个列表折叠
  • 优化:列表块边界检测增加缩进比较 — 内容行缩进 ≤ 前一项缩进时判定为段落边界

1.9.6 (2026-07-02)

  • 优化:二级子项不折叠上限 → 二级子项最大展开数,语义从"跳过折叠"改为"主动展开"
  • 新增:二级子项最大展开数开关依赖选项聚焦 — 选项聚焦关闭时自动禁用,避免歧义
  • 新增:README 安装说明 — 社区插件市场和 BRAT 两种途径

1.9.5 (2026-07-02)

  • 新增:选项聚焦新增「二级子项不折叠的上限」子设置 — 滑块(1-9) + 开关。开启后一级项的第二级子项数 ≤ 阈值时该一级项不折叠
  • 修复:manifest.json 版本号对齐至 1.9.5

1.9.4 (2026-07-02)

  • 新增:垂直标签页切换按钮激活状态样式(.is-active),与原生「显示当前文件」按钮一致,点击后图标有背景色和颜色加深
  • 修复:tab-enhancer 模块 any 类型警告 — 使用 WorkspaceLeaf 替代 any,openFile 添加 void 标记

1.9.3 (2026-07-02)

  • 新增:Ctrl/Meta+点击文件时还原 Obsidian 原生新标签页打开行为,绕过标签页增强的跳转逻辑
  • 优化:列表增强「聚焦选项」设置项更名为「选项聚焦」
  • 修复:鼠标按下未弹起时选项聚焦触发折叠导致闪烁 — 添加 pointerdown/pointerup 守卫,鼠标松开后才执行折叠

1.9.2 (2026-07-02)

  • 修复:关闭按钮 SVG 尺寸约束为 1em,避免撑大文件夹行高
  • 修复:垂直标签页检测重启后未激活的伪标签页(.view 为 null 时通过 getViewState() 获取路径)
  • 修复:伪标签页的关闭按钮现可正常注销对应快捷方式 leaf(通过 leaf.detach()

1.9.1 (2026-07-02)

  • 修复:Obsidian 重启后未加载视图的标签页未在垂直标签页中显示 — 通过 leaf.getViewState() 后备路径捕获伪标签页
  • 修复:关闭按钮 SVG 尺寸约束为 1em,避免撑大文件夹行高

1.9.0 (2026-07-02)

  • 新增:垂直标签页 — 文件浏览器的标签页管理。顶部添加切换按钮(arrow-left-right 图标),已打开的文件标题右侧显示关闭按钮,一键切换「仅标签页」视图,隐藏未打开的文件和空文件夹
  • 新增:空白区域展开 — 点击文件列表空白区域时,展开所有一级文件夹。与目录聚焦、垂直标签页和平共处
  • 修复:垂直标签页视图打开时目录文件计数隐藏;文件浏览排序/筛选按钮在空白区域点击功能中失效的问题
  • 优化:垂直标签页异步 DOM 填充健壮性提升(MutationObserver 监听、展开祖先路径重试)

1.8.2 (2026-07-01)

  • 新增:标签页增强 — 单击文件目录中的文件时,若标签页已存在则跳转,否则打开新标签页展示该文件。避免重复标签页,文件导航更高效

1.8.1 (2026-07-01)

  • 修复:目录文件计数样式注入方式改为 styles.css,符合 Obsidian 安全规范(禁止运行时创建 <style> 元素)

1.8.0 (2026-07-01)

  • 新增:目录文件计数 — 在文件浏览器的文件夹右侧显示直接子项数量(子文件夹 + 文件),随文件创建/删除实时更新,200ms 防抖刷新

v1.7.1 (2026-06-30)

  • 增强:目录聚焦 — 首次点击聚焦文件夹,再次点击同一个文件夹切换折叠状态。添加 focusedFolderPath 追踪当前聚焦目录,折叠状态切换避免重复展开全树
  • 优化:目录聚焦点击后折叠箭头可正常独立控制单层展开/折叠

v1.7.0 (2026-06-29)

  • 新增:隐藏标题符号 — 在实时预览中隐藏 # 标题标记(支持 H1-H6),# 后无空格时不隐藏,光标点击自动跳至标记左侧
  • 新增:隐藏样式设置面板新增「标题符号」开关

v1.6.1 (2026-06-27)

  • 修复:消除 ESLint any 类型错误,替换为本地接口定义提升类型安全

v1.6.0 (2026-06-27)

  • 新增:目录聚焦 — 点击文件列表文件夹名称时,展开子孙 + 祖先链,折叠无关分支
  • 修复:折叠箭头检测改用 .tree-item-icon.collapse-icon,兼容 Obsidian v1.12+

v1.5.0 (2026-06-27)

  • 修复:聚焦模式光标在列表最后一项末尾时被判定为列表之外的问题

v1.4.7 (2026-06-26)

  • 新增:隐藏转义符号(\)— 在实时预览中隐藏反斜杠转义符号,默认开启,支持边界光标排斥

v1.4.6 (2026-06-26)

  • 修复:空格可视化模块 lint 报错 — 改用 view.dom.ownerDocument 替代 document

v1.4.5 (2026-06-26)

  • 新增:英文 README(README.en.md)
  • 新增:badge 徽标 + 中英文切换入口
  • 新增:赞助信息
  • 修复:manifest 插件 id 改为小写(md-razor

v1.4.3 (2026-06-25)

  • 修复:聚焦模式光标脱离列表后仍匹配最后一项 — computeFoldIndices 对无下一兄弟项改用续行扫描边界,替代 Number.MAX_SAFE_INTEGER
  • 修复:聚焦模式最后一项折叠范围吞没后续内容 — computeFoldRanges 最后子树分支改为续行扫描(遇空行停止),替代 doc.length

v1.4.2 (2026-06-25)

  • 优化:回车软换行空白一级项清除格式时,上一行也为空则一并清除 — changes.fromline.from 改为 prevLine.from,一次 dispatch 删除两行

v1.4.1 (2026-06-25)

  • 修复:聚焦模式三四级项不触发折叠 — buildListItems depth 改用缩进栈算法替代 Math.round(indent/4)
  • 修复:聚焦模式缩进项折叠箭头错误定位到父级 — focusFoldService 改用行号映射替代 markerFrom 范围匹配
  • 修复:聚焦模式默认 fold service 覆盖自定义服务 — Prec.high 确保优先查询
  • 修复:无子项项显示折叠箭头,点击折叠同级 — 无子项返回 null,由默认 indentRangeFinder 处理
  • 修复:聚焦模式折叠项的子项续行未被折叠 — computeFoldRanges 扫描续行纳入折叠范围,不合并子项独立折叠

v1.4.0 (2026-06-25)

  • 新增:空格可视化 — 以半透明 · 标记显示空格位置
  • 新增:设置即时生效 — 开关变更后无需重启 Obsidian,所有编辑器即时响应
  • 新增:设置面板「隐藏样式」新增空格可视化开关
  • 新增:空白列表项回车提升层级 — 连续空白子项按 Enter 提升一级;一级项清除列表格式

v1.2.0 (2026-06-25)

  • 重构:MVC 架构拆分(model/controller/view),增强可维护性
  • 新增:列表聚焦模式(List Focus Option)—— 光标聚焦列表项时自动折叠非直属内容
  • 修复:聚焦模式下每个被折叠项独立显示一行 ...,不再合并
  • 优化:注释中文化

v1.1.0 (2026-06-24)

  • 新增:Enter 软换行(续行缩进 + 空白续行升级为列表项)
  • 新增:设置面板折叠区域
  • 优化:列表合并检测改用 cursorAt(),支持续行场景
  • 优化:所有功能默认开启
  • 迁移:设置项 enhancedListMarkers 自动迁移为 enterSoftBreak

v1.0.0 (2026-06-24)

  • 隐藏样式符号
  • 列一体化(光标修正 + 整体删除 + 智能合并)

Technical Stack

  • Built on Obsidian API
  • Uses CodeMirror 6 (ViewPlugin, Decoration, syntaxTree, domEventHandlers) for editor-level manipulation
  • Modular architecture: each feature resides in its own source file under src/

赞助

如果这个插件对你有帮助,欢迎扫码赞助 ❤️

赞助

License

0-BSD

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.