Moy
1
5 个赞
被水淹没
2
你是怎么把元数据单独放在右上角的?
话说有没有那种在元数据那里直接下拉选枚举项的插件(不是mataband那种分离式)
Moy
3
至于枚举,Obsidian 属性原生就对特定类型的数据支持枚举:
(不知道这是不是你指的意思)
如果满足不了的话,应该也没啥别的办法。
被水淹没
4
Moy
5
两种方案:
- 用 Components 插件进行管理和编辑
它的数据视图(数据库)可以做到类似的特性。
- 用 Templater 脚本,自己预先写好枚举值,然后用 Suggestor 来弹出选项,并修改元数据
做法类似 【TP脚本】快速切换任务完成状态并添加日期 - 经验分享 - Obsidian 中文论坛

注:动图里我只是用 NTB 方便调用,实际你可以给这个 TP 脚本分配快捷键
参考脚本:
<%*
// 定义题材选项
const genres = ["科幻", "历史", "奇幻"];
// 定义操作模式
const isReplace = true; // true: 完全替换, false: 添加(并去重)
// 让用户选择题材
const selectedGenre = await tp.system.suggester(genres, genres);
if (selectedGenre) {
// 获取当前文件的元数据
const file = app.workspace.getActiveFile();
const meta = app.metadataCache.getFileCache(file).frontmatter || {};
// 初始化“题材”字段(如果不存在)
if (!meta["题材"]) {
meta["题材"] = [];
}
// 根据操作模式更新“题材”字段
if (isReplace) {
meta["题材"] = [selectedGenre]; // 完全替换
} else {
if (!meta["题材"].includes(selectedGenre)) {
meta["题材"].push(selectedGenre); // 添加并去重
}
}
// 更新文件的元数据
await app.fileManager.processFrontMatter(file, (frontmatter) => {
frontmatter["题材"] = meta["题材"];
});
// 提示用户操作成功
new Notice(`已${isReplace ? "完全替换" : "添加"}题材: ${selectedGenre}`);
}
%>