使用dataview,在文章内部用 xx:: 的时候,怎么保证类别的稳定?

使用dataview,在文章内部用 xx:: 的时候
经常隔久了就忘记了自己要输入的 检索文字 xx 是什么了
或者我想整库修改 XX1 为 XX2

有办法类似tag一样的快速选取输入
2024_111815_5840
,以及统一修改的方法吗
2024_111816_0134

这 dataview 风格的 inline 属性, 感觉还是没地位

理由是, 笔记最开头 frontmatter 里的属性, 可以 Ob 全局搜索时直接拿 [property_from_yaml] 搜到,
但是写在正文里的 [dv_inline_prop:: xx] 就没法拿 [dv_inline_prop] 搜到

想要让 Ob 原生就能认出 / 补全这种 [dv_inline_prop:: xx], 支持类似 “文档属性” 里那种下拉补全还自带类型检测的细致交互, 我觉得希望不大


所以说实话这问题, 个人建议就另起一个笔记, 把常用的 [inline_prop1:: xx] 手动收集进来就完了

专门造个笔记, 把常用的 `[inline_prop1:: xx]` 都备忘一下

#dv_inline_prop/inline_prop1  用于 xxx 场合, 值为 1~10
#dv_inline_prop/inline_prop2  用于 yyy 场合, 可选值为 已读 未读 需再读 ...

然后要用时, 万一记不得了, 就输入 #dv_inline_prop/... 看一眼 (或者实际敲出来再删掉无用字符)


最后, 真想要收集全仓库的 dv inline 属性, 其实也能做到, 比如用下面的 QuickAdd 脚本就行

原理也简单, 其实就是 dv 捋一遍笔记的属性, 搁到 QuickAdd 的 suggester 里, 等用户选用

module.exports = async function() {

    const quickAddApi = app.plugins.plugins.quickadd.api;
    const dv = app.plugins.getPlugin('dataview').api;
    
    // 收集所有已存在的属性
    const properties = new Set();

    for (let page of dv.pages(`"仓库内的/带有dv行内属性的子目录"`)) {
        for (let [k, v] of Object.entries(page)) {
            if (k === 'file') continue;
            properties.add(k);
        }
    }

    // 将属性转换为数组
    const propertyArray = Array.from(properties);

    // 使用 QuickAdd 的 suggester 功能创建下拉选单
    const selectedProperty = await quickAddApi.suggester(propertyArray, propertyArray);

    if (selectedProperty) {
        // 获取当前活动的编辑器
        let editor = app.workspace.getActiveFileView().editor;
        // 获取当前光标位置
        const cursor = editor.getCursor();
        // 在光标位置插入用户选择的值
        editor.replaceRange(`[${selectedProperty}:: xx]`, cursor);
    
    }
};

至于 “统一修改的方法” 感觉最简单就是全库批量查找替换

Ob 特点就是它两个抽象层次 (解析后的富文本结构, 解析前的纯文本) 都是对用户公开的, 如果有的事情在富文本的层次不好解决, 就直接当成纯文本去改…

这个脚本怎么用的,求教

论坛有大量的 QuickAdd 教程和脚本资源, 比如这个 QuickAdd JS & Templater JS 简介及相互修改 - 经验分享

我这个是类似 “QuickAdd Macro 加载外部 JS” 的流程, 脚本单独存一个 *.js 里, 一个 UserScript 对应一个宏

从达到 “具体目的” 的角度, 如果没用过这插件, 那我不太建议专门弄 QuickAdd 来做这事 (因为最后就只能让添加 dv inline 属性方便 “一丁点”, 跟复制着用区别也不大)

从学习的角度, 那自然就另说了

总之看楼主的, 如有具体问题, 欢迎继续讨论