全文自动编号

  • 一键自动编号
  • 不会错位
  • 长文也可用
  • 多组编号互不干扰
  • 自定义编号组名
  • 可自定义格式
  • 原子性

JS 代码


await app.vault.process(app.workspace.getActiveFile(), data => {
	var match = new Set(data.match(/<span data\-auto\-index="(.*)">/g))
	var heads = [...match]
	var note = data
	heads.map(head => {
		head.replace('-', '\-')
        var splits = note.split(new RegExp(head+'(?:.*)<\/span>','g'))
        var result = [splits[0]]
        for(var i=1; i<splits.length; i++){
        	result.push(`${head}${i}</span>${splits[i]}`)
        }
        note = result.join('')
    })
    return note
})

使用方法

新建一个xx.js文件,写入js代码。
在需要编号的地方写入<span data-auto-index="xxx"></span>xxx为自定义编号组名。

在该笔记任意地方写入(需Dataview插件,并开启内联js查询)

`$=dv.view('.../xx')`

'.../xx'xx.js的路径,不含后缀。
自动编号后,删掉或注释掉。不删就是隔段时间自动编号,不推荐,耗性能。

可以将xx.js代码添加到命令,或者使用其它js插件。

编号前

<span data-auto-index="a"></span>
<span data-auto-index="a">0</span>
<span data-auto-index="b"></span>
<span data-auto-index="a">999</span>
<span data-auto-index="b"></span>
<span data-auto-index="a">1</span>

编号后

<span data-auto-index="a">1</span>
<span data-auto-index="a">2</span>
<span data-auto-index="b">1</span>
<span data-auto-index="a">3</span>
<span data-auto-index="b">2</span>
<span data-auto-index="a">4</span>

需要注意编号组名避免出现正则相关符号。
自定义格式只需要修改代码中的正则表达式即可。