三年前我玩过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. Visual Studio 2013 支持MVC3不完善,Razor智能提示不完整或者不提示

    以下只是针对MVC3. 前天试用Orchard 1.8,用VS2013新建C#类库项目(ClassLibrary project),然后新建Views文件夹,新建cshtml,然后引用MVC3的相关d ...

  2. 项目学习——电力系统底层架构ssh

    电力系统底层架构1.建立web工程 创建数据库 导入向对应的jar包2. 持久层: (1)在cn.itcast.elec.domain中创建持久化类ElecText @SuppressWarnings ...

  3. C#之delegate

    delegate 委托的使用: 封装一个方法,该方法只有一个参数并且不返回值. using System; using System.Windows.Forms; delegate void Disp ...

  4. Asp.Net Web API 2第十二课——Media Formatters媒体格式化器

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本教程演示如何在ASP.N ...

  5. openVPN报错:All TAP-Windows adapters on this system are currently in use

    解决办法: 1. 确定openVPN服务已打开. 2. 控制面板\网络和 Internet\网络连接,确定TAP-Windows Adapter V9已经启动.

  6. webpy使用笔记(二) session/sessionid的使用

    webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...

  7. [ACM_图论] Sorting Slides(挑选幻灯片,二分匹配,中等)

    Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...

  8. [RabbitMQ] Connection failed

    RabbitMQ.Client.Exceptions.BrokerUnreachableException: None of the specified endpoints were reachabl ...

  9. 【Android 】Service 全面总结

    1.Service的种类 按运行地点分类: 类别 区别  优点 缺点   应用 本地服务(Local) 该服务依附在主进程上,  服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外L ...

  10. C语言实现单链表-03版

    在C语言实现单链表-02版中我们只是简单的更新一下链表的组织方式: 它没有更多的更新功能,因此我们这个版本将要完成如下功能: Problem 1,搜索相关节点: 2,前插节点: 3,后追加节点: 4, ...