三年前我玩过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. ubuntn下 nginx+phpstorm 中配置xdebug调试

    xdebug安装和配置说明,主要用于个人学习记录. 一.echo phpinfo(); 搜素xdebug,若未搜素到,则标识未安装或安装失败. 二.拷贝步骤1中输出的所有结果.访问http://xde ...

  2. 【Python自动化运维之路Day6】

    1.递归思考题,阶乘 使用递归方式(函数)计算: 1*2*3*4*5*6*7*8*9*10的值 def func(num): if num==1: return 1 return num*func(n ...

  3. MongoDB基本概念

    MongoDB是一种强大灵活可扩展的数据存储方式,它扩展了关系数据库的众多功能.MongoDB的功能非常丰富,但是却非常容易上手和便于使用,今天来了解一下MongoDB的主要概念. 文档 文档是的核心 ...

  4. Caliburn.Micro(CM) 穿过 Popup 绑定方法

    今天一个朋友,在用CM框架中,在一个ListView的DataTemplate,中用了个Popup,发现绑定不到VM(集合外的VM,即ListView的DataContext)中的方法了.我查了一下C ...

  5. ajax请求的异步嵌套问题分析

    (本文章以as3代码为例) 问题的产生 在前端开发时,经常会使用到Ajax(Asynchronous Javascript And XML)请求向服务器查询信息(get)或交换数据(post),aja ...

  6. [ACM_数学] Counting Solutions to an Integral Equation (x+2y+2z=n 组合种类)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27938#problem/E 题目大意:Given, n, count the numbe ...

  7. [游戏学习25] MFC 橡皮筋画线效果

    >_<:这是给出窗口内外不同情况的处理展示的例子. >_<:MouseCap.h #include<afxwin.h> class CMyApp :public C ...

  8. Memcached分布式缓存初体验

    1 Memcached简介/下载/安装 Memcached是一个高性能的不是内存对象缓存系统,用于动态Web应用以减轻数据库负载.Memcached基于一个存储键/值对的HashMap.其客户端可以使 ...

  9. C语言实现二叉树

    二叉树的重要性就不用多说啦: 我以前也学习过,但是一直没有总结: 网上找到的例子,要么是理论一大堆,然后是伪代码实现: 要么是复杂的代码,没有什么解释: 最终,还是靠FQ找到一些好的文章,参考地址我会 ...

  10. atitit.web原理 理论attilax总结

    atitit.web原理 理论attilax总结 1. Web3.01 2. Web的未来趋势1 3. Web语言与应用导论_百度百科.html2 4. <Web设计与编程导论(影印版)> ...