很久没有更新新文章了,但这几个月里并没有闲着,一直在学之前买的课程。虽然是在干正事,但博客这边也不能鸽的太久。

今天无意间看到了搭建个人笔记库/知识库的文章,感觉自己也可以过来分享一下我自己平时是怎么管理我的个人知识小金库的。话不多说我们马上开始。

首先,我是搞技术的,也就是说我的生活中有相当一部分时间是在和计算机打交道的,当然也就避免不了要保存一些代码的场景。和一些朋友是以读书笔记,生活日记这些分类来说还是有些区别。

我对笔记系统要求是这样:

  1. 以文字为主,不存储会音视频文件等大文件,最好能有代码高亮
  2. 笔记格式方便迁移和备份
  3. 能在电脑上编辑修改,能同步在手机上查看
  4. 不需要每月单独买服务器,尽量减小开销

总结下来就是一、必须使用markdown格式。二、必须要有Web客户端。三、无后端存储

前前后后我试了很多种方法,包括部署开源的leanote蚂蚁笔记,改开源的markdown编辑器,甚至连mediawiki和dokuwiki还有wikijs都试过了,总是不够完美。最后决定使用坚果云+Typora+自己手搓的web版编辑器三种混用的方案。

平时会把各种不同的笔记保存为独立的markdown文件,然后按笔记的主题分类到不同的文件夹里。需要编辑时就使用Typora直接打开修改和查看就好。Typora的Markdown编辑体验超级顺手,各种实用小功能我非常喜欢,而且打开速度也比Vscode快得多。最后再使用坚果云同步到云端,这样数据就不会丢失了,同时就算本地断网了,也能正常打开和修改笔记,待到网络连接的时候,坚果云会自动同步,永远不用担心数据丢失的情况。

需要备份数据时也很简单,直接把整个文件夹复制到想要的地方就好了,完全不会像其它数据库类型的笔记软件,还要专门导出数据,而且导出数据之后一些格式又会丢失,可以说真的是很不方便了。

现在问题来了,Typora又没有手机版,怎么在手机上查看和编辑这些文件呢?还记得我说的自己手搓的web版markdown编辑器吗?为了适配手机端和没有安装Typora的电脑,我做了一个web版的markdown编辑器,可以连接到坚果云的Webdav服务上,这样即不需要单独安装后端程序,也减少了一笔服务器的开销。

其中markdown编辑器部分是使用的开源但似乎已经不再维护的hypermd。其它部分,比如文件浏览器,文件创建移动复制删除等管理,还有文章图片附件上传管理,还有相对路径图片链接的转译,用户验证模块,以及文件读写存储逻辑,都是自己完成的。

这个编辑器支持PWA,可以安装为一个浏览器APP,平时可以直接从桌面快捷方式打开,就和一个普通的软件一样,有自己独立的窗口,可以自由放大缩小或者全屏,如果浏览器不支持PWA也可以作为一个普通的网页使用。删掉也很简单,只需要在Chrome里右键移除就可以了,不会有任何残留文件。

webedit-illustration

虽然这个web版编辑器看着很厉害,但做出来也是一波三折。断断续续做了好几年,提交次数500多次,最后才稍稍做成了自己想要的样子。

其实这个web编辑器也并非是完全无后端直连坚果云的Webdav服务,而是经过了我php写的一个http代理的程序(丢在我白嫖的网站主机上运行),直接用这个web编辑器访问坚果云会因为http basic auth里不能出现@符号导致webdav账号验证失败(坚果云账号是个邮箱,里面必然出现一个@符号,这就很伤),所以无奈加了个代理。如果是自己搭建的webdav服务则完全可以避免这个问题。

还有一个问题就是hypermd很久不更新了,编辑时bug特别多,所以我平时只用这个编辑器在手机上查看笔记,要撰写编辑的话还得上Typora。或者有时候出门在外,可以应急编辑一下文件。


换来回去,我还是喜欢这种用本地文件管理笔记的方式,很容易就能找到自己想要的文件,备份也很容易,直接复制文件夹就好了。而且因为是Markdown格式,许多代码编辑软件都支持这种格式,即使没有安装Typora之类的专业编辑器,也能轻松查看和编辑。同时还有个好处,就是Markdown是基于文本的格式,而不是word那种二进制的格式,就算电脑上没有安装任何Markdown软件,用记事本打开也能直接阅读里面的大概内容,兼容性挺好的。

现在有相当一部分网站都是支持md格式的,必要时可以直接从笔记里复制文字到网站里,完全不用担心任何排版问题。同时md格式可以渲染成好多格式,比如pdf,图片,html,word,甚至epub,rst格式都没问题。还有一个优点是latex公式,这个用过就知道它的好。

至于我为什么没有选择那些开源的,基于数据库的笔记软件。

  • 一是因为要搭建服务端,为了搭建一个笔记就单独买服务器确实有些不划算。
  • 二是我偏好webdav协议,同时我对很多数据库并不熟悉,不仅搭建麻烦,而且一旦出现问题,我又很怕我一个误操作把数据给整无了。
  • 三是我偏好md的语法,那些笔记软件多半都要重新学习笔记语法,而不是像md一样,语法不仅简单还很通用。同时md还对代码高亮比较友好

我的笔记管理系统大概就是这样,虽然比较原始吧(指直接存到文件夹里),但又很可靠。美中不足的是web版的编辑器距离我想象的还有很大的差距(主要是编辑体验这块),因为找不到合适的编辑器库,所以做成这个样子已经尽力了。希望能给正在做个人笔记库选型的朋友们一些建议。