「QuickAdd」给你的标题添加序号

代码:

// 数组可能越界, 可以自己往后面添加序号

module.exports = init
let quickAddApi
let list = ["📑 添加排序", "🆑 清除排序"]
let type = ["sort", "clear"]
let level
let count = [0, 0, 0, 0, 0, 0]
let select = 1 // 判断是否划选
let ht = [
    ["一、", "二、", "三、", "四、", "五、", "六、", "七、", "八、", "九、", "十、"],
    ["(一)", "(二)", "(三)", "(四)", "(五)", "(六)", "(七)", "(八)", "(九)", "(十)"],
    ["1.", "2.", "3.", "4.", "5.", "6.", "7.", "8.", "9.", "10."],
    ["1)", "2)", "3)", "4)", "5)", "6)", "7)", "8)", "9)", "10)",],
    ["A.", "B.", "C.", "D.", "E.", "F.", "G.", "H.", "I.", "J."],
    ["a.", "b.", "c.", "d.", "e.", "f.", "g.", "h.", "i.", "j."]
]

async function init(params) {
    ({ quickAddApi } = params)
    const q = await quickAddApi.suggester(list, type);
    switch (q) {
        case "sort":
            return await sort()
            break
        case "clear":
            return await clear()
            break
    }

}

async function sort() {
    level = -1
    const activeLeaf = app.workspace.activeLeaf
    let selection = activeLeaf.view.editor.getSelection()
    if (selection == "") {
        selection = app.workspace.activeLeaf.view.editor.view.data
        select = 0
    }
    const tArr = selection.split("\n")
    let result = ""
    for (let index = 0; index < tArr.length; index++) {
        const line = tArr[index];
        let h = line.split(" ")[0] + " "
        for (let hl = 0; hl < 6; hl++) {
            if (h == "#".times(hl + 1) + " ") {
                if (level > hl) count[level] = 0
                level = hl
                tArr[index] = tArr[index].replace(h, h + ht[level][count[level]++])
            }
        }
        result += tArr[index]
        if (index < tArr.length - 1) result += "\n"
    }
    if (select) return result
    app.workspace.activeLeaf.view.editor.cm.setValue(result)
}

async function clear() {
    const activeLeaf = app.workspace.activeLeaf
    let selection = activeLeaf.view.editor.getSelection()
    if (selection == "") {
        selection = app.workspace.activeLeaf.view.editor.view.data
        select = 0
    }
    for (let i = 0; i < ht.length; i++) {
        for (let j = 0; j < ht[i].length; j++) {
            selection = selection.replace(new RegExp("#".times(i + 1) + " " + ht[i][j], "gm"), "#".times(i + 1) + " ");
        }
    }
    if (select) return selection
    app.workspace.activeLeaf.view.editor.cm.setValue(selection)
}

String.prototype.times = function (n) {
    return Array.prototype.join.call({ length: n + 1 }, this);
};

使用教程:

  1. 将js代码放到你的 templater 脚本目录
  2. 新增一个宏
  3. 新增一个 capture 如图设置 she zhi

{{MACRO:文章::titleSort:init}}

注意替换 宏, 和 js 文件的名字

  1. 享受吧

演示视频: https://files.catbox.moe/a7xsjq.mp4

8 个赞

每次看borber,都不明觉厉。好厉害

非常棒,_谢谢分享,撒花,可以少装1个插件了。期待分享更多能让quickadd搭配使用的js脚本

请教下,想要忽略H1标题,所有编号只针对H2-H6生效,应该怎么改js代码呢?_谢谢

最简单的方法就是吧 ht 第一行里面的全部改成 “”

明白了,谢谢指点

有一些插件确实可以直接用quickadd 的脚本直接实现, ( 关键我不太喜欢记快捷键

是的。如果通过quick实现,就可以全在同一界面操作,省事很多

是的

1 个赞

有没有能自动添加需要的主题啊,类似 1,1.1,1.1.1这样

Obsidian title index ,但是一級標題也會被編號

多谢,不过不行的,因为他会把所有带#的tag加上序号

1 个赞

简睿学堂-emisjerry的个人空间_哔哩哔哩_bilibili 有支影片有講到修改這個外掛的作法,讓一級標題不加編號。

好用,感谢!
注释一下:
“ 1. 将js代码放到你的 templater 脚本目录”
主要看obs附件存放规则,如果放在指定文件夹,则要把js放在那个指定文件夹里。小白我搞了好一阵,哭。

哦哦 这个没考虑

效果真的很棒,尤其是在长文档上使用的时候

太厉害了!感谢分享这么好的经验!

新版本这个方法已经不失效了, 有更新后的脚本吗? :weary:

请问可不可以做成插件呀~对于小白来说插件的体验更友好,谢谢楼主