𝙡𝙞𝙩𝙨𝙘𝙤𝙧𝙥𝙞'𝙨 博客

  • 首页
  • 隐私政策
  • 小工具
𝐓𝐡𝐞 𝐋𝐚𝐤𝐞 𝐇𝐨𝐮𝐬𝐞
  1. 首页
  2. 收集
  3. 正文

Obsidian批量调高标题级别,H3变H2,H4变H3

2026-03-13 61点热度 0人点赞 0条评论

Obsidian 批量调高标题级别,H3 变 H2,H4 变 H3


在 Obsidian 中批量调整标题级别,最快且最稳妥的方法是使用 正则表达式 (Regex) 进行替换。你可以根据你的操作习惯选择以下两种方式:

方法一:使用内置搜索替换(针对单个文件)

如果你只想修改当前打开的文档,按下 Ctrl + H (Windows) 或 Cmd + Alt + F (Mac) 打开替换面板:

  1. 开启正则模式 :确保搜索栏右侧的 .* 图标已点亮。
  2. 查找内容 : ^### (.*)$
    • 解释:匹配以三个 # 开头的行。
  3. 替换内容 : ## $1
    • 解释:将三个 # 替换为两个,并保留后面的文字内容。
  4. 执行 :点击“全部替换”。

注意 :执行时请遵循**“从高到低”** 的顺序。先将 H3 变 H2,再将 H4 变 H3。如果你反过来(先 H4 变 H3),那么原本的 H4 最终会由于连续匹配变成 H2。


方法二:使用全局插件(针对整个仓库)

如果你需要跨文件批量修改,推荐使用 Global Search and Replace 插件或强大的 Apply Patterns 插件。

使用通用正则表达式逻辑:

为了安全起见,建议使用以下捕获组规则,它可以更精确地识别标题:

目标操作 查找正则 (Find) 替换为 (Replace)
H3 → H2 ^###\s+(.*) ## $1
H4 → H3 ^####\s+(.*) ### $1

方法三:自动化脚本(针对重度自动化用户)

既然你熟悉 QuickAdd 或 Templater ,可以编写一个简单的 JavaScript 脚本来处理选中的文本:

JavaScript

// 示例逻辑:将选中内容的标题级别整体调高一级
let selection = tp.file.selection();
let updated = selection.replace(/^#(#+)\s/gm, (match, p1) => {
    return "#".repeat(p1.length) + " ";
});
// 替换当前选中的内容

💡 小贴士

  • 备份先行 :在进行大规模正则替换前,建议先备份你的笔记库。
  • 空格检查 :确保你的标题符合标准 Markdown 格式( # 后必须带一个空格)。上面的正则 \s+ 已经考虑到了这一点。

如果你有更复杂的结构(比如需要一次性把 H2-H6 全部向上提一级),需要我帮你写一个完整的循环替换脚本吗?


写一个完整的循环替换脚本


既然你已经习惯了在 Obsidian 中使用 QuickAdd 或 Templater 处理自动化流,我们可以编写一个更加稳健的 JavaScript 脚本。

这个脚本逻辑的核心在于: 逆序处理标题级别 。这样可以避免“H4 变成 H3 后,在同一轮循环中又被误判为原本的 H3 变成了 H2”的问题。

核心逻辑设计

我们将脚本设定为:扫描选中的文本,识别所有的 Markdown 标题,并将它们的 # 数量减一(最低减至 H1)。


脚本代码 (适用于 QuickAdd 或 Templater)

你可以将以下代码放入 QuickAdd 的 Capture 脚本或 Templater 的脚本文件中:

JavaScript

<%*
// 获取当前活动的 Markdown 视图
const activeView = app.workspace.getActiveViewOfType(tp.obsidian.MarkdownView);

if (activeView) {
    const editor = activeView.editor;
    const selection = editor.getSelection();

    if (!selection) {
        new tp.obsidian.Notice("⚠️ 请先选中一段包含标题的文字");
        return;
    }

    // 分行处理
    const lines = selection.split('\n');
    
    // 遍历每一行进行替换
    const newLines = lines.map(line => {
        // 匹配 2 到 6 个 # 开头的标题
        return line.replace(/^(#{2,6})\s+(.*)/, (match, hashes, content) => {
            const newLevel = hashes.length - 1;
            // 确保至少保留一个 # (即 H1)
            const newHashes = "#".repeat(Math.max(1, newLevel));
            return `${newHashes} ${content}`;
        });
    });

    // 写回编辑器并发送通知
    editor.replaceSelection(newLines.join('\n'));
    new tp.obsidian.Notice("✅ 选区标题级别已调高");
} else {
    new tp.obsidian.Notice("❌ 无法获取当前编辑器");
}
%>

脚本要点说明

  1. 防止“降级踩踏” :脚本使用了 #{2,6} 。这意味着它会跳过一级标题(H1),因为标准 Markdown 不支持“H0”。
  2. 正则精确捕获 :使用 ^(#{2,6})\s+(.*) 确保只匹配行首的标题,而不会误伤正文中的 # 字符(如标签或代码块)。
  3. 多行兼容 :通过 split('\n') 和 map 处理,即使选区中夹杂着普通正文,脚本也只会精准修改标题行,保持正文不动。

如何使用?

  1. QuickAdd 用户 :
    • 创建一个新的 Macro 。
    • 添加一个 User Script ,将上述代码粘贴进去。
    • 在 Command Palette 中运行该宏即可。
  2. Templater 用户 :
    • 将代码包裹在 <%* ... %> 标签中。
    • 保存为脚本模板,通过快捷键或脚本菜单触发。

进阶建议

  • 确认选区:确保你确实手动选中了文本。
  • 空格规范:检查你的 Markdown 标题 # 后面是否有一个标准的空格。
  • 控制台报错:按下 Ctrl+Shift+I (Windows) 或 Cmd+Option+I (Mac) 打开开发者工具,查看 Console 是否有更详细的错误堆栈。

实践效果

Gemini_Generated_Image_fq1r9xfq1r9xfq1r.jpg

选择一段文本,执行脚本,标题自动提高一个级别。效果很好,满足需求。

一个很长的笔记,有时要拆分出一部分出来。拆分之后,新笔记的标题可能不太合适,需要调高标题级别。

Tag: #Obsidian #文本处理

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: clippings
最后更新:2026-03-13

litscorpi

久在樊笼里,复得返自然

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • 方法一:使用内置搜索替换(针对单个文件)
  • 方法二:使用全局插件(针对整个仓库)
  • 方法三:自动化脚本(针对重度自动化用户)
  • 💡 小贴士
  • 核心逻辑设计
  • 脚本代码 (适用于 QuickAdd 或 Templater)
  • 脚本要点说明
  • 如何使用?
  • 进阶建议
  • 实践效果
分类
  • 个人 / 121篇
  • 分享 / 240篇
  • 收集 / 21篇
标签聚合
旅游 网站 学习 AI 理财 工作 生活 clippings 音乐 我的剪辑 阅读 随笔 阅历 影视 娱乐 美文 互联网 数码电子 代码 教程 资源分享 软件应用
书签
  • icloud
  • office 365
  • OneNav
  • Todoist
  • YouTube
  • 微博
  • 抖音创作者中心
  • 知乎
  • 阿里云盘

COPYRIGHT © 2023 litscorpi's博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang