【文章汇总】Moy的OB分享(兼答疑贴)

两种方案:

  1. 用 Components 插件进行管理和编辑

它的数据视图(数据库)可以做到类似的特性。

  1. 用 Templater 脚本,自己预先写好枚举值,然后用 Suggestor 来弹出选项,并修改元数据

做法类似 【TP脚本】快速切换任务完成状态并添加日期 - 经验分享 - Obsidian 中文论坛

e87f5e90-f32f-4fb0-a1dd-42deb0b95df9

注:动图里我只是用 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}`);
}
%>