遇到的问题
先说下我的使用情况,我在迁移和整理文档到ob的过程中,发现每次双链都需要手动加上[ ]引用才行,而我的情况是某个词组会被多篇文章多次引用,这样如果每次都手动创建非常痛苦
预期的效果
想要实现的效果是当新建文章的时候会自动对文库内已经存在的文章进行关联
举例:一篇手机测评文章中提到了“红米K70”这个词组,我根据这个词组创建了一篇文章用于双链给其他文章引用,这篇文章中我详细描述了该款手机的具体参数和图片。然后我在新建文章,或者复制黏贴文章过程中,如果包含“红米K70”这个词组,则会自动关联到我创建的双链文章。
因为是迁移来的,所以最好可以扫描库内所有文章关键词进行特定关键词关联。
已尝试的解决方案
note link
扫描速度缓慢,时常报错,且无法根据特定关键词进行扫描或者绑定。
content-linker-1.5.1
看功能列表是支持我的需求的,但是实际应用中,扫描结果存在较大误差,比如我库里K70关键词有7个,但是扫描结果里压根没有,其他标签倒是扫出来一推,但是都和我预期的没关系,这很奇怪
我的笔记结构是这样,创建特定词组文章,用于给其他文章引用,然后在这篇文章内更新就可以更新给所有引用的文章了。我双链最小单位是词组而不是文章。当然文章双链我也再用,已经会了
如果是新建笔记,那么通过手动创建双链或者使用补全形式都OK,但是我是迁移过来的,库里有大量的旧文档,这种情况再手动就很要命了,不过实在没办法那就只能手动了,就是费时间
感谢大家
已经解决,解决方式是用vscode这种文本处理工具,将MD当中的关键词替换成[[关键词]],然后重新打开ob重新索引即可。好处是还能限制特定关联,按需关联,非常方便
在此处键入或粘贴代码
核心代码:
// 获取编辑器内容
let fileContent = app.workspace.activeLeaf.view.editor.getValue();
// 获取潜在链接,并过滤代码块和已是链接的文本(仅简单对`[[]]`形式的链接过滤)
const mentions = app.vault.getFiles().map(item=>item.basename).filter(item=>fileContent.replace(/`+.*?`+/gs, '').replace(/\[\[.*?\]\]/gs, '').includes(item));
// 替换潜在链接
mentions.forEach(m=>fileContent=fileContent.replace(new RegExp(m, 'g'), `[[${m}]]`));
// 替换当前编辑器内容,需谨慎操作
app.workspace.activeLeaf.view.editor.setValue(fileContent)
可以用quickadd或runjs新建个脚本命令,然后用cmdr添加个命令到编辑器上方,需要时点击即可。
如果想创建或粘贴时执行,可以参考 on('editor-paste'),on('editor-change'),on('create')
等事件
不过,创建时往往是空文件,除非使用了模板之类。
注意:过滤已是链接的文本,仅简单对[[]]
形式的链接过滤,其他链接形式请自行实现。
以上代码仅供参考,涉及到文件修改操作需谨慎,务必测试无误后使用,后果自负。
我看了下关于内置的潜在链接,我的文章不知道为何,潜在链接是0,所以无法使用,导致我四处找插件,最后用替换的形式解决
内置潜在链接也不准,有时会把代码块等无需要加的地方误认为是潜在链接,所以很难适应各种情况,不适合自动替换,除非针对特殊场景进行。
内置为0,是个例,我觉得应该找到具体原因,而不是舍本逐末找替代方案。
alidew
(sir li)
2024 年10 月 19 日 03:38
9
虽然我不知道我理解的对不对,想要触发关键词创建双链,用Various Complements插件不就行了吗?
Lotustalk
(Lotustalk)
2024 年11 月 24 日 10:18
10
这个是虚拟连接,我想要的是实际关联,不过问题也不大