obsidian社区插件
Dataview 实战 - 通过 Dataview 列出关键字所在的行和行数
插件ID:dataview%E5%AE%9E%E6%88%98-%E9%80%9A%E8%BF%87dataview%E5%88%97%E5%87%BA%E5%85%B3%E9%94%AE%E5%AD%97%E6%89%80%E5%9C%A8%E7%9A%84%E8%A1%8C%E5%92%8C%E8%A1%8C%E6%95%B0
dataview%E5%AE%9E%E6%88%98-%E9%80%9A%E8%BF%87dataview%E5%88%97%E5%87%BA%E5%85%B3%E9%94%AE%E5%AD%97%E6%89%80%E5%9C%A8%E7%9A%84%E8%A1%8C%E5%92%8C%E8%A1%8C%E6%95%B0
dataview%E5%AE%9E%E6%88%98 %E9%80%9A%E8%BF%87dataview%E5%88%97%E5%87%BA%E5%85%B3%E9%94%AE%E5%AD%97%E6%89%80%E5%9C%A8%E7%9A%84%E8%A1%8C%E5%92%8C%E8%A1%8C%E6%95%B0:列出关健字所在的行内容以及所在行数
Dataview 实战 - 通过 Dataview 列出关键字所在的行和行数
应用场景
有些时候,我们想查询一些关键字,可以用 ob 内置的查询,但是不能持久化。用 dataview 的表格就很爽!一目了然,可以放在 Hompage 或者周报内。
Dataview 列出关键字所在的行和行数
查询 老虎
在动物标签文件中出现的行和所在行行数。
创建文件
我们先创建我们用来查询的文件:
老虎.md
---
tags: 动物
title: 老虎
date created: 2023年11月23日,星期四,17:01:33
date modified: 2023年11月23日,星期四,17:05:53
---
老虎,威猛独特,丛林之王。独特的斑纹彰显力量,瞬间吸引眼球。象征着野性和勇气,是自然界的霸主。
老虎,金光闪烁的皮毛隐藏着丛林的神秘,眼中透着锐利的光芒。它是草原和森林的统治者,独自行走,体现野性的自由。如同一幅自然的画卷,老虎展现着生命的威严与美丽。
猫.md
---
tags: 动物
title: 猫
date created: 2023年11月23日,星期四,17:01:33
date modified: 2023年11月23日,星期四,17:07:23
---
猫,灵巧的猎手,身姿轻盈。独立而神秘,流动的瞳孔中闪烁着聪慧。软毛细腻,温暖如阳光,是家庭的陪伴者,亦是夜晚的守护者。
猫,优雅的生灵,纤巧的身影在月光下踱步。独立而亲密,眸中蕴含着奇妙的智慧。柔软的毛发承载了温馨,是心灵的慰藉,夜晚的安慰。
在丛林深处,老虎和小猫成为意外的伙伴。老虎庇护着小猫,共同漫游。老虎威猛,小猫灵巧。他们相互学习,老虎变得温和,小猫变得勇敢。这对特殊的朋友展现了不同生命间的默契与理解,教人懂得,即便体型迥异,心灵却可以相通。
狮子.md
---
tags: 动物
title: 狮子
date created: 2023年11月23日,星期四,17:01:33
date modified: 2023年11月23日,星期四,17:16:05
---
狮子,草原之王,壮美的鬃毛如金色火焰。狮吼震天,威武雄壮。雄狮领导着狮群,象征着权威和家族的荣耀。
狮子,草原霸主,骄傲地巡视领地。雄壮的体魄与黄金般的鬃毛共舞,呈现着自然之王的荣耀。狮吼激荡风云,豪情万丈。
在草原上,老虎和狮子曾是竞争对手。一天,他们面对共同的威胁,决定合作。老虎展现出卓越的策略,狮子表现出强大的力量。他们团结一致,共同克服困境,最终变成了互相尊重的朋友。这个故事告诉我们,合作与团结可以超越竞争,创造出更强大的力量。
代码查询
let files = dv.pages('#动物').where(p=>p.file.path != dv.current().file.path)
// 调用函数
extractKeywords(['老虎'],files)
async function extractKeywords(keywordArr,files) {
let paths = files.map(p=>p.file.path)
files = app.vault.getMarkdownFiles().filter(p=>paths.includes(p.path))
let values = []
let num = 0
for(let file of files) {
let content = (await app.vault.cachedRead(file)).split('\n')
console.log("===content===")
console.log(content)
console.log("===content===")
keywordArr.forEach((k)=>{
content.forEach((element,index)=>{
if (element.includes(k)){
values.push([`[[${file.basename}]]`,"**【" + String(index+1) + "】**" + element.trim().replaceAll(k, "=="+k+"==")])
}
})
})
}
dv.table(["file", "所在行"], values)
}
上面的代码执行结果:
我们可以看到:
- 搜索到的关键字是高亮的。
- 【12】代表的这一行在文件中的行数。
- file 的文件连接,点击就能跳转到指定文件。
FAQ
如何自定义查询范围
根据 dataview 语法来写自己要查询的文件范围。
let files = dv.pages('#动物').where(p=>p.file.path != dv.current().file.path)
dv.page('').where(p=>p.file.path != dv.current().file.path)
:除了当前文件的其他所有文件dv.pages('#动物')
:查询带有动物标签的文件- 更多内容请看 https://blacksmithgu.github.io/obsidian-dataview/api/code-reference/#dvpagessource
如何查询多个关健字
修改下面的函数的数组,比如你要查老虎和猫,就可以这么写 extractKeywords(['老虎','猫'],files)
。
// 调用函数
extractKeywords(['老虎'],files)
如何修改查询结果样式
values.push([`[[${file.basename}]]`,"**【" + String(index+1) + "】**" + element.trim().replace(k, "=="+k+"==")])
- 加粗就是把
"=="+k+"=="
改成"**"+k+"**"
。 - 修改行号样式
【】
改成()
就是把"**【" + String(index+1) + "】**"
改成"**(" + String(index+1) + ")**"
。
讨论
若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。
反馈交流
其他渠道
版权声明
版权声明:所有 PKMer 文章如果需要转载,请附上原文出处链接。