超越markdown的语法体验

小结和摘录:更多的Obsidian技巧可以去往官方社区和第三方社区学习

Editing Toolbar

Obsidian是一个完全基于markdown语法的编辑器,这让它存粹了但同时也带来了一些问题那就是局限性,像语雀、思源笔记都基于块的概念还有超文本等各种丰富语法,虽然Obsidian也有双链,能够模仿块的概念但终究不像他们那般灵活,因为它的本质还是markdown,语法也局限,原生的语法很难实现我们想要的各种页面效果,但是借助丰富的插件也可以实现,其实本质上是html、css和js

Editing Toolbar这款插件就能带给我们全新的编辑体验,他可以说是cMenu插件的改良优化版本

他除了能够提供富文本编辑器的视图外,还支持自定义命令图标悬浮
这一点是最大的好处,我们可以将常用的命令添加其中,这样就不需要过多记忆(真的很累!而且有些插件和语法不支持快捷键只有命令!)

效果如下:其中是最右边的双栏是自定义命令的,图标可以选择自定义svg代码
image.png

一些建议配置:

  • 工具栏位置:flowing(跟随鼠标选中显示,更舒服不是嘛)
    • 但也有问题,真心觉得这个模式下图标太小,自行斟酌!
    • 所以最终还是选择了top
  • svg图标大小比例:16*16,这个比例和原图标等宽高缩放最是合适
    说起svg图标,有一些收藏的网站:开发利器 > 图标设计

但是,Obsidian之所以选择markdown是因为其存粹,绝大多数的时候我也是选择markdown语法来快速的专注的完成创作,更多的页面丰富效果只是后期美化。

ZH增强编辑

和Editing Toolbar不一样,这是一个将我们长期以来的快捷键习惯的迁移+增强强化的扩展
之前我们使用Typora都已经习惯了Ctrl+数字一类的快捷键,而这个插件就内置了各种命令并梳理和自定义快捷键,在快捷键设置页面
image.png

当然,ZH编辑增强不止这些,真正强大的是自动文本整理相关的功能选项,比如自动将复制粘贴的内容格式化成markdown语法等,可以在界面右下角找到,更多的见官方文档
image.png

布局和工作区

Obsidian支持灵活的布局修改,但主要由三部分组成

image.png
一般来说,我会把常用的界面保存为工作区方便切换
工作区,是Obsidian内置的核心插件,在核心插件中打开,然后点击保存当前的页面和布局作为工作区,比如首页、编辑状态等
我习惯在快捷键设置添加Shift+Ctrl+X来快速切换工作区

Obisian扩展语法

Obsidian 除了支持 Markdown 基本语法,还有一些基于链接,和应用笔记,为了更方便产出而设置支持的扩展集。参见:Obisian扩展语法

扩展插件

分栏插件

multi-column-markdown

使用起来其实没什么问题,也算方便,但并不能完美的实现所见即所得而且,在webpage-export插件导出的html不会渲染它

默认分两栏带边框,当然还可以调边距之类的
例子:使用border:off来关闭线框

--- start-multi-column: ID_mmd5

Number of Columns: 2
Largest Column: standard
border:off

分栏一

内容1

--- column-break ---

分栏二

内容2

--- end-multi-column
当然了,谁会去记这些语法块呢?其实插件提供有命令去插入,但是直接调用命令也很麻烦,需要先Ctrl+P调出命令面板再搜索对应的命令再点击,是不是很麻烦?这时前面提到的Editing Toolbar插件就很有用了!将对应的命令加入自定义工具栏中不就很舒服了吗!这个小技巧学会了吗!

所见即所得,值得期待的插件

作者消失快一年了,没有消息。不过提及了,这个还未开发的插件其实是基于CSS样式和实时渲染,而且使用的是:Callout这个特殊的官方样式扩展

Multi column
Blank

在这个例子中,原作者嵌套了多个callout,首先是最顶层的[!multi-column],它包裹了[!blank]和第二个[!multicolumn];第二个[!multicolumn]又包裹了[!tldr][!info][!tip]三个callout,至于callout元数据中的pw指代什么,恕笔者愚钝,不得而知

Multi column
Project
  • Project A

    • completed
  • Project B

    • ongoing

obsidian-columns

除了callout标注,还支持类似代码块的语法,主要是写起来似乎没那么讨厌,但可定制性太差
使用方法:最外侧col代码块围绕,中间col-md,`===分割
对应的属性:

Dataview (inline field '=='): Error: 
-- PARSING FAILED --------------------------------------------------

> 1 | ==
    | ^

Expected one of the following: 

'(', 'null', boolean, date, duration, file link, list ('[1, 2, 3]'), negated field, number, object ('{ a: 1, b: 2 }'), string, variable
  • col
    • height: CSS height or shortest
    • textAlign: CSS text-align (startendcenter)
  • col-md
    • height: CSS height
    • flexGrow: number
    • textAlign: CSS text-align (startendcenter)

例子:

Column 0

sadsca

Column 1

scxzcxcz

Column 2

链接卡片渲染

Auto Card Link插件就能实现这样的效果,他和分栏插件原理一样,不过插件自带实现了右键快捷操作,就不用占用工具栏的位置了。它能够读取链接的元信息然后以卡片形式渲染链接,它的效果就是下方这样:

Obsidian是支持块的,虽然块的概念相对思源语雀之类的可能不是很好但的确支持。
Obsidian中块的定义:一个块可以是一个段落、一个引用、一个列表等等。一般来说,前后有空行包围的东西就是块。
除了通过head标题来定位文章中具体某一部分外还可以自定义块id,通过块id来实现引用,这是Obsidian的语法,遵循Obsidian语法实现了右键菜单快捷拷贝块语法简化我们的操作

笔记重组:note-refactor-obsidian

功能插件

BRAT实验抢先

建议直接在Obsidian社区商店安装即可。该插件的主要作用就是测试或者说快捷安装和管理未上线Obsidian官方社区的插件和主题。使用方法如图所示,添加GitHub对应的插件开源地址即可,主题同理
image.png

image-auto-upload

一款基于开源图床管理软件PicGo的插件,一般无需改动什么设置项。本地电脑安装好PicGo并配置好要使用的图床服务,本地启动后,即可直接在Obsidian中使用

当然了,这个插件还是有一些功能值得一提就是提供了批量下载文档中的图片以及批量上传图片(如果是网络图片也会重新上传,可以用作迁移),基于这个功能我们可以用来替换图床链接以及备份。

Float-Search【实测不好用,而且容易与其他插件冲突】

一款增强搜索插件,虽然Obsidian内置有强大的搜索,但是有一个美中不足的地方就是它的搜索区域一般就是内潜在左侧面板,一般这个面板区域比较小虽然可以拖动,但如若搜索结果很多看起来终究不爽。原生和插件强化后的效果如下图所示:
image.png
显然我会选择第二个呀!最后记得修改原来的快捷键,替换成强化后的插件搜索。

dataview数据查询

需要注意的事项
  • 插件是外国人开发的,时间日期默认使用的是英文表达,为了正常显示和运算需要在插件的设置页中配置好自己习惯的时间日期表达格式

一款极其强大的数据视图展示插件,也是Obsidian核心插件之一,从下载量来看就知道其威力。完善和丰富Obsidian自带的dataview语法并扩展了dataviewjs语法能够结合使用JavaScript脚本能力,让Obsidian充满了更多可能,提供更加强大的数据统计和视图展示能力,它能实现的效果和应用示例:

更多使用技巧可以参见:

obsidian-hover-editor悬浮编辑

真的有一个神级插件,有了它markdown越来越不像markdown了
这个插件进一步强化了Obsidian块的概念,增强了双联笔记的体验,除了官方的悬浮预览现在还能悬浮编辑了。

发布插件

webpage-export

原汁原味的发布方案,将Obsidian实时渲染的html导出【因为从某种意义上说,Obsidian本身就是一个套壳浏览器】,保留最原本的样式,可以说是一众发布方案之中最接近Obsidian官方发布的选择

比较可惜的是,这个插件目前只提供导出而没有提供一键导出推送GitHub的功能
不过这也不是什么难事,我们只需要配合前边提及到的Git插件,提前设置后导出文件夹路径并将其作为Git仓库根路径完成本地仓库初始化,手动导出html打包文件夹后,再通过Git插件命令提交和推送到GitHub等远程仓库,再使用一些免费容器服务比如CloudFlare来拉取仓库代码构建打包镜像,实现简易的CI/CD

需要注意的就是,有些插件的样式能否渲染上需要在插件的设置中决定插件样式是否渲染,另外受到Obsidian官方版本更新的影响,有可能会出现样式中断的情况,具体参见插件公告。

发现的一些小问题:

  • 搜索,对中文分词不是特别好

其他发布插件

其他的发布插件基本上都是导出markdown文档,再通过特定的框架生成打包文件
由于是markdown,这种导出之后很难保证所有插件的样式都能适配和兼容。这一类插件还不错的有:

除了这些其实还有自媒体快速发布相关的插件,比如一键发布百家号、微信公众号等,不太关注有空补上

同步插件

其实要算的话,前面提及的Git插件也可以作为同步插件,当然了Git本身不适合去管理大文件如果你的笔记库很大的话

我的快捷键配置

我自己使用的一套快捷键配置,包括原生命令和以上插件的扩展命令

功能 归属 快捷键
加载工作区 Ctrl+Shift+X
使用默认应用打开 Ctrl+J
在文件列表中显示当前文件 Ctrl+R
切换编辑/预览模式 Ctrl+E
打开命令面板 Ctrl+P
打开文件切换面板 Ctrl+O
在当前文件中查找 Ctrl+F
在当前文件中查找并替换 Ctrl+H
全文搜索 Ctrl+Shift+F
增强编辑:各大标题 增强编辑 Ctrl+数字

我的使用习惯

新版Ob支持书签了,类似收藏夹也很可!

Obsidian是一款双联笔记,通过双联我们可以建立文章的联系,带来的最直观的一个好处就是想到什么写什么,内容量大单开新建一个文章引用。而且可以使用DataView这样的神级插件来引入类似数据源查询语法动态查询满足特定条件的文档内容进行罗列和渲染,通过这种方式建立索引。
但是呢,也要适当的处理下文章的父子关系,适时建立文件夹,拖放笔记到合适的文件夹。
理由就是虽然双链看似方便但实则不利于管理,我们还是需要一定的树状结构来管理自己的笔记,对应的便是文件夹。当然作为双链笔记,文件夹的层级无需太细,但我觉着必须得有,不然你自己都会凌乱!
总的来说:

  • 文件夹两级足够了(分类、小类)
  • 打标签,适当嵌套标签(实现文件夹级别管理)

image.png

最后要记住:插件在精不在多,过多的插件可能还会引起冲突,那就麻烦了,而且有些插件可能存在版本不兼容问题并且不维护更新

最后在文件与链接选项卡记得添加过滤规则(不参与双链、关系图谱等)

回退版本

有些时候新版本更新可能带来一些问题,需要回退版本

  1. 先卸载
  2. 删除C:\Users\用户名\AppData\Roaming\obsidian文件夹
  3. 下载历史版本:Thoughts (teambition.com)
  4. 安装(最好关网)
  5. 启动后设置关闭自动更新

注意事项

  1. 请严格换行:标题之后一般要换行,Obsidian的渲染有时候会出问题,在当时可能没感觉,事后在其他地方可能就出问题了,尤其是标题紧接链接的情形(复制粘贴导致的)你还可能看不出来没换行,所以请严格换行
  2. 请代码块包裹特殊语法或者使用\对特殊字符转译,防止错误渲染和冲突,比如>和>:因为Obsidian会把该符号当做html的开始标签进行渲染尝试而可能意外导致错误
  3. 图片链接语法,注意![](),有时候会出现实预览界面不显示的问题

高级自定义

首先前提是,我们通过:Ctrl+shift+I调出开发者工具,之后我们可以查看md文档被渲染出来的网页源码,然后在开发者工具中进行调试

Warning
  • 在 Windows 或 Linux 下,使用快捷键 Ctrl+Shift+I;
  • 在 macOS 下,使用快捷键 Cmd+Opt+I 即可。

样式

把写好的css代码片段通过设置-外观-CSS代码片段找到自定义样式文件夹存放进去,然后在样式管理中开启样式,就可以让我们的自定义样式生效了(不生效可以重启Obsidian)
上述说的是最基础最简单的css代码片段,那其实关于样式的选择和设计也是有一些讲究
首先对于样式而言,使用 obsidian 自带的Callout语法是一个比较好的选择,不污染笔记,且用法非常简单
如果想要让自己的css片段适合分享和自定义,可以遵循Style-Setting插件的定义来预留可操作的空间,具体可以参见:Obsidian 插件:Style settings 为你的主题添加更多自定义能力 (pkmer.cn)

插件

样式片段和主题主要在于样式,而一个插件除了样式还有Js行为
Obsidian 最强大的地方在于插件系统,即使是官方的一些功能,也是通过插件来实现的。
官方插件开发文档:Home - Developer Documentation (obsidian.md)