大概需求:
1、本地软件,所有文件存放于本地。例如 zimwiki。最好不要用数据库,直接文件存放,或者用类似 sqlite 本地数据库。
2、支持 markdown
3、有一定的管理功能,至少得支持多级目录和搜索吧
我在家搭建了 owncloud,如果有本地笔记软件,就太好了。目前用 zimwiki,但是没有 markdown,特别不舒服。
补充 1:似乎是更需要一个单机版的有道云笔记
这个问题一年前问我,我的答案也许是 vscode + 一系列插件;半年前问我,我的答案也许是 Joplin 或者 logseq;但现在问我,我的答案只有一个: Obsidian ,虽然只用了两周,但是被惊艳到了。
当初从 vimwiki 切换到 vscode + MPE 的时候,我也有种被惊艳的感觉,发现 Markdown 笔记写起来还能这样爽;现在再次切换到 ob 时,回过头去,突然觉得 vscode 弱爆了;如果说用 vim 写 markdown 是一阶二阶的写法,vscode 是三阶四阶的玩法,那么 ob 起码是八阶九阶的世界。
按理来讲,vscode 这种全能软件可以做任何一件事情,Obsidian 里的编辑,同步,双链分析,MathJax/GraphViz 集成,似乎 vscode 都可以搭配插件实现,我用了那么多年 vscode 了,为什么还会对 ob 产生惊艳的感觉呢?因为 ob 围绕 “Markdown 笔记” 这一件事情做极度的优化,最终量变产生了质变。
怎么说呢?正是因为 vscode 这类全能型编辑器能做的事情太多了,最终分给 “markdown 编辑” 这件事情的界面资源是有限的,而 ob 只针对 “Markdown 笔记 ” 这一个核心诉求,最好的用户体验,最直观的界面设计都围绕它来做,最好的快捷键都给了 markdown 编辑这一件事情。举个例子,之前用 vimwiki 写 markdown 时,我给到 markdown 编辑的快捷键都是三次击键以上的,F1-F12,Alt+A-Z 这种高频按键都被安排去做其他的事情了,根本舍不得给 markdown 编辑,即便 emacs+org-mode 也有一样的问题,最终能够给到 org-mode 的快捷键很多也都要三次以上的击键,而 ob 里,围绕核心体验,什么 F1-F12、Alt+A-Z,我一口气大大方方的全部给了 markdown 编辑,瞬间爽多了,看看我有多大方:
- 左边:F1-F4 分别由于切换左面版的:文件树,搜索,收藏,LongForm 项目 等四个面板
- 中间:编辑区:F5 切换预览和编辑,F6 笔记改名,F7 加星,F8 用模板,Ctrl+F5 焦点移动到编辑区,Ctrl+F6 打开当天日记,Ctrl+F7 打开 Memos,Ctrl+F8 文本块加密。
- 右边:F9-F12 用于切换右侧的:backlink, outlink, 全局标签 tags 列表, 文档大纲 等几个面板。
- Alt+1-9 :切换 tab
- Alt+w:关闭当前 tab
- Alt+o:关闭其他 tab
- Ctrl+1-9:快速打开收藏加星面板的第一到第九篇笔记。
- Ctrl+Shift+1-9:设置 Heading 层次。
这些我在 vscode/vim 里根本舍不得给出去的好按的高频键,在 ob 里一口气全给了 markdown 编辑,少两次击键貌似优势不大,但高频核心体验上的一点点优化,会出现优势 积累效应。
偶然忘记一两个快捷键也不怕,Ctrl+P 打开 Command Palette 随便写点关键词,就能在右边查询到绑定的快捷键:
这些例子太多了,我不可能举得完的,但不说一两个,又会让人觉得 “光说不练假把式”,那就勉强举几个例子吧:
1)编写内链的体验优化
最近在学 zk 笔记法,要点就是提倡笔记里面多用内链,在 ob 里当然也支持标准的 [xxx](url)
连接语法,但更鼓励你使用 [[wikilink]]
的内链语法:
有些人可能会觉得 “这不是标准 markdown 语法”,进而有排斥感,其实大可不必,世界上本来就没有什么 “严格的 markdown 标准”,只有 “事实标准”,最初的 Markdown 连表格和代码块都不支持,而一旦某项扩展真的顺手,就会被广大用户和后来的软件自动筛选浮现出来成为新的 “事实标准”。
而 [[wikilink]]
的写法源自 MediaWiki 等 wiki 系统,因为非常好用,被 Roam Research 首先引入到 Markdown ,大家觉得很顺手,于是 logseq 和 obsidian 都学习继承了, 继续得到用户的喜欢,现在 vscode 也支持了(通过 Markdown Notes 插件),一旦主流编辑器支持,它就成为了一个事实上的标准。
老的 [text](url)
针对外链比较方便,应为外网连接 URL 很长,微信公众号 的文章,URL 起码有两三行那么多,所以必须把 URL 和标题分开,因为网络 URL 不是给人读的,所以前面要加个人读的标题。
但自己的笔记内链还这么搞写起来就挺麻烦的,每次你要考虑笔记的 “文件名”,还要考虑笔记的 “标题”,文件名和标题分裂的,而 [[wikilink]]
的好处之一就是标题即文件名,既然都是内链,不用写的很长,那么 维基百科 的连接方式写起来街更为高效直观,不要小看这个小优化,似乎每次写连接只是少些一个地方, 少思考一处,事实上在高频使用的核心体验上做一处优化,潜移默化带来的效率提升都是累计的。
因此你想体验到更高阶的玩法,需要开放心态接受这些新的 markdown 扩展,要换成标准 markdown 也非常容易,一个小工具就够了,不想找工具插件的话,甚至命令行一行 awk/sed 就能完成格式转换,根本不是什么难事。
在 ob 里还有很多我喜欢的 md 扩展,比如 admonition:
代码块的语言写成 ad-note
就会出现一个 Note
的通知块,非常醒目,还支持 warning, error 等常用样式,以及单行风格:
Github 的 Markdown 也在 Beta 测试一个类似的功能,叫做 call-out,到时候转成 github 识别的格式也很容易。
2)内链补全
其次是它的所有 [[内链]]
输入都是有补全的 :
程序员 在 IDE 用补全都用了二十多年了,难以想象各个 Markdown 编辑器还有自己手动写 URL,毫无补全的支持。Vscode 去年以前都不支持内链补全,今年加了 markdown lsp 后可以做内链补全了,但是还是做不到块级别的连接补全。
3)连接到块:
在编辑时我把内链写成:
写完内链加个 #
号,就可以直接写连接到哪个章节,写完后是下面的样子:
块连接可以避免你打开一篇引用时根本找不到你引用的是哪个部分。
4)连接浮窗预览
有时候看到一处引用,我想看一眼内容,但又不想切换过去,可以鼠标悬停用浮窗预览:
精确到章节的悬停预览,如果真的想编辑可以按 Alt + 回车或者鼠标左键,编辑完了 ALT+Left
可以回退到刚才的地方;在新的 1.0 版本里可以用 Ctrl+鼠标左键
或者 Ctrl+回车
,在新 tab 里打开,不影响老的打开的文档。
5)其他连接相关优化
- backlink 统计:有专门面板帮助你查看当前笔记被引用情况,很简单的功能。
- 笔记改名:一篇笔记改名了,所有引用它的地方都会同步更新连接。
- tag 改名:ob 里可以用
#tag
来加 tag,同时一个 tag 改名可以同步修改所有 tag。 - 。。。。
例子:tag 改名
众多 md 笔记软件现在都支持 md 内部用 #tagname
来打标签,但是很少支持标签改名的,在 ob 里打开右边的标签面板,选中一个标签,右键 “Rename #xxx”,就可以扫描所有出现过 #git
的笔记,并批量把它改成你想要的新名字,不用自己手工一处处改,类似 IDE 重构。
上面说的内链补全也好,backlink 汇总也好,tag 改名也罢,即便 typora 这类体验优秀的软件也没法做,因为 typora 只有单篇笔记的信息,缺乏 “项目信息”,不知道相关笔记的范围,因此它没法给你统计 backlink,没法给你做补全,更没法在你改名的时候同步修改需要改名的地方,大部分没有项目信息的 “编辑器” 甚至连一个全局 #tag 标签列表都没法给你列出来。
就 “内链” 一个功能,vscode 似乎也支持,但落到细节处,vscode 每处体验都没有 ob 做的那么扎实,那么到位,ob 连一个小小的内链都做了十几项优化,最终产生了质变,就像当年 蓝牙耳机 面世已经很多年了,并没有成为主流,但苹果就是盯着蓝牙耳机的:续航(从原来的几个小时充一次电变成一两周充一次电),音质(原来音质差延迟高,现在音质好没延迟),连接便利性(原理配对麻烦,现在配对非常简单),这三个方面做了极致优化,功能上还是原来的蓝牙耳机,对比他蓝牙耳机除了顺眼点外没啥新功能,但正是由于上面三个核心体验上的无数细节优化,最终量变产生了质变,AirPods 得到了所有人的喜欢。
6)局部加密
比如你笔记里有一小段话想加密一下:
先选中要加密的文字,然后点击右上角的 “锁” 图标,弹出窗口里设定一个密码:
按 “Confirm” 文本就变成下面这样:
然后光标移动上去,再点一次右上角锁图标,输入刚才的密码,就会在弹出窗口显示解密信息:
你可以复制好了关闭它,或者点 “Decrypt in-place” 可以把加密文本替换成解密文本。
这种功能对笔记里有少量需要加密的信息会比较有用。
(注:加解密用了 Meld Encrypt 插件,右上角的锁按钮使用 Commander 添加,关联了 Meld Encrypt 的命令)
7)收集网页内容
Obsidian 收集网页的体验非常流畅,在知乎上复制完,ob 里直接 Ctrl+V 粘贴,自动将复制的 html 转成 markdown ,格式什么都在,唯一问题,图片是远程的,再点右上角的下载按钮,两秒后,文档里的远程图片全部被下载好,放到设定好的目录,同时笔记里的图片连接全部自动改为本地连接;从上到下一气呵成。
(注意:如果想要粘贴成无格式的纯文本,用 Ctrl+Shift+v 粘贴,比如从 vscode 复制过来的代码,就用 Ctrl+Shift+v 粘贴,避免将 vscode 带格式和高亮的代码自动转成 markdown)
Evernote 虽然也能方便的保存网页,但是它是按 html 存的,导致保存下来的网页字体大大小小,样式五花八门,行间距 有宽有窄,而且你一动手修改可能就全乱套了;像 ob 那样转成 markdown 的好处是保留文档结构,代码块和表格这些,同时标准化统一所以内容格式。
(下载图片用的 Local Images,右上角的下载图标是用 Commander 加的,关联了 Local Images 的命令;左边文件树没有原生的,用了 Alternative File Tree ,可以把目录和文件分开显示。)
Obsidian 的粘贴功能非常强:
- 复制粘贴富文本或者 HTML:直接转成 Markdown
- 复制粘贴图片:直接存到指定文件夹(或图床)并在光标处生成连接,可以转 JPG/PNG。
- 粘贴 Excel 表格:直接转换成 Markdown 表格(需插件)
- 按纯文本粘贴:即 Ctrl+Shift+V。
8)强大的模板和数据 Query
在 Obsidian 里使用模板和 query 实现一个著名的 flomo 软件的功能太简单了,先定义个日记模板:
除了宏以外还可以定制数据 query,除了日期用宏以外,下面还定义了两个查询,分别显示当天创建的笔记和修改过的笔记。
日历上选一天,或者命令打开当天日志:
如果新创建的话,设定好的模板就会被执行,同时下面的查询就会显示出当天创建的笔记列表,注意这个查询不是固定写到日志 markdown 的,写的只是 dataview 的 query 语句,渲染的时候才执行,你当天又创建了新日志,过去就会自动又显示出来,不必重新创建 markdown 内容会自动更新。
写日记内容的话,可以快捷键呼出 Obsidian Memos 插件:
记录一条想法,又可以一条条追加记录在当天 日志文件 journal/2022/10/2022-10-16.md 文件的 ## Journal
区间内部:
最后结果这样,这是 memo/quickadd 之类插件正确根据日子找到当日 markdown 文件,并定位到二级标题 “Journal” 下面,自动追加的。
还可以这样快速追加 TODO,然后有统一的地方,可以查询近期所有日志里的 Journel 和 TODO,通过扫描一定时间内所有日志 markdown,文本分析 后提取出来的:
有统一的面板叫做 memos,可以查看近几个月的所有 journal 和 task 。
9)添加图表
虽然 VSCode 里也能使用 draw.io 等给 markdown 添加图表,但体验弱很多,添加起来你还要左边文件树,找到 images 文件夹,右键新建文件,输入 abc.drawio
文件名,然后双击开始设计,完了又把 url 添加到 markdown 中。
同样是插入一个 矢量图,ob 里点一个按钮就能在设定好的文件夹内部按规则新建矢量图,并同时把内部连接添加到当前文档的光标所在位置,再为你在下方同步打开设计器:
功能还是那些功能,但是从:按规则新建图片 → 插入连接 → 打开设计器,三个动作一口气做完,你就觉得 “真顺”,没有任何阻挡,下面修改了图片,上面文档预览就能同步看到嵌入效果。
事实上 Obsidian 里画点图表可以选择的太多了,除了 Excalidraw 和 Draw.io 外,还能用:Mermaid,PlantUML,GraphViz(原始的 dot):
还有可交互的 Chart:
渲染效果很漂亮,可以直接鼠标交互操作。话说 ob 集成了那么多功能,会很卡吗?No,它一点也不卡,甚至比 vscode 反应灵敏不少,不管编辑还是切换文件,都能瞬间响应,有点预料之外。
后 话
细节上的体验优化太多了,先举 9 个吧,ob 有近 700 个专门围绕 Markdown 笔记的插件,比所有我见过的笔记软件都多,都活跃,其中 300 个是在今年 1-10 月以内新增出来的。大到 DataView, Kanban, Excalidraw 这类能拓展 ob 边界的插件,小到 emoji 辅助输入面板:
用 Obsidian 写笔记,每天都能发现一点小惊喜,都能体验到效率比昨天有所提升,这种持续不断优化升级的感觉,只有当年初接触 vim 时才体验过,进一步刺激了我的写作欲望。
同时 Ob 还能将你的笔记分成一个个的 Vault,统一管理起来,提供统一的分析,扫描,重构,定义 / 引用查找,补全,符号预览等 IDE 里常见的功能。因此其他笔记软件顶多叫 Markdown Editor,而 OB 可以称为 Markdown IDE。
最后付一下 Obsidian 作者的设计说明:
上面几个点我表示非常认同,他们的设计理念挺和我的胃口的。
顺带,主创是两位可爱的华人。
—
扩展阅读:
—
洋子
如果是程序员,推荐我自己写的一个笔记软件 https://github.com/purocean/yn 功能比较强大,甚至你可以用它来控制无人机
李大嘴
1、本地软件,所有文件存放于本地。例如 zimwiki。最好不要用数据库,直接文件存放,或者用类似 sqlite 本地数据库。
我常用的符合的有 obsidian 和 logseq,思源是 sqlite
2、支持 markdown
上面三个都支持
3、有一定的管理功能, 至少得支持多级目录和搜索
上面三个都支持
4、更需要一个单机版的有道云笔记
如果我没有理解错的话,思源比较接近
要 obsidian 稳定且流畅的话,需要少用插件,除了下载量比较大而且反馈良好的插件都最好别用,obsidian 并不会在数据误写入之后给出提示,我遇到过很多奇奇怪怪的问题都是插件造成的,另外其实也最好不要使用第三方同步(走插件同步应该会好很多),虽然 markdown 文件并不会因为部分结构错误就没有办法读取,但是你大概会在一段时间之后,发现有些文件的内容出问题,啊,虽然大部分情况下发现不了,别问我怎么知道。
要用思源的话,建议定期备份数据,因为思源的数据是以 json 格式存储的,如果一个文档中的部分内容损坏了, 就会造成该文档无法读取,还有就是使用思源自身的对象存储或者 webdav 对接(免费的)而不要去使用坚果云之类的网盘直接同步数据,他们对文件的锁定会跟软件核心的冲突,甚至造成数据损坏。
logseq 我最近已经很少使用了,我个人是建议不要使用大纲式的软件来写作长篇内容,至少就我自己来说,这样会造成很多问题。