「TP 脚本」批量调整标题级别

一些需要调整标题级别的场景

  • 有些网络来源的内容,标题起始级别是三或四级
  • 有时修改笔记内容,删除了某些标题,子标题需要调整

可行的方法:

  1. 增强编辑插件:有标题级别调整,但时灵时不灵,原因未知
  2. linter 插件:可修正非连续标题,但杀伤力有点强
  3. 手动替换字符串:比较麻烦

所以,改了一个 TP 脚本(来源:Obsidian 标题修改全能脚本v2),可以对选中文本或整个文件中的所有标题,调高或调低级别。

<%*
// 设置标题级别 - templater-js
let file = app.workspace.getActiveFile()
if (file) {
    let targets = [
        '标题升级',
        '标题降级',
        '删除标题'
    ]

    let target = await tp.system.suggester(targets,targets)
    if (!target){ return }

    // 定义一个函数,用于降级标题
    let modHeaders = (content) => {
        return content.replace(/^#{1,6} (.*)$/gm, (match, p1) => {
            let hashCount = match.match(/^#+/)[0].length
            let newHashCount = 0
            if (target=='标题升级'){
                newHashCount = Math.max(hashCount - 1, 1)
            } else if (target=='标题降级'){
                newHashCount = Math.min(hashCount + 1, 6)
            }
            if (newHashCount==0){
                return p1
            }
            return `${'#'.repeat(newHashCount)} ${p1}`
        })
    }

    let sel = app.workspace.getActiveFileView().editor.getSelection()
    if (sel){
        let newContent = modHeaders(sel)
        await app.workspace.getActiveFileView().editor.replaceSelection(newContent)
    }else{
        let content = await app.vault.read(file)
        let newContent = modHeaders(content)
        await app.vault.modify(file, newContent)
    }

    new Notice(`已${target}`)
}
-%>

将此代码保存为 .md 文件,放到模板文件夹中
TP 脚本的详细使用方法见:【TP脚本】快速复制标题链接和内联代码 - #7,来自 Moy

推荐使用 Obsidian 自带的 Vim 模式的命令,用起来很方便,很强大,很灵活,很快捷

比如命令 :%s/^##/#/ ,只需输入 10 个字符,按下回车,就可以将当前文件的所有2级以上的标题降低一级

还有命令 :%s/^#/##/ ,只需输入 10 个字符,按下回车,就可以将当前文件的所有标题提高一级

另外,还有命令 :12,345s/^#{1,6}\s// ,只需输入 20 个字符,按下回车,就可以将当前文件的第 12 行与第 345 行之间所有的标题转换成正文文本

Vim 模式能做到的远不止这些,还有着更多的高效命令

(注:如果发现替换的效果不是想要的,可以按Vim 命令 u 或组合键 Ctrl + Z 来撤回变更)

1 个赞

补充一下,代码编辑器 VSCode 的替换功能也非常的好用。VSCode 的替换不仅可以支持正则表达式,而且还有替换的结果差异预览视图。

将 Obsidian 和 VSCode 一同使用,有着 1 + 1 大于 2 的效果和体验

(注:使用 Git 提前保存文件快照(Commit)后,可以轻松回滚不想要的文件变更(Change))

一个建议,除非是为了学习或消遣,不要单独一个人写脚本之类的代码,不要重复造轮子,要尽量与他人「协作」,避免闭门造车,避免不必要的「低质量重复劳动」

很多时候,我们可以通过搜索引擎和相关的专业网站搜索相关的关键词来满足自己的需求,比如通过谷歌搜索引擎搜索相关的 Obsidian 社区插件(大多数时候可以满足需求),相关的工具软件(绝大多数时候可以满足需求),相关的 GitHub 代码存储库(可以与他人「协作」写代码),相关的在线「协作」知识库(比如维基百科)

降标题写个脚本还好啦。想控制文中哪部分的标题,划选区域触发命令就降了,也舒心。

首帖说是修改的 TP 脚本,也算是与他人协作了。

还是看使用频率的问题。

我经常在手机上,用碎片时间整理一些笔记,用现成命令最方便。手机上没用过vim模式,方便不?
电脑上以前用 textadept 打开,正则替换。ob 也没开行号,因为我基本不存代码
现在用 templater,一键可视化操作,方便