一键导入
obsidian-bases
创建和编辑包含视图、过滤器、公式和汇总的 Obsidian Bases(.base 文件)。适用于处理 .base 文件、创建类似数据库的笔记视图,或当用户在 Obsidian 中提到 Bases、表格视图、卡片视图、过滤器或公式时。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
创建和编辑包含视图、过滤器、公式和汇总的 Obsidian Bases(.base 文件)。适用于处理 .base 文件、创建类似数据库的笔记视图,或当用户在 Obsidian 中提到 Bases、表格视图、卡片视图、过滤器或公式时。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
何时使用需要为编程项目、monorepo 或多级目录创建/更新 AGENTS.md、CLAUDE.md 软链接、项目级 agent 操作手册、子目录局部规则、验证命令和 Coding Agent 上下文边界时使用。
分析代码库结构并生成中文 token-lean 架构文档。
用于构建或维护个人 LLM 驱动的知识库。触发词:将资料导入 wiki、查询 wiki 知识、检查 wiki 质量、'添加到 wiki'、'我了解什么关于',或任何提到 'LLM wiki' 的场景。
当有书面实施计划要在单独会话中执行并带审查检查点时使用
用户明确要求隔离工作区、并行分支验证或临时试验时使用 - 创建隔离的 git worktree
开始开发编程相关对话时使用 - 建立如何查找和使用 skills,在做出任何响应前要求先检查适用的 skill
| name | obsidian-bases |
| description | 创建和编辑包含视图、过滤器、公式和汇总的 Obsidian Bases(.base 文件)。适用于处理 .base 文件、创建类似数据库的笔记视图,或当用户在 Obsidian 中提到 Bases、表格视图、卡片视图、过滤器或公式时。 |
.base 文件filters 来选择哪些笔记会出现(按标签、文件夹、property 或日期)formulas 部分定义计算属性table、cards、list 或 map),并在 order 中指定显示哪些属性formula.X 但没有在 formulas 中定义 X.base 文件,确认视图渲染正确。如果出现 YAML 错误,检查下方的引号规则Base 文件使用 .base 扩展名,并包含合法 YAML。
# Global filters apply to ALL views in the base
filters:
# Can be a single filter string
# OR a recursive filter object with and/or/not
and: []
or: []
not: []
# Define formula properties that can be used across all views
formulas:
formula_name: 'expression'
# Configure display names and settings for properties
properties:
property_name:
displayName: "Display Name"
formula.formula_name:
displayName: "Formula Display Name"
file.ext:
displayName: "Extension"
# Define custom summary formulas
summaries:
custom_summary_name: 'values.mean().round(3)'
# Define one or more views
views:
- type: table | cards | list | map
name: "View Name"
limit: 10 # Optional: limit results
groupBy: # Optional: group results
property: property_name
direction: ASC | DESC
filters: # View-specific filters
and: []
order: # Properties to display in order
- file.name
- property_name
- formula.formula_name
summaries: # Map properties to summary formulas
property_name: Average
过滤器用于缩小结果范围。它们既可以全局应用,也可以按视图单独应用。
# Single filter
filters: 'status == "done"'
# AND - all conditions must be true
filters:
and:
- 'status == "done"'
- 'priority > 3'
# OR - any condition can be true
filters:
or:
- 'file.hasTag("book")'
- 'file.hasTag("article")'
# NOT - exclude matching items
filters:
not:
- 'file.hasTag("archived")'
# Nested filters
filters:
or:
- file.hasTag("tag")
- and:
- file.hasTag("book")
- file.hasLink("Textbook")
- not:
- file.hasTag("book")
- file.inFolder("Required Reading")
| Operator | Description |
|---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
&& | 逻辑与 |
|| | 逻辑或 |
! | 逻辑非 |
note.author 或直接写 authorfile.name、file.mtimeformula.my_formula| Property | Type | Description |
|---|---|---|
file.name | String | 文件名 |
file.basename | String | 不含扩展名的文件名 |
file.path | String | 文件完整路径 |
file.folder | String | 父文件夹路径 |
file.ext | String | 文件扩展名 |
file.size | Number | 文件大小(字节) |
file.ctime | Date | 创建时间 |
file.mtime | Date | 修改时间 |
file.tags | List | 文件中的所有标签 |
file.links | List | 文件中的内部链接 |
file.backlinks | List | 链接到此文件的文件 |
file.embeds | List | 笔记中的嵌入内容 |
file.properties | Object | 所有 frontmatter 属性 |
this Keyword公式用于基于属性计算值,定义在 formulas 部分。
formulas:
# Simple arithmetic
total: "price * quantity"
# Conditional logic
status_icon: 'if(done, "✅", "⏳")'
# String formatting
formatted_price: 'if(price, price.toFixed(2) + " dollars")'
# Date formatting
created: 'file.ctime.format("YYYY-MM-DD")'
# Calculate days since created (use .days for Duration)
days_old: '(now() - file.ctime).days'
# Calculate days until due date
days_until_due: 'if(due_date, (date(due_date) - today()).days, "")'
最常用的函数列在下面。所有类型(Date、String、Number、List、File、Link、Object、RegExp)的完整参考见 FUNCTIONS_REFERENCE.md。
| Function | Signature | Description |
|---|---|---|
date() | date(string): date | 将字符串解析为日期(YYYY-MM-DD HH:mm:ss) |
now() | now(): date | 当前日期和时间 |
today() | today(): date | 当前日期(时间 = 00:00:00) |
if() | if(condition, trueResult, falseResult?) | 条件判断 |
duration() | duration(string): duration | 解析 duration 字符串 |
file() | file(path): file | 获取文件对象 |
link() | link(path, display?): Link | 创建链接 |
两个日期相减时,结果是 Duration 类型,而不是数字。
Duration Fields: duration.days、duration.hours、duration.minutes、duration.seconds、duration.milliseconds
IMPORTANT: Duration 不能直接使用 .round()、.floor()、.ceil()。必须先取出数值字段(如 .days),再应用数字函数。
# CORRECT: Calculate days between dates
"(date(due_date) - today()).days" # Returns number of days
"(now() - file.ctime).days" # Days since created
"(date(due_date) - today()).days.round(0)" # Rounded days
# WRONG - will cause error:
# "((date(due) - today()) / 86400000).round(0)" # Duration doesn't support division then round
# Duration units: y/year/years, M/month/months, d/day/days,
# w/week/weeks, h/hour/hours, m/minute/minutes, s/second/seconds
"now() + \"1 day\"" # Tomorrow
"today() + \"7d\"" # A week from today
"now() - file.ctime" # Returns Duration
"(now() - file.ctime).days" # Get days as number
views:
- type: table
name: "My Table"
order:
- file.name
- status
- due_date
summaries:
price: Sum
count: Average
views:
- type: cards
name: "Gallery"
order:
- file.name
- cover_image
- description
views:
- type: list
name: "Simple List"
order:
- file.name
- status
需要经纬度属性以及 Maps 社区插件。
views:
- type: map
name: "Locations"
# Map-specific settings for lat/lng properties
| Name | Input Type | Description |
|---|---|---|
Average | Number | 算术平均值 |
Min | Number | 最小值 |
Max | Number | 最大值 |
Sum | Number | 总和 |
Range | Number | 最大值 - 最小值 |
Median | Number | 中位数 |
Stddev | Number | 标准差 |
Earliest | Date | 最早日期 |
Latest | Date | 最晚日期 |
Range | Date | 最晚日期 - 最早日期 |
Checked | Boolean | true 值的数量 |
Unchecked | Boolean | false 值的数量 |
Empty | Any | 空值数量 |
Filled | Any | 非空值数量 |
Unique | Any | 唯一值数量 |
filters:
and:
- file.hasTag("task")
- 'file.ext == "md"'
formulas:
days_until_due: 'if(due, (date(due) - today()).days, "")'
is_overdue: 'if(due, date(due) < today() && status != "done", false)'
priority_label: 'if(priority == 1, "🔴 High", if(priority == 2, "🟡 Medium", "🟢 Low"))'
properties:
status:
displayName: Status
formula.days_until_due:
displayName: "Days Until Due"
formula.priority_label:
displayName: Priority
views:
- type: table
name: "Active Tasks"
filters:
and:
- 'status != "done"'
order:
- file.name
- status
- formula.priority_label
- due
- formula.days_until_due
groupBy:
property: status
direction: ASC
summaries:
formula.days_until_due: Average
- type: table
name: "Completed"
filters:
and:
- 'status == "done"'
order:
- file.name
- completed_date
filters:
or:
- file.hasTag("book")
- file.hasTag("article")
formulas:
reading_time: 'if(pages, (pages * 2).toString() + " min", "")'
status_icon: 'if(status == "reading", "📖", if(status == "done", "✅", "📚"))'
year_read: 'if(finished_date, date(finished_date).year, "")'
properties:
author:
displayName: Author
formula.status_icon:
displayName: ""
formula.reading_time:
displayName: "Est. Time"
views:
- type: cards
name: "Library"
order:
- cover
- file.name
- author
- formula.status_icon
filters:
not:
- 'status == "dropped"'
- type: table
name: "Reading List"
filters:
and:
- 'status == "to-read"'
order:
- file.name
- author
- pages
- formula.reading_time
filters:
and:
- file.inFolder("Daily Notes")
- '/^\d{4}-\d{2}-\d{2}$/.matches(file.basename)'
formulas:
word_estimate: '(file.size / 5).round(0)'
day_of_week: 'date(file.basename).format("dddd")'
properties:
formula.day_of_week:
displayName: "Day"
formula.word_estimate:
displayName: "~Words"
views:
- type: table
name: "Recent Notes"
limit: 30
order:
- file.name
- formula.day_of_week
- formula.word_estimate
- file.mtime
在 Markdown 文件中嵌入:
![[MyBase.base]]
<!-- Specific view -->
![[MyBase.base#View Name]]
'if(done, "Yes", "No")'"My View Name"未加引号的特殊字符:字符串中如果包含 :、{、}、[、]、,、&、*、#、?、|、-、<、>、=、!、%、@、`,必须加引号。
# WRONG - colon in unquoted string
displayName: Status: Active
# CORRECT
displayName: "Status: Active"
公式中的引号不匹配:如果公式内部含有双引号,用单引号包住整个公式。
# WRONG - double quotes inside double quotes
formulas:
label: "if(done, "Yes", "No")"
# CORRECT - single quotes wrapping double quotes
formulas:
label: 'if(done, "Yes", "No")'
未访问字段就直接做 Duration 运算:日期相减返回的是 Duration,不是数字。必须始终访问 .days、.hours 等字段。
# WRONG - Duration is not a number
"(now() - file.ctime).round(0)"
# CORRECT - access .days first, then round
"(now() - file.ctime).days.round(0)"
缺少空值保护:某些属性并不会在所有笔记中都存在。使用 if() 做保护。
# WRONG - crashes if due_date is empty
"(date(due_date) - today()).days"
# CORRECT - guard with if()
'if(due_date, (date(due_date) - today()).days, "")'
引用了未定义的公式:确保 order 或 properties 中出现的每个 formula.X,在 formulas 中都有对应定义。
# This will fail silently if 'total' is not defined in formulas
order:
- formula.total
# Fix: define it
formulas:
total: "price * quantity"