三年前我玩过Zim,当时还写了一篇《Zim - 普通人的Org-mode》,当时还说我还是会坚持使用emacs org-mode。但最近我又在考虑是不是回头用Zim来写博客文章、整理知识库。

org-mode的缺点

虽然我一直在用org-mode写东西,但还是觉得有些地方不太方便:

  • 多篇文章管理起来比较麻烦,尤其是还有附件的问题
  • 插入图片比较麻烦(虽然对于即使截屏和插入图片我已经在 org-download 上折腾得还凑合了)
  • 没有集中发布成web site的功能——我是想将笔记转成html托管到 bamanzi.github.io 或者 bamanzi.bitbucket.org 上

(补充:写完这篇博文后,我又在想,是不是我也可以参照Zim组织Notebook的方法来组织自己的org-mode文档?比如放弃单个文件的做法,采用多文件、多目录来存放,用 Deft 来查找,用 org2jekyll 来发布? 得等有时间的时候再来折腾吧——上次想的结合 org-mode + org-babel 来搞 presentation的东西还没折腾呢)

Zim的优点

首先,Zim也是基于纯文本:

  • 一个Zim Notebook是一个目录,每个节点(topic)一个纯文本文件,很易于在多台电脑间同步(我在用seafile),而且一般在不同电脑上同时写同一篇文章,很少会发生冲突(即使冲突了seafile也会发现,帮我另外生成一个副本,按文件名搜索一下就可以发现);
  • 虽然Zim存的是wiki纯文本,但编辑时可以所见即所得,却又可以用普通文本编辑器来编辑,这一点跟 org-mode 差不多;
  • 可以用pandoc这样的工具将某篇文章转换为其它格式(比如在博客园发博客时转换为markdown格式)——zim的wiki语法是基于dokuwiki的,而pandoc(1.13.1版本以上)支持dokuwiki
  • 可以放到hg/git仓库里面

但Zim还有一些其它的优点:

  • 屏幕截图很方便。Zim有屏幕截图插件,点两下就可以截图插入了(不过Windows上面这个插件有些问题,我改天单独再说); Windows上面还可以直接从剪贴板粘帖图片;
  • 支持附件,各个wiki条目的附件分开存放。evernote不支持附件。org-mode找位置存放比较头疼,附件不跟笔记放在一起的话,几乎就没法管理;
  • 可以从文件管理器、浏览器拖图片到Zim附件栏(不过好像只是Windows上面可以,我在Linux LXDE上面没试验成功,不知道GNOME上面怎样。不过有个小问题:Windows上从浏览器拖图片到附件栏时,始终得到的BMP格式的图片);要在文章里面使用图片的话,再从zim的附件栏拖到文章里面即可(对于org-mode我每次用 org-download 的时候都要考虑图片文件放在那里)
  • 可直接导出html和markdown,还可以选择一段文字拷贝为markdown/RST格式。这对于我在博客园上发博文带来了相当大的方便;
  • Source View插件: 代码有语法高亮

  • Table Editor插件:这是今年中期发布的0.63版本才开始有的,挺好用。众多笔记软件在表格这个地方做得都不太好,但Zim做得不错,甚至单元格内文字带换行这类功能它都有(org-mode不支持这个)。另外很重要的一点是,Zim表格的wiki语法跟org-mode基本兼容,遇到批量输入不方便的时候,就调emacs来直接编辑好了。 还有,这个表格在拷贝/导出为Markdown或者RST的时候能够转换成对应的表格语法

  • Journal插件: Zim算是树状笔记软件,但以前用树状笔记软件时强迫症患者会有个纠结点:一些零星的内容要在树上找地方放就很难。Zim的这个日记(Journal)插件,非常适合用来放零星的笔记,而重要的内容则会设定一个特定的wiki条目才存放,这样的话我可以将重要和不太重要的内容区分开来。

缺点

  • 在使用场景上,Zim主要还是适合管理自己写的内容,整理形成自己的知识库。如果你有很多零星、琐碎的内容,那还是 Evernote合适; 如果你的大部分内容都是抓取整个网页文章(想尽量保留样式的话),可以用Scrapbook 或者 Evernote这类工具;同样,如果是在Windows上,有很多RTF/Word格式的内容,那么用Zim也不合适。

    • Evernote我也同时在用,主要用来存放一些待整理的“知识”(多是网页片段)或者临时性的内容。它其它方面的功能都还不错,唯一的问题是数据在一个单一文件中,而我有多台电脑上切换的需求(我工作电脑有三台,分别用在个人兴趣、技术和办公协同三方面)。
  • 在windows上,wiki条目名不支持中文(主要是文件名编码方式的问题)。
  • 从网页拷贝内容进来时,不能自动转换格式,而Firefox上面的扩展zim capture和zim clip好像也都不好用——其实我觉得写个插件调用pandoc来转换的话,应该不会太难

一些/Tips

  1. 用Source View插件插入的代码如果它不支持这种语言的话,请改用Zim原始的三引号方式来嵌入,而不要采用"Default"语法,否则会导致Zim崩溃。这是目前已知的一个bug:Bug #1471285 - Code Block using Syntax Default crash Zim
  2. 前面说过,Windows上从浏览器拖图片到Zim附件栏时,始终得到的BMP格式的图片,不喜欢这种格式的,需要自己转换一下,或者改成直接拖到文件管理器里面;
  3. 如果你想让界面变成中文,需要设置环境变量LANG为zh_CN。对于采用windows portable版本的用户,可以在 ZimDesktopWikiPortable\App\AppInfo\Launcher\ZimDesktopWikiPortable.ini 这个文件里面设置。详细说明在这里: Set the language for the portable version.
  4. 如果你对Zim里文字的显示风格不满意,可以修改 ~/.config/vim/style.conf(比如我就觉得默认的几级标题无法分清,于是从emacs tango theme里面偷了颜色配置过来),注意修改之前需要关闭 Zim,修改完之后再打开,具体配置说明可以参考这里: Config Files - Zim Wiki
  5. Table of Contents 这个插件挺不错的,可以在右上角增加一个浮动小窗口,显示当前文章的各节标题(这可以顶替Emacs里面 anything-org-headlines 的能力)

用Zim替代org-mode?的更多相关文章

  1. 用lucene替代mysql读库的尝试

    采用lucene对mysql中的表建索引,并替代全文检索操作. 备注:代码临时梳理很粗糙,后续修改. import java.io.File; import java.io.IOException; ...

  2. Notepad2替代系统自带的记事本

    事情是这样的,平时我经常把一些文字复制到记事本中编辑好了再复制到目标位置,可以在系统自带的记事本中替换删除一些内容,记事本小巧,占用很少的资源,我很喜欢:但今天复制的内容中有很多数字和一些我不想要的内 ...

  3. 在Wcf中应用ProtoBuf替代默认的序列化器

    Google的ProtoBuf序列化器性能的牛逼已经有目共睹了,可以把它应用到Socket通讯,队列,Wcf中,身为dotnet程序员一边期待着不久后Grpc对dotnet core的支持更期待着Wc ...

  4. Autoit中用PrintWindow替代ScreenCapture函数实现截图

    想截取躲在后面的窗体或控件,找到了PrintWindow函数,幸运的是Autoit3也对此进行了封装以方便使用. 于是乎,将帮助文件里的_WinAPI_PrintWindow()实例改写了一下,以替代 ...

  5. Axel替代wget

    Axel替代wget 2011年11月10日admin发表评论阅读评论   Linux下用的最多的下载工具莫过于wget和curl,这两个工具虽然堪称经典.但其单线程的速度越来越不能大软件的下载.于是 ...

  6. [原创]MvvmLight中用IDialogService替代DialogMessage的用法

    在新版的MvvmLight中,DialogMessage被标注为已过时,需要用IDialogService来替代,IDialogService的具体用法如下: 先在主窗体中实现IDialogServi ...

  7. 【Java EE 学习 83 下】【SpringMVC】【使用注解替代已过时的API】【SpringMVC、Hibernate整合】

    一.SpringMVC中注解的使用 1.为什么要使用注解 之前曾经提到过的三种控制器在spring3.0中都已经被明确标记为过时了,spring3.0推荐使用注解的方式替代三种控制器,实际上使用注解的 ...

  8. PHP基础知识之流程控制的替代语法

    PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch. 替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,e ...

  9. 用 string 进行插入、替代、查找输出下标等操作

    string s; s = "; string::iterator it; it = s.begin();//让s指向第一个元素 cout << s; system(" ...

随机推荐

  1. css多行文本省略号

    适用于内核为webkit的浏览器: display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflo ...

  2. 鸟瞰Nodejs

    一,基础. 1,Node的包管理器:npm; 安装node环境时会自动安装. 本地模式获取一个包:npm install [package_name] 此时包被安装到当前木的node_modules子 ...

  3. Queue插入的时候报错:源数组长度不足。请检查 srcIndex 和长度以及数组的下限。

    异常问题记录: 本想自己手动实现一个日志记录功能.使用Queue队列集合来实现多线程的日志记录. 测试 一个线程写入数据Enqueue和一个线程读取数据Dequeue ,直接用的无休眠死循环. 终于抛 ...

  4. T4 模板 : 一种提升ASP.NET MVC开发速度方法

    最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释, ...

  5. 工作圈redis 使用

    redis作为内存数据库,更多的是作为内存cache来使用. 再所负责的工作圈中的使用,主要是分两方面: 1.数据对象: 主题的内容存储 主题回复内容的存储 用户信息存储 圈子信息存储 2.各数据对象 ...

  6. 点击div外面该div消失

    <head> <meta charset="UTF-8"> <title></title> <script type=&quo ...

  7. debian7.8 安装 chm

    一.CHMSEE 这个比较常见了,呵呵. 安装: sudo apt-get install chmsee 之后在应用程序附件中就可以看到了. 问题1: 启动不了或者出现 chmsee: error w ...

  8. SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE

    1.创建表 Staff CREATE TABLE [dbo].[Staff]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [Money] [int] NULL, [Cr ...

  9. elclipse/myeclipse web.xml自动提示补全问题

    默认情况下,在编辑web.xml时是没有自动提示功能的,只能在编辑完成保存时验证语法是否正确. 解决方法: 1.下载(保存)http://java.sun.com/xml/ns/j2ee/web-ap ...

  10. Java为什么能跨平台运行

    因为它有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在虚拟机上进行的,每个系统平台都是有自己的虚拟机(JVM),所以JAVA语言能跨平台. 1, java代码不是直接运行在CPU上,而是运 ...