Skip to main content

介绍自己的本地笔记搜索工具 WaterMate,兼谈笔记文化

技术
Author

cookwhy

Published

April 4, 2014

多年养成的习惯,我喜欢用 Emacs Org Mode 来记笔记,并且建成一个 html 工程,当笔记写到一定程度的时候,我就发布成网页,这样可以直接在本地用浏览器打开笔记转成的 html 文件来查看内容。这样还可以自定义网页的样式、用 JS 控制显示方式等,比直接在 Emacs 里阅读的体验更好。

严格地说来,我是把 Org Mode 当成一个 Wiki 在用,我并不是把笔记一股脑地放在一个 org 文件里,而是分成不同的目录,存放不同的笔记内容。这样,经过七八年的积累,都差不多有 300 个 org 文件了,并且每个 org 文件还不短。很难想象,如果把这些内容全塞在一个 org 文件里,会是怎样一个结果?这些 org 文件,还有相互链接跳转、锚链接等,其实就是构成了一个完整的 Wiki 笔记库,只不过这个 Wiki 是本地的、使用 Emacs 作为发布引擎。

也许很多人会问,你为什么不使用 Evernote、为知笔记这些现有的笔记工具,而喜欢使用 Emacs 呢?这些工具的笔记收集功能已经很优秀了,并且还自带搜索功能,干嘛这么费力气自己折腾一套生态工具出来?

我承认,Evernote、为知笔记这些笔记工具,的确非常优秀,我也在平时使用它们收集资料、记一些事情。但是这些工具的强项也就在于收集资料了,可惜编辑功能太弱。所有的所见即所得编辑工具的致命缺点,就是编辑功能太弱了,这个特性在 Evernote 上体现得太明显了。无法快速选定内容,无法快速改写格式,最不能忍受的是,清除格式就把所有的格式都清除了。而 Emacs 的 Org Mode 使用的却是自己的文本标记语言,功能强大,并且最重要的是,写起来够快速,你永远用不着去找那些格式标记符号,只要拼命写就可以了。标记语言比起所见即所得的编辑工具来说,最大的优点就在于你熟悉了这一套语法后,你就能快速地记录你的想法,并且是带格式的!这样你的思维永远不会被工具的零散操作所打断。

Evernote 这些工具对于码农来说最大的问题还在于,在记录一些代码片断时,远远不够用。比如说,我在 Emacs 里可以针对 C++,Java或是任何一种语言指定代码发布成 html 页面时的风格及高亮显示内容,可是,在 Evernote 里怎么办?我实在是觉得有点不够用。所以,码农们还是老老实实用 Emacs 或是 Vim吧,这种纯文本的方式,才适合你记录各种技术笔记,方便转换为各种格式,还有,不会把你的代码格式搞乱。

Evernote 这类笔记,还有一个我最不喜欢的地方,即它们的信息组织方式。它们的信息组织方式更像是一个时间卷轴,不停地往后写东西,虽然网上也有技巧文章说把 Evernote 当成 Wiki 来用,可是这样使用的体验实在太差了。

你难道不想在本地拥有一个像维基百科那样的笔记工具么?维基这样的信息组织方式,在我看来,是最优秀的。我同样也试过了一些本地 Wiki 工具(例如其中最方便的一款便是 MoinMoin),但是无例外有几点问题:1. 本地备份与保存数据太麻烦;2. 环境搭建也太麻烦;3. 在网页上编辑,体验太差了,还不如 Evernote。

所以,最后我定格在了 Org Mode 上,让 Emacs 成为本地 Wiki 的编辑和发布工具,而让浏览器成为浏览最终结果的地方。

说完编辑工具,再来说说为什么要做这个本地搜索工具。

很多人都说,现在不是有很多这样的工具了么?像什么 Google 桌面搜索、百度本地搜索之类的,和我这个工具差不多用途。是的,没错,所有这些工具我都尝试过,我都有这样的不满意或是那样的不满意,我还是倾向于做一个自己的工具,专门服务于我自己的笔记。这些工具都有一些这样或那样的问题,比如说默认是指定整个电脑范围的搜索,展示页面太杂乱,还有最重要的一点,这些工具都太自以为是了,以为自己想到了用户的全部,竟然都不再更新了!难道不赚钱的生意就可以这样随便糊弄么?于是,我决定自己动手,让这个工具成为自己一生的事业伴侣,哈!

我喜欢 Google 网页的体验,所以我也做了一个网页版本的文件搜索出来,在尝试了 Python、Clojure 等语言后,我最后决定还是用 C++ 来写这个玩意了。现在这个工具还很粗糙,目前只能支持单个单词的关键字查询,不过暂时本地笔记搜索足够用了。以后我会逐步完善相应的搜索功能,比如说添加关键词的组合搜索,甚至于加入我自己擅长的图片搜索功能。或许将来我会逐步加一些我自己的特殊需求进去的,比如说直接对 org mode 格式进行解析、显示并生成预览等。

想试用的请猛戳这里,帮助和使用说明可以看这里,有任何疑问都可以给我留言。