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

:fox_face: 发的帖子越来越多了,有时候自己都不太好找。
所以做个汇总贴,与人方便与己方便。

:sparkles: :推荐阅读
:arrow_up: :后来有所更新(但我还没来得及写)


:seedling: 基础入门

【新手向教程】OB样式调整基础课:CSS入门科普 :sparkles:

【Dataview 入门介绍】DV 脚本是什么?怎么用? :sparkles:


:rainbow: 技巧分享

【实用技巧】如何改善笔记的链接编辑体验 :sparkles:

如何在侧栏显示笔记属性 :sparkles:

如何优化文件浏览器的显示

如何在OB内应用CSS修改

解决不同系统换行符号导致的Git同步问题


:jigsaw: 插件推荐

超强笔记工具栏——这可能是最新的 OB 必装插件! :arrow_up: :sparkles:


:scroll: 实用脚本

快捷操作

【TP脚本】快速复制标题链接和内联代码 :arrow_up:

【TP脚本】快速切换任务完成状态并添加日期

【TP脚本】在OB里搜索文件夹的方法

【脚本分享】快速重排序任务、快速包裹连续行……实用脚本集锦

【脚本】更聪明地打开今日笔记 :arrow_up:

数据统计

使用DV创建动态更新的笔记目录大纲(TOC)

【DV脚本】快速统计并汇总子页面的链接(仿 Notion 体验) :sparkles:

【DV脚本】三合一的最近笔记展示脚本

【DV脚本】在单篇笔记里实现类 Notion Database 的轻量数据库

【DV脚本】渲染指定文件夹内所有笔记的内容


:art: CSS 样式美化

【样式分享】纯CSS实现垂直标签页 :sparkles:

【CSS】限制特定笔记内的所有图片尺寸(并支持点击放大)

如何做出好看的文章分隔样式(带注释的分隔线)

【DataviewJS】分享一种好看的月历做法(年度回顾笔记用)

【样式分享】给笔记添加渐变网格背景 + 点阵背景

【css】右对齐作者的引用样式


:gear: 工作流优化

基础

【工作流分享】搞定!快速操作笔记的元数据,汇总近期完成事项

今日任务面板(附实用美化技巧)

进阶

【技巧】超越快捷键!实现 Obsidian 内的「文本指令」

【技巧】使用连续按键来快速打开页面

【QK】另一种分层按键的快捷键方案分享


:open_file_folder: 笔记的方法论

Obsidian 如何解决笔记的最大问题 :sparkles:

【OB基础】为什么要自己管理创建和修改时间 :sparkles:

简单分享一下自己的 Obsidian 库文件结构


:question: 疑问解答

如果你有什么关于 Obsidian 的问题,也可以直接在这个帖子里回复,不定期会上来看一眼。

——但是不会回答类似“如何修改文字颜色”或者“怎么合并单元格”这样很不 Markdown 问题。


最后更新于:2025-04-14

5 个赞

:thinking: 你是怎么把元数据单独放在右上角的?

话说有没有那种在元数据那里直接下拉选枚举项的插件(不是mataband那种分离式)


至于枚举,Obsidian 属性原生就对特定类型的数据支持枚举:


(不知道这是不是你指的意思)

如果满足不了的话,应该也没啥别的办法。

这算是提示吧,得删除文本或者文本匹配才有提示

想要实现一些状态的切换。直接点击文本直接下拉选择其他状态
有没有插件可以实现设置某些元数据的值枚举,可以直接选择对应的值?类似于meta-bind - 疑问解答 - Obsidian 中文论坛

两种方案:

  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}`);
}
%>