Markdown语法_obsidian
1. obsidian
1.1. links
2. yaml
3. 快捷键
| 快捷键 | 作用 |
|---|---|
ctrl+alt+ l |
格式化快捷键,同时添加更新时间 |
ctrl + alt + 左右键 |
返回/向前页面 |
按住alt+shift按键不放,往下拉或者按住 alt键不放,在需要操作的地方连续点击 |
多重光标控制 |
ctrl + = |
放大视图 |
ctrl + - |
缩小视图 |
ctrl + 0 |
恢复 100%视图 |
开启方式:设置->默认编辑器->Markdown 编辑器
4. callouts 标注功能
![[Callouts - Obsidian Help — 标注#obsidian 默认标注类型]]
5. MarkDown 语法
5.1. 1- 标题
一个#是一级标题,二个#是二级标题,以此类推。支持六级标题。
注:标准语法一般在#后跟个空格再写文字。
示例:
# 3- 这是一级标题
## 3.1- 这是二级标题
### 3.1.1- 这是三级标题
#### 3.1.1.1- 这是四级标题
##### 3.1.1.1.1- 这是五级标题
###### 3.1.1.1.1.1- 这是六级标题
效果如下:
5.2. 2- 这是一级标题
5.3. 3- 这是二级标题
5.3.1. 3.1- 这是三级标题
5.3.1.1. 这是四级标题
5.3.1.1.1. 这是五级标题
5.3.1.1.1.1. 这是六级标题
5.4. 4- 文本
5.4.1. 4.1- 普通文本
这是一段普通的文本
5.4.2. 4.2- 单行文本
Hello,大家好,我是果冻虾仁。
[!tip]+ tips
在一行开头加入 1 个 Tab 或者 4 个空格。
5.4.3. 4.3- 文本块
5.4.3.1. 语法 1
在连续几行的文本开头加入 1 个 Tab 或者 4 个空格。
欢迎到访
很高兴见到您
祝您,早上好,中午好,下午好,晚安
5.4.3.2. 语法 2
使用一对各三个的反引号:
欢迎到访
我是C++码农
你可以在知乎、CSDN、简书搜索【果冻虾仁】找到我
该语法也可以实现代码高亮,见[代码高亮](01_Github%20Flavored%20Markdown 语法介绍.md#代码高亮)
5.4.3.3. 文字高亮
- ==文字== 效果如下
- ==文字高亮==
- 使用一对反引号。 常用与单行代码行内高亮。
语法:
`linux` `网络编程` `socket` `epoll`
效果:linux 网络编程 socket epoll
5.4.3.4. 换行
[!note]+ 换行提示!
1. 直接回车不能换行, 可以在上一行文本后面补两个空格, 这样下一行的文本就换行了。
2. 或者就是在两行文本直接加一个空行。也能实现换行效果,不过这个行间距有点大。
5.5. 5- 文字样式
[!tips]+ tips
斜体、粗体、删除线可混合使用
5.5.1.1. 斜体、粗体、删除线
| 语法 | 效果 | 快捷键 |
|---|---|---|
*斜体1* |
斜体 1 | Ctrl+I |
_斜体2_ |
斜体 2 | |
**粗体1** |
粗体 1 | Ctrl+B |
__粗体2__ |
粗体 2 | |
这是一个 ~~删除线~~ |
这是一个 ~删除线~ | |
***斜粗体1*** |
斜粗体 1 | |
___斜粗体2___ |
斜粗体 2 | |
***~~斜粗体删除线1~~*** |
~斜粗体删除线 1~ | |
~~***斜粗体删除线2***~~ |
~斜粗体删除线 2~ |
5.6. 6- 引用
在引用的文字前加>即可。引用也可以嵌套,如加两个>>三个>>>
n 个…
示例:
>这是引用的内容
>>这是引用的内容
>>>>>>>>>>这是引用的内容
效果如下:
这是引用的内容
这是引用的内容
这是引用的内容
5.7. 7- 分割线
三个或者三个以上的 - 或者 * 或者___都可以。
示例:
效果如下:
可以看到,显示效果是一样的。
6. 超链接
[[]]为内部 page 的链接方式,双方括号中填入 page 标题即可,外部链接方式为[page](page link)
6.1. 1- 插入外部链接
- 以地址方式显示:直接粘贴
- 以描述显示:[描述](链接地址) 快捷键 Ctrl+K
语法:
[超链接名](超链接地址 "超链接title")
title可加可不加
示例:
[百度](http://baidu.com)
效果如下:
[!tips]+ 注意
注:Markdown 本身语法不支持链接在新页面中打开,别的平台可能就不行了,如果想要在新页面中打开的话可以用 html 语言的 a 标签代替。
<a href="超链接地址" target="_blank">超链接名</a>
示例
<a href="https://www.jianshu.com/u/1f5ac0cf6a8b" target="_blank">简书</a>
6.1.1. 1.1- 链接本地文件
- 将本地文件附件添加到笔记中。
![[文件名.png]]的格式 - 链接到其它页面(笔记): [[笔记名称]] ,在笔记中嵌入其它笔记内容并且显示:! [[笔记名称]]
[Image](link.png)可以链接到图片,前面加感叹号![[主题]]即可在预览 preview 中看到引用的内容,只有才能够真正显示。- [[标题^]] 加 ^ 能实现块引用
- 【注】当在笔记中直接输入[[名称]]**创建一个内部链接时,若该链接指定的页面不存在,则关系图中会使用一个灰色的节点来表示。单击该节点或者在预览中单击链接,将会直接创建一个新笔记。
| 语法 | 效果 |
|---|---|
[我的简介](/example/profile.md) |
我的简介 |
6.2. 2- 图片
6.2.1. 2.1- html 中
语法:

图片title是图片的标题,当鼠标移到图片上时显示的内容。title可加可不加
alt 和 title 即对应 HTML 中的 alt 和 title 属性(都可省略):
- alt 表示图片显示失败时的替换文本
- title 表示鼠标悬停在图片时的显示文本(注意这里要加引号)
- URL 即图片的 url 地址,如果引用本仓库中的图片,直接使用相对路径就可了,如果引用其他 github 仓库中的图片要注意格式,即:
仓库地址/raw/分支名/图片路径,如:
https://github.com/guodongxiaren/ImageCache/raw/master/Logo/foryou.gif
6.2.2. 2.2- obsidian 中
6.2.2.1. 插入图片与音频
- 网络附件:
- 本地附件:![[带后缀文件名]] 或者直接从本地拖入
- 添加视频
- 本地视频,直接
![[视频.MP4]]
- 本地视频,直接
【注 1】在 Ob 中拖入的本地图片与音频会以附件的重新复制到库中,建议先在库中新建一个文件夹,然后右键选择将其作为附件文件夹,这样所有新添加的附件就都会保存到该文件夹中,方便管理。
【注 2】直接使用**![[带后缀文件名]]**语句时,附件需已存放在附件文件夹中。
上传本地图片直接点击导航栏的图片标志,选择图片即可
7. 调整图片大小和位置
插入图片后,Markdown 表示图片的语法格式如下:

<center><img src="url" width="30%"></center>
7.1.1. 0.1- 图片调整大小
7.1.1.1. 方法 1:
往文档中插入下述代码,其中:
- url 为图片链接;
- width 为宽的缩放比例。
- 20%、30%、40%
<img src="url" width="30%">

7.1.1.2. 方法 2:obsidian 本地引用
![[url | 100]]
7.1.2. 0.2- 图片调整位置
7.1.3. 0.3- 方法 1:(只能居中)
往文档中插入下述代码,在原有基础上外套 center 标签。
<center><img src="url" width="30%"></center>
7.2. 1- 视频
7.2.1. 1.1- 嵌入本地视频
<video src="./test.mp4" width="800px" height="600px" controls="controls"></video>
7.2.2. 1.2- 嵌入网络视频
<video src="" width="800px" height="600px" controls="controls"></video>
7.2.3. 1.3- iframe 推荐:给出视频链接自动适应窗口大小
<div style="position: relative; width: 100%; padding-top: 56.25%;"> <iframe src="https://image.baoyu2023.top/file/2ac2647d966e9cdb91129.mp4" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" frameborder="0" allowfullscreen> </iframe> </div>
7.2.4. 1.4- 嵌入哔哩哔哩(bilibili)视频
<iframe src="" scrolling="no" width="800px" height="600px" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
注:替换视频地址就可以了
7.2.5. 1.5- 嵌入 gif 动画
<iframe src="https://giphy.com/embed/XXXXXXX" width="480" height="270" frameBorder="0" class="giphy-embed" allowFullScreen></iframe>
7.3. 2- 列表
7.3.1.1.1. 无序列表
语法:
无序列表用 - + * 任何一种都可以
- 列表内容
+ 列表内容
* 列表内容
注意:- + * 跟内容之间都要有一个空格
效果如下:
- 列表内容
- 列表内容
- 列表内容
7.3.1.1.2. 有序列表
语法:
数字加点
1. 列表内容
2. 列表内容
3. 列表内容
注意:序号跟内容之间要有空格
效果如下:
- 列表内容
- 列表内容
- 列表内容
7.3.1.1.3. 列表嵌套
7.3.2. 上一级和下一级之间敲三个空格即可
-
一级无序列表内容
- 二级无序列表内容
- 二级无序列表内容
- 二级无序列表内容
-
一级无序列表内容
- 二级有序列表内容
- 二级有序列表内容
- 二级有序列表内容
-
一级有序列表内容
- 二级无序列表内容
- 二级无序列表内容
- 二级无序列表内容
-
一级有序列表内容
- 二级有序列表内容
- 二级有序列表内容
- 二级有序列表内容
7.3.3. 2.2- 制作待办事宜 Todo 列表
- [x] 🎉 通常
Markdown解析器自带的基本功能; - [x] 🍀 支持流程图、甘特图、时序图、任务列表;
- [x] 🏁 支持粘贴 HTML 自动转换为 Markdown;
- [x] 💃🏻 支持插入原生 Emoji、设置常用表情列表;
- [x] 🚑 支持编辑内容保存本地存储,防止意外丢失;
- [x] 📝 支持实时预览,主窗口大小拖拽,字符计数;
- [x] 🛠 支持常用快捷键(Tab),及代码块添加复制
- [x] ✨ 支持导出携带样式的 PDF、PNG、JPEG 等;
- [x] ✨ 升级 Vditor,新增对
echarts图表的支持; - [x] 👏 支持检查并格式化 Markdown 语法,使其专业;
- [x] 🦑 支持五线谱、及部分站点、视频、音频解析;
7.4. 3- 表格
语法:
表头|表头|表头
---|:--:|---:
内容|内容|内容
内容|内容|内容
第二行分割表头和内容。
- 有一个就行,为了对齐,多加了几个
文字默认居左
-两边加:表示文字居中
-右边加:表示文字居右
注:原生的语法两边都要用 | 包起来。此处省略
示例:
姓名|技能|排行
--|:--:|--:
刘备|哭|大哥
关羽|打|二哥
张飞|骂|三弟
效果如下:
| 姓名 | 技能 | 排行 |
|---|---|---|
| 刘备 | 哭 | 大哥 |
| 关羽 | 打 | 二哥 |
| 张飞 | 骂 | 三弟 |
- 在分割栏横线中使用 : 设置该列文本对齐方式,不加为居左,头尾加为居中,尾加为右。
- 单元格内换行可用**
** - 每一行的列数允许少于总列数
7.5. 4- 代码
语法:
整段代码:段落开头输入一个制表符(Tab)
单行代码:代码之间分别用一个反引号包起来
代码块:代码之间分别用三个反引号包起来,且两边的反引号单独占一行
【注】在使用代码块时,在三个单引号后面输入指定的语言,来选择语法高亮显示的方式。Ob 支持的语言和相应代号可以在这里找到: supported-languages 。
(```)
代码...
代码...
代码...
(```)
注:为了防止转译,前后三个反引号处加了小括号,实际是没有的。这里只是用来演示,实际中去掉两边小括号即可。
示例:
代码块
(```)
function fun(){
echo "这是一句非常牛逼的代码";
}
fun();
(```)
效果如下:
单行代码
create database hero;
代码块
function fun(){
echo "这是一句非常牛逼的代码";
}
fun();
7.6. 5- 制图
7.6.1. 5.1- 绘制流程图
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
7.6.2. 5.2- 绘制序列图
sequenceDiagram
participant Alice
participant Bob
Alice->John: Hello John, how are you?
loop Healthcheck
John->John: Fight against hypochondria
end
Note right of John: Rational thoughts <br/>prevail...
John-->Alice: Great!
John->Bob: How about you?
Bob-->John: Jolly good!
7.6.3. 5.3- 绘制甘特图
甘特图内在思想简单。基本是一条线条图,横轴表示时间,纵轴表示活动(项目),线条表示在整个期间上计划和实际的活动完成情况。它直观地表明任务计划在什么时候进行,及实际进展与计划要求的对比。
gantt
title 项目开发流程
section 项目确定
需求分析 :a1, 2019-06-22, 3d
可行性报告 :after a1, 5d
概念验证 : 5d
section 项目实施
概要设计 :2019-07-05 , 5d
详细设计 :2019-07-08, 10d
编码 :2019-07-15, 10d
测试 :2019-07-22, 5d
section 发布验收
发布: 2d
验收: 3d
7.7. 6- 脚注
- 普通脚注:[^脚注简介] 然后另起一行输入 [^脚注简介]: 脚注内容
- 内部脚注:^[脚注内容]
7.8. 7- 表情
输入不同的符号码(两个冒号包围的字符)可以显示出不同的表情。
比如:blush:,可以显示😊。
具体每一个表情的符号码,可以查询 GitHub 的官方网页http://www.emoji-cheat-sheet.com。
但是这个网页每次都打开奇慢。。所以我整理到了本 repo 中,大家可以直接在此查看emoji。
7.9. 8- diff 语法
版本控制的系统中都少不了 diff 的功能,即展示一个文件内容的增加与删除。 GFM 中可以显示的展示 diff 效果。使用绿色表示新增,红色表示删除。
7.9.1.1. 语法
其语法与代码高亮类似,只是在三个反引号后面写 diff, 并且其内容中,可以用 + 开头表示新增,- 开头表示删除。 另外还有有 !和#的语法。
7.9.1.2. 效果
+ 人闲桂花落,
- 夜静春山空。
! 月出惊山鸟,
# 时鸣春涧中。
8. 搜索
8.1. 1- 搜索语法
8.1.1. 1.1- 基础语法
- 使用空格分隔关键词。每个关键词都是被独立查找的。比如,检索式
foo bar将搜索同时包含foo和bar的笔记。 - 使用双引号来搜索短语。短语中的空格将不再有分隔关键词的作用,因此你可以搜索那些带有空格的语句。比如,
"foo bar"将搜索包含foo bar这一短语的笔记。 - 可以使用
逻辑运算符。OR表示或者关系,即文档应该包含以下关键词之一;-表示非关系,即文档不要包含以下关键词;- 空格表示与关系,即文档应该同时包含以下关键词。
- 比如,
foo OR bar会返回包含foo或包含bar的笔记。 foo -bar将会返回包含foo但不包含bar的笔记。
- 比如,
- 可以使用括号来设置逻辑运算顺序。比如
(a OR b) (c OR d)。这对于那些复杂的检索式非常有用,可以确保检索式的计算顺序是符合设计的。 - 可以使用正则表达式。正则表达式需要使用
/包括起来,比如/[a-z]{3}/。Obsidian 接受 JavaScript 风格的正则表达式,你可以在这里对其进行学习。
8.1.2. 1.2- 搜索符
Obsidian 还提供了一些特殊的搜索符。一些搜索符允许你进行嵌套查询,比如 file:("to be" OR -"2B")。你可以使用 - 来对搜索结果进行限制,比如 foo -tag:#bar。
file:将使搜索对象变为文件名。比如,file:"202007"则会搜索名称包含202007的文件。如果你使用 Zettelkasten 方法并使用时间戳来命名的话,这个搜索符能让你通过搜索文件名来找到某个时间段内记录的笔记。path:将使搜索对象变为文件的绝对路径(基于库的根目录)。你也可以将它理解为搜索特定文件夹中的文件。比如path:"日记/2020-07"将返回路径中包含日记/2020-07的文件(日记文件夹下子文件夹2020-07中的文件)。content:将使搜索对象变为文件中的内容。比如content:"happy cat"。match-case:和ignore-case:将改变检索式的大小写敏感状态,即match-case:将使检索式大小写敏感,ignore-case:将使检索式大小写不敏感。tag:将检索对象变为标签,返回包含特定标签的文件。比如,tag:#work将返回包含 #work 标签的笔记。使用标签搜索符搜索标签比直接在内容中检索#标签字符串要精确得多,因为标签搜索符会忽略代码块以及小标题中出现的、形似标签但不是标签的字符串。line:(...)将使搜索对象从整个文档的内容变为行的内容。比如,当我们使用最普通的搜索搜索foo bar时,会返回那些第一行中有foo,最后一行有bar的笔记。但是,如果使用line:(foo bar),则会返回只在同一行中同时包含foo和bar的笔记。block:(...)将使搜索对象从整个文档的内容变为块的内容。块是被两个空行包围的元素。由于涉及块的操作需要进一步解析每个文件,因此这种搜索可能会比其他搜索慢。section:(...)将使搜索对象从整个文档的内容变为章节的内容。所谓章节指的是两个小标题间的文本(包括开头的小标题)。task:(...)将使搜索对象变为任务列表。你可以使用task:""来在所有任务中检索相应任务。task-todo:(...)将使搜索对象变为任务列表中的待办任务。使用task-todo:""来在未完成的任务中检索相应任务。task-done:(...)将使搜索对象变为任务列表中的已完成任务。 使用task-done:""来在已完成的任务中检索相应任务。
9. Obsidian 美化方案
在 Github 上建了一个演示库,把代码片段和插件都放在 .obsidian 下了,感兴趣的话,可以直接复制粘贴。
其他 Obsidian 的文章
10. Obsidian 自定义样式修改
10.1. 1- 基本概念介绍
- 什么是 markdown
- 什么是 HTML
- 什么是 CSS
10.1.1. 1.1- 什么是 markdown
Markdown 是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。obsidian 使用的是扩展的 markdown 格式。
10.1.2. 1.2- 什么是 HTML
超文本标记语言(HyperText Markup Language,HTML)是构成 Web 世界的一砖一瓦。它定义了网页内容的含义和结构。我们熟悉的网页都是由 HTML 构成的。以下列举了几种 markdown 转换为 HTML 的对应格式:
<h1>一级标题</h1>
<h2>二级标题</h1>
<h3>三级标题</h1>
<h4>四级标题</h1>
<h5>五级标题</h1>
<h6>六级标题</h1>
<p>段落</p>
<ol>
<li>有序列表</li>
<li>有序列表</li>
<li>有序列表</li>
</ol>
<ul>
<li>无序列表</li>
<li>无序列表</li>
<li>无序列表</li>
</ul>
<a href="">链接</a>
<img src="" alt="图片">
<blockquote>引用</blockquote>
<code>代码块</code>
<hr>分割线
10.1.3. 1.3- 什么是 CSS
层叠样式表(Cascading Style Sheet,CSS)是用于控制网页样式的标记性语言。在 obsidian 中,markdown 被解析成 HTML,因此需要使用 CSS 修改其显示样式。 CSS 类似于 Microsoft Office Word 中的“样式”功能。
obsidian 的 CSS 存放位置在笔记库文件夹下.obsidian的themes和snippets这两个文件夹。thems主要放置主题 CSS 文件,而snippets主要放置 CSS 片段。


CSS 基本使用方法
- 基础语法
- 变量
- 编辑软件准备
10.1.4. 1.4- 基础语法
CSS 是定义 HTML 中特定元素样式的一组规则,比如“我希望页面中的一级标题的红色的字”,对应的 CSS 代码如下:
语法由一个 选择器(selector)起头。 它"选择"了我们将要用来添加样式的 HTML 元素。 在这个例子中我们为一级标题(主标题<h1>)添加样式。
接着输入一对大括号{ }。 在大括号内部定义一个或多个形式为 属性(property):值(value); 的 声明。每个声明都指定了我们所选择元素的一个属性,之后跟一个我们想赋给这个属性的值。冒号之前是属性,冒号之后是值。不同的 CSS 属性对应不同的合法值。

CSS 选择器有如下几个常见的类型: - 标签选择器 - 类选择器 - id 选择器 - 分组选择器 - 后代选择器 - 父子选择器 - 兄弟选择器 - 属性选择器 - 根据状态确定样式
10.1.5. 1.5- 标签选择器
通过 HTML 标签进行选择,比如<p> <h1> <a>等标签。
<p>这是标签选择器</p>
p {
color: #f40;
font-size: 25px;
}
10.1.6. 1.6- 类选择器
通过标签的 class 类进行选择,比如<div class='CodeMirror'>或者<div class='markdown-preview-view'>等类。
<div class='markdown-preview-view'>这是类选择器</div>
.markdown-preview-view {
color: #f40;
font-size: 25px;
}
10.1.7. 1.7- id 选择器
通过标签的 id 进行选择,比如<div id='text'>等 id。obsidian 中貌似用不到 id 选择器(?待确认)
<div class='text'>这是id选择器</div>
#text {
color: #f40;
font-size: 25px;
}
10.1.8. 1.8- 分组选择器
选择器可以一次选择多种元素设置相同的样式,少写了很多代码。不同选择器使用,逗号分隔。
<p>这是分组选择器</p>
<a href="#">world</a>
<div>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</div>
p,a,li {
color: blue;
}
10.1.9. 1.9- 后代选择器
又称为包含选择器,选择某个标签的所有后代以设置样式,比如 div 内的 ul 内的 li 元素,每一层选择器之间使用空格分隔
<div>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</div>
div ul li {
color: red;
list-style: none;
}
10.1.10. 1.10- 父子选择器
类似于后代选择器,但是有点不同。如果您不希望选择任意的后代元素,而是希望缩小范围,只选择某个元素的子元素,请使用父子元素选择器。
<div class="class1">
<p>something被选中了</p>
<div class="class2">
<p>something不会被选中</p>
</div>
</div>
.class1>p {
color: red;
text-align: center;
}
10.1.11. 1.11- 兄弟选择器
也叫关联选择器,用来选择紧挨着的元素的选择器,比如希望选择 h1 元素下面第一个段落 p,而不选择第二个段落 p 以后的元素。
<h1>一级标题</h1>
<p>p1第一段</p>
<p>p2第二段</p>
<p>p3第三段</p>
h1+p {
color: red;
font-size: 200%;
}
10.1.12. 1.12- 属性选择器
通过属性(如 name 属性)进行选择以设置相同的样式
<p name="pra1">这是属性选择器</p>
<p name="pra2">hello world</p>
[name="pra1"]{
color: blue;
}
[name="pra2"]{
color: red;
}
10.1.13. 1.13- 根据状态确定样式
对于链接可根据它的不同状态分别设置不同的样式,如是否是未访问的、访问过的、被鼠标悬停的等状态。
<a>This is a link</a>
a:link {
color: pink;
}
a:visited {
color: green;
}
a:hover {
text-decoration: none;
}
10.1.14. 1.14- 变量
对于重复使用的属性值,可以将其设置成变量,便于统一修改,不必一遍又一遍地复制和粘贴相同的属性值。此外,采用合理的变量名,能让其他人一眼就能识别该属性值的作用。如--background-color-primary和--background-color-secondary
:root {
--background-color-primary: #fbf1c7;
--background-color-secondary: #d5c4a1;
}
.markdown-preview-section
{
background-color: var(--background-color-primary);
}
10.1.15. 1.15- 编辑软件准备
本地编辑 CSS 代码的软件推荐使用vscode
为了方便调试,按Ctrl+Shift+i打开 chrome 调试工具如下图所示

点击该按钮后,鼠标移动到你想修改的对象上就可以查看该元素的 CSS 属性值,不仅可以看到正在生效的属性,还可以看到被覆盖掉的属性值。 使用 vscode 编辑 css 代码,保存后自动生效,记得在 obsidian 设置“外观”中选择你所编辑的主题。
10.2. 2- 各种元素选择详解
下面开始实战讲解。由于目前 obsidian 还未做到所见即所得,窗口分为编辑模式与预览模式,因此 CSS 样式也要分别为这个两个不同的模型写代码。编辑模式对应.CodeMirror类,以及缩写的.cm-xxx等类。预览模式对应.markdown-preview-section。下面针对两种模式分别进行讲解。
10.2.1. 2.1- 编辑模式
标题.cm-header-x代表第 x 级标题。
.cm-header-1 {
font-size: 2em;
}
.cm-header-2 {
font-size: 1.6em;
}
.cm-header-3 {
font-size: 1.37em;
}
.cm-header-4 {
font-size: 1.25em;
}
.cm-header-5,
.cm-header-6 {
font-size: 1.12em;
}
引用文本cm-quote
.cm-quote {
color: red;
}
列表HyperMD-list-line,其中第 x 级标题为cm-list-x
.cm-list-1 {
color: red;
}
具体分别指定有序列表和无序列表使用.cm-formatting-list-ul和.cm-formatting-list-ol
.cm-formatting-list-ul + span {
color: red;
}
.cm-formatting-list-ol + span {
color: blue;
}
链接cm-link
.cm-s-obsidian span.cm-link, .cm-s-obsidian span.cm-hmd-internal-link {
color: red;
}
斜体cm-em加粗cm-strong
.cm-em, .cm-strong {
color: red;
}
10.2.2. 2.2- 预览模式
标题.markdown-preview-view hx代表第 x 级标题。
.markdown-preview-section h1 {
color: blue !important;
}
引用文本.markdown-preview-view blockquote
.markdown-preview-view blockquote {
color: red;
}
列表HyperMD-list-line,其中第 x 级标题为cm-list-x
.cm-list-1 {
color: red;
}
具体分别指定有序列表和无序列表使用ul和ol
ul {
color: red;
}
ol {
color: blue;
}
链接cm-link
a:link {
color: red;
}
a:hover {
color: blue;
}
a:visited {
color: green;
}
斜体em加粗strong
10.3. 3- 各种自定义样式详解
- 字体
- 字号
- 颜色
- 背景颜色
- 缩进
- 行距
- 页面宽度
10.3.1. 3.1- 字体
字体分为本地字体和网络字体。注意:一般字体都需要收费,自己个人免费用没事,一旦涉及商业用途需要收费。 将网络上的字体下载并安装后,直接使用字体的名字即可,可同时设置多个字体,系统从最左边开始使用,找不到该字体会顺延至下一个字体。
body{
font-family: '宋体','黑体';
}
也可以根据网址引用网络字体
@font-face {
font-family: 'Hanalei Fill';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.font.im/s/hanaleifill/v11/fC1mPYtObGbfyQznIaQzPQi8UAjF.ttf) format('truetype');
}
body{
font-family: 'Hanalei Fill';
}
10.3.2. 3.2- 字号
字号有很多种单位:px 像素,pt 磅和 em 相对字体大小
.cm-header-1 {
font-size: 2em;
}
.cm-header-2 {
font-size: 18px;
}
.cm-header-3 {
font-size: 20pt;
}
10.3.3. 3.3- 颜色
找到你想修改的那部分元素,修改它的 color 属性值。
.markdown-preview-section {
color: blue ;
}
10.3.4. 3.4- 背景颜色
背景颜色同理,
.markdown-preview-view {
background-color: blue;
}
或者修改 color 相关的变量
.theme-dark {
--background-primary: #566352;
--background-primary-alt: #1a1a1a;
--background-secondary: #161616;
--background-secondary-alt: #000000;
--background-modifier-border: #333;
--background-modifier-form-field: rgba(0, 0, 0, 0.3);
--background-modifier-form-field-highlighted: rgba(0, 0, 0, 0.22);
--background-modifier-box-shadow: rgba(0, 0, 0, 0.3);
--background-modifier-success: #197300;
--background-modifier-error: #3d0000;
--background-modifier-error-rgb: 61, 0, 0;
--background-modifier-error-hover: #470000;
--background-modifier-cover: rgba(0, 0, 0, 0.8);
}
10.3.5. 3.5- 首行缩进
修改 text-indent 属性即可。 编辑模式
pre.CodeMirror-line:not(.HyperMD-header){
text-indent: 2em;
}
预览模式
.markdown-preview-section p{
text-indent: 2em;
}
10.3.6. 3.6- 行距
修改 line-height 属性即可
pre.CodeMirror-line:not(.HyperMD-header){
line-height: 2em;
}
10.3.7. 3.7- 页面宽度
分别修改编辑模式和预览模式的 max-width 属性。obsidian 默认是 700px
.markdown-source-view.is-readable-line-width .CodeMirror {
max-width: 1000px;
}
.markdown-preview-view.is-readable-line-width .markdown-preview-sizer{
max-width: 1000px;
}
10.3.8. 3.8- tag
预览模式的比较好修改,编辑模式不太好修改。
.tag:not(.token) {
background-color: var(--text-accent);
border: none;
color: white;
font-size: 11px;
padding: 1px 8px;
text-align: center;
text-decoration: none;
display: inline-block;
margin: 0px 0px;
cursor: pointer;
border-radius: 14px;
}
10.4. 4- Zettelkasten 本质上是一种渐进式总结方法
卡片盒笔记法突出了「建立联系」的重要性,其实有刻意区分了三种类型的卡片笔记,分别如下:
- 文献笔记(Literature Notes)是指 a) 简短地 b) 用自己的话(而非「复制粘贴」)记录你在看的文献笔记,迫使你真正理解原文的意思。
- 书目笔记(Bibliographical Notes)则需要你添加参考信息,将上面的文献笔记跟原文联系起来。而这一步,恰恰是 Roam Research 或 Obsidian 工具发挥价值最大的地方,甚至做到了完全自动化(稍后会进一步解释我的工作流)。
- 永久笔记(Permanent Notes)是最重要的一步,回顾每一个卡片笔记,同时思考它们与你所学的内容、你的兴趣、思考或研究的关系。你的目标不是收集尽可能多的笔记,而是为你现有的想法、论点和讨论增加新的价值。

至此,你才算是真正增加了所谓「知识」,这儿会有个 re-read 的陷阱:当你回看之前的「收藏」的已读内容时,大脑会因为熟悉感而误以为自己「学到了」,而这恰恰是你之前所有「复制粘贴」的文字最大的问题。
10.5. 5- 哪些笔记值得进入到 Zettelkasten 阅读工作流?
结合 Zettelkasten 卡片盒笔记方法,我在阅读时会遵循这样的工作流:
- 原文(或书籍),一边阅读一边划线「高亮」
- 保存所有「高亮」部分(含链接)至笔记文件
- 新建文献笔记,用自己的话解释「高亮部分」
- 增加书目笔记,跟原文「高亮」或书籍页码关联起来
- 创建永久笔记,跟「卡片盒」中已存在的卡片笔记融合起来
- 当然,最后更重要的是要重复 Review 卡片笔记,能够通过 Anki 间隔重复加强记忆

当然,不是每一条笔记都需要进行 1~5 所有的步数,因为不是所有笔记的都有这样的价值。遵循「二八原则」,真正有价值的东西,才会让你有欲望去做完整个流程。我执行中的体验如下:
- 阅读内容来源的 50% 可能会有价值,值得「保存」
- 25% 值得「精读」,进入下一层
- 20% 能被「高亮」
- 只有 5% 才会再次总结和「解释」
- 最初的阅读内容中大概只有 1%,能进入第五层的融合,因为这需要大量的时间和精力。
10.6. 6- 提高认知能力的外部辅助器
唐·诺曼,全球最具影响力的设计师,《设计心理学》的作者,苹果的前用户体验架构师,在他的《Things That Make Us Smart 让我们变聪明的事情: 在机器时代捍卫人类属性》一书中提到:「人们高估了独立思考的能力。 没有外部帮助,记忆、思维和推理都会受到限制… …真正的力量来自于设计能够提高认知能力的外部辅助设备。」
所以接下来,我来介绍一款神器,Obsidian.app 编辑器,它就是这样一款能帮我提高认知能力的外部辅助设备。Obsidian 是一款支持 macOS、Windows、Linux 多平台的 Markdown 编辑器,同时也支持双向链接,带有效果相当惊艳的网状笔记视图,它还支持标签管理、多种插件(例如日记、实时预览、星标、自定义 CSS 样式等)。
相较于将服务存储在云端的 Roam Research,Obsidian 最大的好处就是:**它能够跟我基于文件系统的本地化任务管理和知识管理系统相结合。**我原本的笔记就全部是 Markdown 格式,用 Obsidian 打开后就可以重新对这些笔记进行梳理;即便未来软件停止开发,文件也还在本地,只是在文档中增加了一些双向链接符而已,不会影响文档的正常使用。
不过和 Roam Research 相比,Obsidian 也有缺失的重要功能:引用区块(block reference),关于引用区块具体可以参看 这个视频 的 7:00,感谢评论区@zwithz 的补充。
这篇文章的写作就全程用 Obsidian 完成,具体步骤大致分为以下四步:
10.6.1. 6.1- 1️⃣ 先用自己的话写笔记
首先,使用 Zettelkasten 方法迫使你写作。 特别是,根据这种方法,你必须用自己的话写笔记,以确保你将来能够理解它们。 任何一个写过东西的人都知道,把东西写下来会迫使你把模糊的概念变成清晰的想法。
在写作这篇文章时,我先在 Obsidian 中创建了一个卡片笔记 [[提高认知能力的外部辅助设备]],摘录了原文英文部分,底下的中文则是我的文献笔记(Literature Notes)。

10.6.2. 6.2- 2️⃣ 迫使自己建立笔记链接
其次,无论何时添加新笔记,使用 Zettelkasten 方法要迫使自己查找可以链接到的已有笔记。 这样可以拓宽你的思维,迫使你去思考新的想法和你以前遇到过的其他想法之间的关系。
在记录这段材料时,我知道[[唐·诺曼]] 和 [[Zettelkasten]]是需要和其他笔记发生关联的概念,因此用双向链接符[[]] 框起来,它们就显示为紫色,成为了一个可点击的链接。
因为此时写作刚刚开始,还没有其他卡片与之相连,因此右侧的「双向链接(Backlinks)」区还没有与之关联的笔记。再接下来,我就可以通过点击紫色链接来创建名为[[唐·诺曼]] 和 [[Zettelkasten]] 的卡片,然后不同卡片中的概念就连接在了一起。
10.6.3. 6.3- 3️⃣ 形成网状结构

和当前链接相关的主题会被高亮
当我完成建立卡片和建立双向链接的工作,再回到原来的 [[Zettelkasten]] 卡片笔记时,我能够看到:
[[Zettelkasten]]在整个卡片网络中的位置,以及其相互关联的卡片- 卡片主体
- 则是跟这张卡片相关的双向链接(Backlinks),从而这就触发了笔记的第三步
Zettelkasten 就是关于连接一系列想法的工具。因此,今天你可以有一系列的想法,把它们作为一系列相互联系的记录存储在你的卡片盒当中;然后,在未来的任何时候,你可以通过添加新的记录并将它们与以前的记录联系起来,延续这一系列的思考。
而且,除了我在第二步当中已经绑定好的 [[]] 双向链接,它还能发现未未主动链接的想法(Unlinked mentions),从而我可以选择是否主动双向链接。

当然这个时候是最有趣的,因为这主动触发了我之前的卡片笔记,从而以一种新的方式链接到了一起,有一种 🧠 大脑被联通的感觉,类似神经元的连接方式。
10.6.4. 6.4- 4️⃣ 使用 Anki 间隔重复增强复现几率
其实我还有 Anki 处理的第四步,刚刚描述的是新建卡片和如何链接卡片,其实对于卡片本身来说,我会用 Anki 来特意间隔重复加深记忆,从而在写卡片时能够更加主动地由大脑(而不是由 Zettelkasten 编辑器)来触发我的联想。
间隔重复绝对是被认知科学证明是有效的,而对于一个笔记系统来说意料之外的不断重复即 see-also 其实就是一个概念的社交场,我们寄希望于不同的知识点能够相互关联又相互碰撞,在合适的时候出现在我们的面前,唤起或发现可能潜在的一些联系。
通过 mdanki 自动把卡片笔记转化为 anki.apkg 格式并自动打开,即可导入 Anki,然后就可以尽情重复和背诵啦~ ✌️
cdd #alias "cdd=cd ~/Library/Mobile\ Documents/iCloud~co~fluder~fsnotes/Documents"
mdanki Zettelkasten.md ~/Desktop/Anki\ QA\ 笔记本/mdanki.apkg && open ~/Desktop/Anki\ QA\ 笔记本/mdanki.apkg

10.7. 7- 最后也最重要的是:从中找到一个写作的主题
最后呢,找到一个主题来写。其实重复以上这些步骤一段时间后,你就拥有了一张巨大的卡片知识网。现在,每当你需要找一个话题来写的时候,翻出你的卡片盒,就能很快拼装出一篇文章或回答来,写作时完全不必从头开始。
你唯一要做的就是将你的笔记重新组合成一个逻辑顺序,并将它们转化为连贯的东西,即史蒂芬 · 平克(Steven Pinker)在《风格感觉》所指出的:「写作是将网状的思想,通过树状的句法,组织为线状展开的文字。」
并且在这个过程中,也许你会发现还缺少了什么,或出现了什么新的问题。然后,你就可以进一步阅读并做卡片笔记,进一步完善你的想法和论点,输出倒逼输入,也就是我现在正在做的事情:找一个「卡片盒」方法实践的主题,然后围绕它写了一篇少数派文章,并且在评论中跟大家交流,在分享中继续学习(Learning by Teaching),费曼给你听。
最后,再回顾一下我在本文中的四步实践:
1️⃣ 第一步:必须用自己的话写笔记卡片,以确保你将来能够理解。[[Literature Notes]]
2️⃣ 第二步:无论何时添加新笔记,主动查找可链接到的已有笔记。[[Bibliographical Notes]]
3️⃣ 第三步:通过添加新笔记并联系旧笔记,延续之前的连续性思考。[[Permanent Notes]]
4️⃣ 第四步:使用 Anki 间隔重复加深记忆,主动由大脑触发远程联想。[[Spaced Repetition]]
10.8. 8- 下载地址
以往大家好像习惯了整理是基于分类,但其实那仍然是没有整理的笔记,不是有连接的笔记。而 Zettelkasten 卡片盒笔记法确实是构建了一个类似互联网的 Web 网状结构,不断点链接了解更多。在大脑中穿梭,好像很神奇的感觉,期待你的亲自体验。
来,Obsidian.app 安装包(macOS)给到,你可以尝试一下。也可以直接在 官网 下载使用。

当然,除了 Obsidian 外,你也可以试一下 Roam Research 的 online 编辑器:https://roamresearch.com/#/app/Note-Tasking
还有国内同款:https://roamedit.com/jx/home.php?plugin=outline/sandbox
10.9. 9- 结语:自我管理的终点是什么?
在跟朋友聊天时发现一个很好的问题:什么情况下,你不会再继续研究新的自我管理方式了呢?着重指知识管理 + 时间管理这对好兄弟。
Hum 曾经在某一期播客里面提到过 「提升阶级」 是时间管理最重要的事情,也许吧。之前看物品整理,书中提到物品整理是有终点的,只要将每类物品确定了摆放位置,物体移动完毕,用完放回原位,就不需要无限学整理收纳了。
那么我进行知识管理的重点会在哪里?关于这一点,我更愿意按照稻和盛夫的方式去思考,就是在「修行」中找到自己真正的志向。而这一点,也可以和 P.A.R.A 方法相结合,我们要去主动匹配 Project 和 Goal 清单。
因为一个没有相应目标的项目被称为 hobby「兴趣爱好」。如果你没有承诺或还没有完全阐明你想要的结果,那你一定只是为了好玩而随便搞搞;而如果你有了目标而没有相应的项目,那就只能叫 dream「白日梦」,你可能会非常渴望达到这个目标,但如果没有一个一个项目来完成,实际上也不会有任何进展。

10.10. 10- 参考资料
- 真正的思考技术:来自德国社会学 Niklas Luhmann 的 Zettelkasten 方法
- How to take smart notes,方法及工具 - 少数派
- Zettelkasten — How One German Scholar Was So Freakishly Productive
- 一个笔记系统——如何把 MarginNote3, DEVONThink3, TheBrain11 和 nvALT 当一个 App 使用
11. 第三方插件
11.1. 1- dataview
[[Obsidian-DATAVIEW 官方文档 Query Language DQL 查询语言详解| dataview 官方文档]]
11.1.1. 1.1- Advanced Tables(演示)
高级表格功能。包括:
制表过程中自动美化编辑模式下的表格格式
提供排序、换行等功能
提供简单公式计算。帮助文档md-advanced-tables/formulas.md at main · tgrosinger/md-advanced-tables
打开控制栏快捷键:Ctrl + Shift + D
评价:个人使用过程有 bug,表格对齐效果不好,还不如直接在 Typora 中编辑。但排序和换行、列是 Typora 中也没有的功能。可能会比较有用。
11.1.2. 1.2- Note Refactor(演示)
1.将笔记中选中的一段文字提取到新笔记中,原位置留下维基链接。
- 可以设置第一行为新笔记名(title)
Ctrl + Shift + N - 可以设置第一行同时为新笔记标题(#标题)
- 可以设置笔记名手动输入
Ctrl + Shift + C
2. 以 1-3 级标题或光标所在位置分割笔记
评价:好用,方便拆分笔记,实现笔记原子化。
11.1.3. 1.3- Workbench(演示)
笔记内容链接、嵌入或复制到工作台。
评价:适合应用于主题阅读或研究。可以强化块引用功能。
11.1.4. 1.4- Convert an url into an iframe(演示)
将 url 直接转化为可嵌入的 iframe 链接。并非所有网站都支持。
快捷键:Ctrl + Shift + I
评价:方便嵌入网页。
11.1.5. 1.5- 其他插件简要介绍
11.1.6. 1.6- Obsidian Git
备份库文件到 Git
- 设置同步时间间隔
- 启动应用时,Pull Git 上的更新
- 通过热键更新(Pull and push)
- 建议将 .obsidian 目录排除在同步文件之外,避免为 git 历史带来噪音
- 和 GitJournal 协同良好(手机端应用)
评价:暂时未试用。GitJournal 反向链接功能收费,每月 2 美元或一次性 24 美元。