quickaddjs 能否读取MD文件的内容

代码替换进去,执行quickadd的该项时,直接提示:未找到相关插件。

@Probe 你有在ob测试过吗? THX

测完了发给你的, 刚又试了一遍也正常

需要更详细的报错记录?

如何导出报错记录?

我输入的代码没有错误吧?

直接看 Ctrl+Shift+i 的 log 就行了吧, 简单错误这里直接就显示出来了

截图这里看着正常, 最后别忘了 return choice

是我犯了低级错误,配置文本里,我用了choice,不是Choice,修改后,可以了

如果不介意用dataview的话,可以用 dv.page(fileSelector)['Choice'] 替换手动截取
不过要用 Choice:: 的格式

### 任意标题

Choice:: 灵感
Choice:: 留影
...
Choice:: 账号
...
//dv.page()

dv.paragraph(dv.current()['Choice'].join(', '))

image


  1. Dataviewjs 基本用法 - 经验分享 - Obsidian 中文论坛
  2. Codeblock Reference - Dataview

哦哦, 对, 我的样例确实应该写健壮些, 一个没有匹配到怎么办, 拼写不对怎么办, 多了少了空格怎么办, 不想意外匹配的怎么注释掉, 等等

对, 用 dataview 抓取元数据, 通常比自己写解析要稳, 好办法~

因为是为了分类闪念录入,所以用的是quickadd
录入后,我再用dataview聚合。

quickadd里面的脚本也可以使用 dataview 的方法
代码
image

效果


  1. Overview - Dataview

代码里的(str) =>str 似乎无定义,不能运行

const lines = this.app.plugins.plugins.dataview.api.page("0 资料筛选/0筛取规则0.md")["choice"];
let choice = await this.quickAddApi.suggester((str) => str, lines);

改成这样,但似乎dataview不能返回yam属性数组,我在win运行的效果是空表

const lines = this.app.plugins.plugins.dataview.api.page("0 资料筛选/0筛取规则0.md")["choice"];
let choice = await this.quickAddApi.suggester(lines, lines);

md里的相关部分的内容是:

### 闪电日记选项列表
choice: 待办
choice: 摘录
...
let choice = await this.quickAddApi.suggester((str) => str, lines);

这里的 (string) => str 是 js 的 lambda表达式 (js也叫箭头函数),quickAddApi.suggester 这里接受这种 mapping 函数作为 displayItems

你遇到的问题是 md 里 元数据的格式不对,是 “choice::” 而不是 “choice:”,然后你的路径里有空格最好注意一下

到这个程度其实就是编程和阅读文档的能力了:joy:


https://blacksmithgu.github.io/obsidian-dataview/annotation/add-metadata

请教下:
为什么这个代码,sugest…的第一个参数是lines能正常运行

let lines = await content.split("\n")
            .filter(line => line.trim().startsWith("choice: "))
            .map(line => line.split(':')[1].trim());
let choice = await this.quickAddApi.suggester(lines, lines);

但换dataview取得的数组,传入lines,lines参数就运行不了,要改成这样才能运行:

const lines = this.app.plugins.plugins.dataview.api.page("0 资料筛选/0筛取规则0.md")["choice"];
let choice = await this.quickAddApi.suggester((str) => str,lines);

这是否表示,可以用quickadd获取dataview的静态内容输出,而不象dataview那样,每次都要聚合刷新?

把现在的dataviewjs代码,修改为js quickadd代码,能给出通用方法吗?

另外,若是只有一个选项时,dataview.api.page(。。。)[“dkfjdk”]取回的不是数组,而是串,如何简洁地加入处理这个例外的代码?

@iins
试修改了一段dataviewjs,把dv.都替换成 this.app.plugins.plugins.dataview.api.page
去掉dv.paragraph输出,改为return

把它放到js quickadd里,用quickadd作快速聚合输出,但不成功。
^^^^
修正,能返回内容。

现在要研究的是,dv.table,dv.list,dv.paragraph的输出,能否返回给quickadd

Mark一下,看两个神仙切磋技艺

我也搬个小板凳看一下