Markdown语法_obsidian

1- obsidian

obsidian中文帮助网页

markdown语法教程

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- 标题

一个#是一级标题,二个#是二级标题,以此类推。支持六级标题。

注:标准语法一般在#后跟个空格再写文字。

示例:

# 3- 这是一级标题
## 3.1- 这是二级标题
### 3.1.1- 这是三级标题
#### 3.1.1.1- 这是四级标题
##### 3.1.1.1.1- 这是五级标题
###### 3.1.1.1.1.1- 这是六级标题

效果如下:

5.2- 这是一级标题

5.3- 这是二级标题

5.3.1- 这是三级标题

5.3.1.1- 这是四级标题

5.3.1.1.1- 这是五级标题
5.3.1.1.1.1- 这是六级标题

5.4- 文本

5.4.1- 普通文本

这是一段普通的文本

5.4.2- 单行文本

Hello,大家好,我是果冻虾仁。

[!tip]+ tips
在一行开头加入1个Tab或者4个空格。

5.4.3- 文本块

5.4.3.1- 语法1

在连续几行的文本开头加入1个Tab或者4个空格。

欢迎到访
很高兴见到您
祝您,早上好,中午好,下午好,晚安

5.4.3.2- 语法2

使用一对各三个的反引号:

欢迎到访
我是C++码农
你可以在知乎、CSDN、简书搜索【果冻虾仁】找到我

该语法也可以实现代码高亮,见代码高亮

5.4.3.3- 文字高亮

  1. ==文字== 效果如下
    1. ==文字高亮==
  2. 使用一对反引号。 常用与单行代码行内高亮。
    语法:
`linux` `网络编程` `socket` `epoll` 

效果:linux 网络编程 socket epoll

5.4.3.4- 换行

[!note]+ 换行提示!
1. 直接回车不能换行, 可以在上一行文本后面补两个空格, 这样下一行的文本就换行了。
2. 或者就是在两行文本直接加一个空行。也能实现换行效果,不过这个行间距有点大。

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- 引用

在引用的文字前加>即可。引用也可以嵌套,如加两个>>三个>>>
n个…

示例:

>这是引用的内容
>>这是引用的内容
>>>>>>>>>>这是引用的内容

效果如下:

这是引用的内容

这是引用的内容

这是引用的内容

5.7- 分割线

三个或者三个以上的 - 或者 * 或者___都可以。

示例:

效果如下:
可以看到,显示效果是一样的。





6- 超链接

  • [[]]为内部page的链接方式,双方括号中填入page标题即可,外部链接方式为[page](page link)

6.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. 将本地文件附件添加到笔记中。 ![[文件名.png]] 的格式
  2. 链接到其它页面(笔记): [[笔记名称]] ,在笔记中嵌入其它笔记内容并且显示:! [[笔记名称]]
  3. [Image](link.png) 可以链接到图片,前面加感叹号 ![[主题]] 即可在预览preview中看到引用的内容,只有 ![Image](link.png) 才能够真正显示。
  4. [[标题^]] 加 ^ 能实现块引用
  5. 【注】当在笔记中直接输入[[名称]]**创建一个内部链接时,若该链接指定的页面不存在,则关系图中会使用一个灰色的节点来表示。单击该节点或者在预览中单击链接,将会直接创建一个新笔记。
语法 效果
[我的简介](/example/profile.md) 我的简介

6.2- 图片

6.2.1- html中

语法:

![图片alt](图片地址 ''图片title'')

图片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- obsidian中

6.2.2.1- 插入图片与音频

  • 网络附件:![附件描述](附件地址)
  • 本地附件:![[带后缀文件名]] 或者直接从本地拖入
  • 添加视频
    • 本地视频,直接![[视频.MP4]]

【注1】在Ob中拖入的本地图片与音频会以附件的重新复制到库中,建议先在库中新建一个文件夹,然后右键选择将其作为附件文件夹,这样所有新添加的附件就都会保存到该文件夹中,方便管理。

【注2】直接使用**![[带后缀文件名]]**语句时,附件需已存放在附件文件夹中。
上传本地图片直接点击导航栏的图片标志,选择图片即可


7- 调整图片大小和位置

插入图片后,Markdown 表示图片的语法格式如下:

![在这里插入图片描述](url?pic_center =100x)
<center><img src="url" width="30%"></center>

7.1.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- 图片调整位置

7.1.3- 方法1:(只能居中)

往文档中插入下述代码,在原有基础上外套 center 标签。

<center><img src="url" width="30%"></center>

7.2- 视频

7.2.1- 嵌入本地视频

<video src="./test.mp4" width="800px" height="600px" controls="controls"></video>

7.2.2- 嵌入网络视频

<video src="" width="800px" height="600px" controls="controls"></video>

7.2.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- 嵌入哔哩哔哩(bilibili)视频

<iframe src="" scrolling="no" width="800px" height="600px" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>

注:替换视频地址就可以了

7.2.5- 嵌入gif动画

<iframe src="https://giphy.com/embed/XXXXXXX" width="480" height="270" frameBorder="0" class="giphy-embed" allowFullScreen></iframe>

7.3- 列表

7.3.1.1.1- 无序列表

语法:
无序列表用 - + * 任何一种都可以

- 列表内容
+ 列表内容
* 列表内容

注意:- + * 跟内容之间都要有一个空格

效果如下:

  • 列表内容
  • 列表内容
  • 列表内容
7.3.1.1.2- 有序列表

语法:
数字加点

1. 列表内容
2. 列表内容
3. 列表内容

注意:序号跟内容之间要有空格

效果如下:

  1. 列表内容
  2. 列表内容
  3. 列表内容
7.3.1.1.3- 列表嵌套

上一级和下一级之间敲三个空格即可

  • 一级无序列表内容

    • 二级无序列表内容
    • 二级无序列表内容
    • 二级无序列表内容
  • 一级无序列表内容

    1. 二级有序列表内容
    2. 二级有序列表内容
    3. 二级有序列表内容
  1. 一级有序列表内容

    • 二级无序列表内容
    • 二级无序列表内容
    • 二级无序列表内容
  2. 一级有序列表内容

    1. 二级有序列表内容
    2. 二级有序列表内容
    3. 二级有序列表内容

7.3.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- 表格

语法:

表头|表头|表头
---|:--:|---:
内容|内容|内容
内容|内容|内容

第二行分割表头和内容。
- 有一个就行,为了对齐,多加了几个
文字默认居左
-两边加:表示文字居中
-右边加:表示文字居右
注:原生的语法两边都要用 | 包起来。此处省略

示例:

姓名|技能|排行
--|:--:|--:
刘备|哭|大哥
关羽|打|二哥
张飞|骂|三弟

效果如下:

姓名 技能 排行
刘备 大哥
关羽 二哥
张飞 三弟
  • 在分割栏横线中使用 : 设置该列文本对齐方式,不加为居左,头尾加为居中,尾加为右。
  • 单元格内换行可用**
    **
  • 每一行的列数允许少于总列数

7.5- 代码

语法:
整段代码:段落开头输入一个制表符(Tab)

单行代码:代码之间分别用一个反引号包起来

代码块:代码之间分别用三个反引号包起来,且两边的反引号单独占一行
【注】在使用代码块时,在三个单引号后面输入指定的语言,来选择语法高亮显示的方式。Ob支持的语言和相应代号可以在这里找到: supported-languages

(```)
  代码...
  代码...
  代码...
(```)

注:为了防止转译,前后三个反引号处加了小括号,实际是没有的。这里只是用来演示,实际中去掉两边小括号即可。

示例:

代码块

(```)
    function fun(){
         echo "这是一句非常牛逼的代码";
    }
    fun();
(```)

效果如下:

单行代码

create database hero;

代码块

function fun(){
  echo "这是一句非常牛逼的代码";
}
fun();

7.6- 制图

7.6.1- 绘制流程图

graph TD;
  A-->B;
  A-->C;
  B-->D;
  C-->D;

7.6.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- 绘制甘特图

甘特图内在思想简单。基本是一条线条图,横轴表示时间,纵轴表示活动(项目),线条表示在整个期间上计划和实际的活动完成情况。它直观地表明任务计划在什么时候进行,及实际进展与计划要求的对比。

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- 脚注

  • 普通脚注:[^脚注简介] 然后另起一行输入 [^脚注简介]: 脚注内容
  • 内部脚注:^[脚注内容]

7.8- 表情

输入不同的符号码(两个冒号包围的字符)可以显示出不同的表情。

比如:blush:,可以显示😊。

具体每一个表情的符号码,可以查询GitHub的官方网页http://www.emoji-cheat-sheet.com

但是这个网页每次都打开奇慢。。所以我整理到了本repo中,大家可以直接在此查看emoji

7.9- diff语法

版本控制的系统中都少不了diff的功能,即展示一个文件内容的增加与删除。 GFM中可以显示的展示diff效果。使用绿色表示新增,红色表示删除。

7.9.1.1- 语法

其语法与代码高亮类似,只是在三个反引号后面写diff, 并且其内容中,可以用 + 开头表示新增,- 开头表示删除。 另外还有有 !#的语法。

7.9.1.2- 效果

+ 人闲桂花落,
- 夜静春山空。
! 月出惊山鸟,
# 时鸣春涧中。

8- 搜索

8.1- 搜索语法

8.1.1- 基础语法

  • 使用空格分隔关键词。每个关键词都是被独立查找的。比如,检索式 foo bar 将搜索同时包含 foobar 的笔记。
  • 使用双引号来搜索短语。短语中的空格将不再有分隔关键词的作用,因此你可以搜索那些带有空格的语句。比如,"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- 搜索符

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),则会返回只在同一行中同时包含 foobar 的笔记。
  • block:(...) 将使搜索对象从整个文档的内容变为块的内容。块是被两个空行包围的元素。由于涉及块的操作需要进一步解析每个文件,因此这种搜索可能会比其他搜索慢。
  • section:(...) 将使搜索对象从整个文档的内容变为章节的内容。所谓章节指的是两个小标题间的文本(包括开头的小标题)。
  • task:(...) 将使搜索对象变为任务列表。你可以使用task:"" 来在所有任务中检索相应任务。
  • task-todo:(...) 将使搜索对象变为任务列表中的待办任务。使用 task-todo:"" 来在未完成的任务中检索相应任务。
  • task-done:(...) 将使搜索对象变为任务列表中的已完成任务。 使用 task-done:"" 来在已完成的任务中检索相应任务。

9- Obsidian 美化方案

Github 上建了一个演示库,把代码片段和插件都放在 .obsidian 下了,感兴趣的话,可以直接复制粘贴。

其他 Obsidian 的文章


10- Obsidian自定义样式修改

10.1- 基本概念介绍

  • 什么是markdown
  • 什么是HTML
  • 什么是CSS

10.1.1- 什么是markdown

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。obsidian使用的是扩展的markdown格式。

10.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- 什么是CSS

层叠样式表(Cascading Style Sheet,CSS)是用于控制网页样式的标记性语言。在obsidian中,markdown被解析成HTML,因此需要使用CSS修改其显示样式。 CSS类似于Microsoft Office Word中的“样式”功能。
obsidian的CSS存放位置在笔记库文件夹下.obsidianthemessnippets这两个文件夹。thems主要放置主题CSS文件,而snippets主要放置CSS片段。

CSS基本使用方法

  • 基础语法
  • 变量
  • 编辑软件准备

10.1.4- 基础语法

CSS是定义HTML中特定元素样式的一组规则,比如“我希望页面中的一级标题的红色的字”,对应的CSS代码如下:

语法由一个 选择器(selector)起头。 它"选择"了我们将要用来添加样式的 HTML 元素。 在这个例子中我们为一级标题(主标题<h1>)添加样式。
接着输入一对大括号{ }。 在大括号内部定义一个或多个形式为 属性(property):值(value); 的 声明。每个声明都指定了我们所选择元素的一个属性,之后跟一个我们想赋给这个属性的值。冒号之前是属性,冒号之后是值。不同的 CSS 属性对应不同的合法值。

CSS选择器有如下几个常见的类型: - 标签选择器 - 类选择器 - id选择器 - 分组选择器 - 后代选择器 - 父子选择器 - 兄弟选择器 - 属性选择器 - 根据状态确定样式

10.1.5- 标签选择器

通过HTML标签进行选择,比如<p> <h1> <a>等标签。

<p>这是标签选择器</p>
p {
        color: #f40;
        font-size: 25px;
    }

10.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- id选择器

通过标签的id进行选择,比如<div id='text'>等id。obsidian中貌似用不到id选择器(?待确认)

<div class='text'>这是id选择器</div>
#text {
        color: #f40;
        font-size: 25px;
    }

10.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- 后代选择器

又称为包含选择器,选择某个标签的所有后代以设置样式,比如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- 父子选择器

类似于后代选择器,但是有点不同。如果您不希望选择任意的后代元素,而是希望缩小范围,只选择某个元素的子元素,请使用父子元素选择器。

<div class="class1">
    <p>something被选中了</p>
    <div class="class2">
        <p>something不会被选中</p>
    </div>
</div>
.class1>p {
  color: red;
  text-align: center;
}

10.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- 属性选择器

通过属性(如name属性)进行选择以设置相同的样式

<p name="pra1">这是属性选择器</p>
    <p name="pra2">hello world</p>
[name="pra1"]{
        color: blue;
    }
    [name="pra2"]{
        color: red;
    }

10.1.13- 根据状态确定样式

对于链接可根据它的不同状态分别设置不同的样式,如是否是未访问的、访问过的、被鼠标悬停的等状态。

<a>This is a link</a>
a:link {
    color: pink;
}
a:visited {
    color: green;
}
a:hover {
    text-decoration: none;
}

10.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- 编辑软件准备

本地编辑CSS代码的软件推荐使用vscode
为了方便调试,按Ctrl+Shift+i打开chrome调试工具如下图所示

点击该按钮后,鼠标移动到你想修改的对象上就可以查看该元素的CSS属性值,不仅可以看到正在生效的属性,还可以看到被覆盖掉的属性值。 使用vscode编辑css代码,保存后自动生效,记得在obsidian设置“外观”中选择你所编辑的主题。

10.2- 各种元素选择详解

下面开始实战讲解。由于目前obsidian还未做到所见即所得,窗口分为编辑模式与预览模式,因此CSS样式也要分别为这个两个不同的模型写代码。编辑模式对应.CodeMirror类,以及缩写的.cm-xxx等类。预览模式对应.markdown-preview-section。下面针对两种模式分别进行讲解。

10.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- 预览模式

标题.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;
}

具体分别指定有序列表和无序列表使用ulol

ul {
    color: red;
}
ol {
    color: blue;
}

链接cm-link

a:link {
    color: red;
}
a:hover {
    color: blue;
}
a:visited {
    color: green;
}

斜体em加粗strong

10.3- 各种自定义样式详解

  • 字体
  • 字号
  • 颜色
  • 背景颜色
  • 缩进
  • 行距
  • 页面宽度

10.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- 字号

字号有很多种单位:px像素,pt磅和em相对字体大小

.cm-header-1 {
  font-size: 2em;
}
.cm-header-2 {
  font-size: 18px;
}
.cm-header-3 {
  font-size: 20pt;
}

10.3.3- 颜色

找到你想修改的那部分元素,修改它的color属性值。

.markdown-preview-section {
    color: blue ;
}

10.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- 首行缩进

修改text-indent属性即可。 编辑模式

pre.CodeMirror-line:not(.HyperMD-header){
    text-indent: 2em;
}

预览模式

.markdown-preview-section p{
    text-indent: 2em;
}

10.3.6- 行距

修改line-height属性即可

pre.CodeMirror-line:not(.HyperMD-header){
    line-height: 2em;
}

10.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- 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- Zettelkasten 本质上是一种渐进式总结方法

卡片盒笔记法突出了「建立联系」的重要性,其实有刻意区分了三种类型的卡片笔记,分别如下:

  • 文献笔记(Literature Notes)是指 a) 简短地 b) 用自己的话(而非「复制粘贴」)记录你在看的文献笔记,迫使你真正理解原文的意思。
  • 书目笔记(Bibliographical Notes)则需要你添加参考信息,将上面的文献笔记跟原文联系起来。而这一步,恰恰是 Roam Research 或 Obsidian 工具发挥价值最大的地方,甚至做到了完全自动化(稍后会进一步解释我的工作流)。
  • 永久笔记(Permanent Notes)是最重要的一步,回顾每一个卡片笔记,同时思考它们与你所学的内容、你的兴趣、思考或研究的关系。你的目标不是收集尽可能多的笔记,而是为你现有的想法、论点和讨论增加新的价值。

至此,你才算是真正增加了所谓「知识」,这儿会有个 re-read 的陷阱:当你回看之前的「收藏」的已读内容时,大脑会因为熟悉感而误以为自己「学到了」,而这恰恰是你之前所有「复制粘贴」的文字最大的问题。

10.5- 哪些笔记值得进入到 Zettelkasten 阅读工作流?

结合 Zettelkasten 卡片盒笔记方法,我在阅读时会遵循这样的工作流:

  1. 原文(或书籍),一边阅读一边划线「高亮」
  2. 保存所有「高亮」部分(含链接)至笔记文件
  3. 新建文献笔记,用自己的话解释「高亮部分」
  4. 增加书目笔记,跟原文「高亮」或书籍页码关联起来
  5. 创建永久笔记,跟「卡片盒」中已存在的卡片笔记融合起来
  6. 当然,最后更重要的是要重复 Review 卡片笔记,能够通过 Anki 间隔重复加强记忆

当然,不是每一条笔记都需要进行 1~5 所有的步数,因为不是所有笔记的都有这样的价值。遵循「二八原则」,真正有价值的东西,才会让你有欲望去做完整个流程。我执行中的体验如下:

  • 阅读内容来源的 50% 可能会有价值,值得「保存」
  • 25% 值得「精读」,进入下一层
  • 20% 能被「高亮」
  • 只有 5% 才会再次总结和「解释」
  • 最初的阅读内容中大概只有 1%,能进入第五层的融合,因为这需要大量的时间和精力。

10.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- 1️⃣ 先用自己的话写笔记

首先,使用 Zettelkasten 方法迫使你写作。 特别是,根据这种方法,你必须用自己的话写笔记,以确保你将来能够理解它们。 任何一个写过东西的人都知道,把东西写下来会迫使你把模糊的概念变成清晰的想法。

在写作这篇文章时,我先在 Obsidian 中创建了一个卡片笔记 [[提高认知能力的外部辅助设备]],摘录了原文英文部分,底下的中文则是我的文献笔记(Literature Notes)。

10.6.2- 2️⃣ 迫使自己建立笔记链接

其次,无论何时添加新笔记,使用 Zettelkasten 方法要迫使自己查找可以链接到的已有笔记。 这样可以拓宽你的思维,迫使你去思考新的想法和你以前遇到过的其他想法之间的关系。

在记录这段材料时,我知道[[唐·诺曼]][[Zettelkasten]]是需要和其他笔记发生关联的概念,因此用双向链接符[[]] 框起来,它们就显示为紫色,成为了一个可点击的链接。

因为此时写作刚刚开始,还没有其他卡片与之相连,因此右侧的「双向链接(Backlinks)」区还没有与之关联的笔记。再接下来,我就可以通过点击紫色链接来创建名为[[唐·诺曼]][[Zettelkasten]] 的卡片,然后不同卡片中的概念就连接在了一起。

10.6.3- 3️⃣ 形成网状结构

和当前链接相关的主题会被高亮

当我完成建立卡片和建立双向链接的工作,再回到原来的 [[Zettelkasten]] 卡片笔记时,我能够看到:

  1. [[Zettelkasten]] 在整个卡片网络中的位置,以及其相互关联的卡片
  2. 卡片主体
  3. 则是跟这张卡片相关的双向链接(Backlinks),从而这就触发了笔记的第三步

Zettelkasten 就是关于连接一系列想法的工具。因此,今天你可以有一系列的想法,把它们作为一系列相互联系的记录存储在你的卡片盒当中;然后,在未来的任何时候,你可以通过添加新的记录并将它们与以前的记录联系起来,延续这一系列的思考。

而且,除了我在第二步当中已经绑定好的 [[]] 双向链接,它还能发现未未主动链接的想法(Unlinked mentions),从而我可以选择是否主动双向链接。

当然这个时候是最有趣的,因为这主动触发了我之前的卡片笔记,从而以一种新的方式链接到了一起,有一种 🧠 大脑被联通的感觉,类似神经元的连接方式。

10.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- 最后也最重要的是:从中找到一个写作的主题

最后呢,找到一个主题来写。其实重复以上这些步骤一段时间后,你就拥有了一张巨大的卡片知识网。现在,每当你需要找一个话题来写的时候,翻出你的卡片盒,就能很快拼装出一篇文章或回答来,写作时完全不必从头开始。

你唯一要做的就是将你的笔记重新组合成一个逻辑顺序,并将它们转化为连贯的东西,即史蒂芬 · 平克(Steven Pinker)在《风格感觉》所指出的:「写作是将网状的思想,通过树状的句法,组织为线状展开的文字。」

并且在这个过程中,也许你会发现还缺少了什么,或出现了什么新的问题。然后,你就可以进一步阅读并做卡片笔记,进一步完善你的想法和论点,输出倒逼输入,也就是我现在正在做的事情:找一个「卡片盒」方法实践的主题,然后围绕它写了一篇少数派文章,并且在评论中跟大家交流,在分享中继续学习(Learning by Teaching),费曼给你听。

最后,再回顾一下我在本文中的四步实践:

1️⃣ 第一步:必须用自己的话写笔记卡片,以确保你将来能够理解。[[Literature Notes]]

2️⃣ 第二步:无论何时添加新笔记,主动查找可链接到的已有笔记。[[Bibliographical Notes]]

3️⃣ 第三步:通过添加新笔记并联系旧笔记,延续之前的连续性思考。[[Permanent Notes]]

4️⃣ 第四步:使用 Anki 间隔重复加深记忆,主动由大脑触发远程联想。[[Spaced Repetition]]

10.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- 结语:自我管理的终点是什么?

在跟朋友聊天时发现一个很好的问题:什么情况下,你不会再继续研究新的自我管理方式了呢?着重指知识管理 + 时间管理这对好兄弟。

Hum 曾经在某一期播客里面提到过 「提升阶级」 是时间管理最重要的事情,也许吧。之前看物品整理,书中提到物品整理是有终点的,只要将每类物品确定了摆放位置,物体移动完毕,用完放回原位,就不需要无限学整理收纳了。

那么我进行知识管理的重点会在哪里?关于这一点,我更愿意按照稻和盛夫的方式去思考,就是在「修行」中找到自己真正的志向。而这一点,也可以和 P.A.R.A 方法相结合,我们要去主动匹配 Project 和 Goal 清单。

因为一个没有相应目标的项目被称为 hobby「兴趣爱好」。如果你没有承诺或还没有完全阐明你想要的结果,那你一定只是为了好玩而随便搞搞;而如果你有了目标而没有相应的项目,那就只能叫 dream「白日梦」,你可能会非常渴望达到这个目标,但如果没有一个一个项目来完成,实际上也不会有任何进展。

10.10- 参考资料


11- 第三方插件

11.1- dataview

[[Obsidian-DATAVIEW 官方文档 Query Language DQL查询语言详解| dataview官方文档]]

11.1.1- Advanced Tables(演示)

高级表格功能。包括:
制表过程中自动美化编辑模式下的表格格式
提供排序、换行等功能
提供简单公式计算。帮助文档md-advanced-tables/formulas.md at main · tgrosinger/md-advanced-tables
打开控制栏快捷键:Ctrl + Shift + D

评价:个人使用过程有bug,表格对齐效果不好,还不如直接在Typora中编辑。但排序和换行、列是Typora中也没有的功能。可能会比较有用。

11.1.2- Note Refactor(演示)

1.将笔记中选中的一段文字提取到新笔记中,原位置留下维基链接。

  • 可以设置第一行为新笔记名(title)Ctrl + Shift + N
  • 可以设置第一行同时为新笔记标题(#标题)
  • 可以设置笔记名手动输入 Ctrl + Shift + C

2. 以1-3级标题或光标所在位置分割笔记

评价:好用,方便拆分笔记,实现笔记原子化。

11.1.3- Workbench(演示)

笔记内容链接、嵌入或复制到工作台。

评价:适合应用于主题阅读或研究。可以强化块引用功能。

11.1.4- Convert an url into an iframe(演示)

将 url 直接转化为可嵌入的 iframe 链接。并非所有网站都支持。
快捷键:Ctrl + Shift + I

评价:方便嵌入网页。

11.1.5- 其他插件简要介绍

11.1.6- Obsidian Git

备份库文件到Git

  • 设置同步时间间隔
  • 启动应用时,Pull Git上的更新
  • 通过热键更新(Pull and push)
  • 建议将 .obsidian 目录排除在同步文件之外,避免为 git 历史带来噪音
  • GitJournal 协同良好(手机端应用)

评价:暂时未试用。GitJournal 反向链接功能收费,每月2美元或一次性24美元。