[投稿]Pkm工具:Vimwiki


说明1:本文最初由Yibie于2009年12月投稿(原文)。在Yibie从Vim转向Emacs后,善用佳软接手更新本文。
说明2:阅读本文需要先了解和掌握Vim的基本使用。

用最顺手的Vim(介绍),以纯文本形式,构建自己Wiki,形成个人的知识库——这是很多人的梦想。而Vimwiki介绍)让梦想成真。

Vimwiki自称为 Personal Wiki for Vim(用Vim管理的个人wiki),可用来管理和组织笔记、想法,用来管理待办事项(todo list),用来编写文档。

1. Vimwiki的安装

1.1 Vimwiki插件的下载与安装

打开Vimwiki官方主页,下载 vimwiki.vba 文件到任意目录。
用Vim打开vimwiki.vba文件,然后在”Normal模式”下输入命令’:so %’,等一会儿,安装将自动完成。

1.2 Vimwiki的基本配置

Vimwiki的一些基本配置需要在vim配置文件中指定,主要是存储路径。
读者可参照下例进行修改,然后放到_vimrc文件中:

” vimwiki
let g:vimwiki_use_mouse = 1
let g:vimwiki_list = [{‘path’: ‘E:/vimwiki/’,
\ ‘path_html’: ‘E:/vimwiki/html/’,
\ ‘html_header’: ‘E:/vimwiki/template/header.tpl’,}]

最后3句分别指定了:
– 存放Vimwiki文件的路径(Vimwiki的文件后缀为.wiki)
– 从Vimwiki转换为Html网页时的保存路径;
– Vimwiki转换网页时使用的网页模板的路径。

2. Vimwiki入门:体验式教程

进入首页
操作:在Vim的Normal模式下,键入 \ww 三个键。
结果:Vim就会打开wiki首页(index.wiki)。
更多说明:① index.wiki所在目录见上述设置。② \ 键实际是<Leader>符,也可自定义。

创建新页面
操作:在首页中随便键入一些文字。比如, “这是wiki首页。 我要创建一个新页面 NewPage。”
结果:NewPage 会高亮显示。
更多说明:
– NewPage 这样的格式称为驼峰词,是创建新页面的最方便的做法。
– 对于更复杂的页面名称或中文页面名称,可以用双方括号表示。比如 [[中文页面]] 将创建 中文页面.wiki。括号内也可以用半角竖线分割,前半部分表示文件名,后半部分表示描述。比如 [[page3|我的第3篇wiki]] 将生成 page3.wiki 文件。而导出为html时,超链接的文字只有描述“我的第3篇wiki”。这种做法可以兼顾文件名的精简、规律、规范,与人工阅读的直观。采用Vim7.3中的最新 conceal text 特性,也可以在wiki中直接隐藏这些不用显示的符号,详见 这篇文章
– “快速引用某页面,并且,该页面若不存在则自动创建”是wiki的核心优势之一。

跳转到新页面
操作:在 Normal 模式下用光标双击 NewPage。
结果:index.wiki自动保存、关闭。在当前窗口打开了 NewPage.wiki 页面。
更多说明:
– Enter:与双击效果等同,在当前窗口中打开NewPage页面。
– Shift+Enter:上下分割窗口,NewPage在上,原页面在下。
– Ctrl+Enter:左右分割窗口,NewPage在左,原页面在右。

返回首页
操作:在 NewPage 中输入一些内容。进入Normal模式,按BackSpace。
结果:NewPage自动保存;并返回index.wiki页面;此时 NewPage 变成了另外一种高亮(区分

页面内的格式编辑
待完成……

2.1 Vimwiki的基本语法摘要

Vimwiki的下载主页上面给出一个快速学习Vimwiki语法的知识卡片(pdf格式,可通过一些软件转换为图片),从上面便可知道所有的Vimwiki中使用的语法,十分简单,方便使用.

PDF地址:http://habamax.ru/myvim/data/vimwikiqrc.pdf

2.1.1 普通语法:
*bold* — bold
_italic_ — italic
WikiWord — link to WikiWord (这是驼峰词的用法)
[[complex wiki link]] — link to complex wiki link
Indent lists with at least 1 space:
* bullet item
# numbered list item
= Header1 =
== Header2 ==
=== Header3 ===

2.2 Vimwiki键盘指令

<Leader>ww — 打开默认的wiki主页
<Leader>wt — 在新的标签页中打开默认的wiki主页
<Leader>ws — Select and open wiki index file.(未知)
<Leader>wd — 删除你所在的wikiword的页面
<Leader>wr — 重命名你所在的wikiword页面
Backspace — 返回上一页
Tab — 寻找下一个wikiword
Shift Tab — 寻找上一个wikiword
如果有什么不懂,可输入在”Normal”下输入”:h vimwiki-mappings”查询

2.3 Vimwiki发布为html网页

Vimwiki可导出为html格式,便于发布为网页。
输入’:Vimwiki2HTML — 将当前wiki页转换成Html格式’
输入’:VimwikiAll2HLML — 将所有的wiki页转换成HTML格式’

3. Vimwiki的优点与缺点

3.1 Vimwiki的优点

  • 与Vim紧密结合,可使用Vim的内建的正则表达式规则,高效处理文本
  • 与Vim紧密结合,可利用Vim内建的多种命令,以及可显示多个分页的特性,同时展示多种窗口,快速查看多份资料.
  • 由于Vim是文本处理工具,所以任何笔记,只要存为文本数据,便可以用Vim来组织和整理
  • 内置了特别的语法高亮模式,在观感上与普通见到的wiki没有多大的分别.
  • 可利用’:VimwikiAll2Html’这个命令快速将文本转化为网页.
  • 在Vim中自动识别网络链接格式,点击便可打开网页.
  • 在Vim的”Normal模式”下,在某行字句上面敲击”=”可自动为该字句添加标题语法
  • 自动添加wikiwork,当英文单词里面有连续两个英文字母为写’WikiWord’,Vimwiki会自动识别并将其标记为wikiword.该特性仅针对英文.

3.2 Vimwiki的一些缺点

  • 没有下划线的wiki语法
  • 由于是基于文本处理软件所开发的插件,所以无法支持导入图像、音频、视频等格式,同时也无法添加附件,但可以通过添加文件链接、或是网络链接的方式变通

5.0 回顾与总结

5.1 缘起Vim

在08年的时候,我就听过这“神的编辑器”的大名了。当时,也曾下载过一次,但是尝试的结果很不如意,打开了之后竟然无法输入中文!心里面想“见鬼 了!这是什么玩意儿!”。但是,因为内心中希望有朝一日能够用上这个东西装逼,我还是没有把它从硬盘里面删去。之后过了很久,我都没有用过Vim,我用了 其它的软件来作为我日常编辑的工具。后来能够用上Vim,还是拜托自已那不折腾会死星人的臭脾气。

在09年的开始,我开始对如何用电脑来记笔记感兴趣。在看过大量文章之余,也尝试了大量的工具。从小巧的Treepad、CintaNote、 PinPKM到以同步而著名的Evernote,这些尝试都无疾而终,不是它们不好而是我想要的方式并不是这样。于是,开始把目光投向了Wiki这个形 式。

同样是尝试了很多Wiki工具,比如xbeta介绍过的WikidPad、ZIM、单机版的MoinMoin、DokuWiki等等,还是觉得太麻烦了。为什么要有该死的后台?为什么不能直接编辑呢?

怀着这样的想法,我的目光又一次投向了Vim,这次我从滇狐1那里知道了Vim上一个叫Viki的插件,可以当把Vim变成Wiki。我很兴奋,但是尝试了之后不得不放弃了Viki,因为把它装上了之后总是出现莫明其妙的错误,这些错误在Windows的环境下又无法解决。

难道Vim上就只有Viki这个插件才能让Vim成为Wiki吗?我又开始了新一轮的找寻。很幸运,我找到了Vimwiki。在艰难地啃了它的英文说明书 之后。很容易就装上了。而有鉴于当时Vimwiki中文的资料的匮乏,我就写了一篇Vimwiki的中文文档,投稿给善用佳软。之后,我就很欣喜的看到在 善用佳软那强大的影响力之下,越来越多人2喜欢上Vimwiki,有的人还把Vimiwiki的帮助文档整个翻译成中文即3

而我在用Vimiwiki的时候,基本只用Vimwiki,偶尔会用到Calendar来记日记,Wiki的词条写了50个左右,最大的Wiki文档大概有30KB这样。但是并没有很好的坚持下去。于是,Vim用得越来越少了。

5.2 转到Emacs

在听说Vim的同时,我也听说过Emacs,但是Emacs在国内不如Vim流行,中文资料比Vim少,所以我一开始的选择是用Vim。但是在一次浏览网页的时候,看到了Emacs下Org-mode的演示视频4,非常的震憾,我没有想到文本编辑器还可以如此华丽!究竟有多华丽,大家看演示视频就知道。视

于是我在今年的6月份开始折腾Emacs。不过最初的目的是用Org-mode来管理自已的日程。折腾着折腾着,发现Org-mode的标记语言,可以很方便的组织文章的结构,于是开始用Emacs来记笔记5,写文章。

后来,我意外地发现原来Org-mode本身就具有Wiki功能,于是开始尝试用Emacs来构建我自已的Wiki。在这个过程中,我又受到 Zoom.Quite的启发,Wiki应该是每日记,在上面积累自已的想法和疑问,并一一解答,自然而然个人Wiki就可以坚持下来了。

如图所示:

http://farm5.static.flickr.com/4076/4865667606_db89b7a4a4.jpg

5.3 下面是我的一思考的总结:

  • 我为何对Vim、Emacs这类程序员用的工具感兴趣?
    • 程序员的工作其实就是编辑文本
    • 电脑已经成为编辑文本最主要的工具
    • 选择高效的文本工具,自然要考虑程序员用的工具
    • 最重要的是我本来就对Vim感兴趣
    • 专注于内容建设要比排版重要,而Word显然做不到
  • 为何用Vim、Emacs来塔建个人的Wiki?
    • 这是最经济、最绿色的选择。因为它们是免费的,同时安装的时候不需要依赖其他的东西,不会给系统增加进程
    • 不需要考虑版面的问题,可以专心于内容的编写
    • 直接编写内容,不用进入什么后台之类的,很方便
    • 输入即输出,所想即所得,这是最高境界
  • 个人的Wiki该如何编写?
    • 每天都记录,一直坚持
    • 在Wiki上记录自己想解决的问题,在解决问题时用Wiki记录过程
    • 不必预先分类,当你解决不同领域的问题时再分类

注:

1 滇狐的主页:http://edyfox.codecarver.org/html/index.html

2 来自Gracecode的推荐:http://www.gracecode.com/archives/3022/ 闲耘用Vimwiki塔建的Wiki:http://hotoo.github.com/vimwiki/index.html

3 闲耘翻译的Vimwiki文档:http://code.google.com/p/vim-script-cn/source/browse/trunk/doc/vimwiki.cnx

4 Org-mode演示视频:http://jaderholm.com/screencasts/org-mode/

5 这里有我用Org-mode做的笔记(不完全是):http://www.gtdstudy.com/?cat=297

2009-12:初稿,介绍VimWiki;
2010-08:增加回顾与总结部分。>

,

《“[投稿]Pkm工具:Vimwiki”》 有 50 条评论

  1. 似乎忘了介绍vimwiki的后端delplate,用ruby写的还不错的wiki工具。在使用过的轻量标记wiki语言中,最喜欢的还是txt2tags和asciidoc,比较通用,而且前者很简单,导出格式也很多,后者是很强大(依赖于docbook)。vim的vimwiki和emacs的muse或是emacs-wiki都还是太依赖于具体软件了,相对来说还是muse更好,而且deplate的初衷也是作为muse的vim的clone。

      • 还是不大喜欢用vba安装vim的插件,vimwiki的上个版本自己安装也会出错,也没有深究过。
        或许vba也是vim插件的未来格式,可能会方便一点,总是感觉用代码控制起来不大容易。
        vimviki输出网页不需要后端,deplate安装还要通过rubygems进行,实在很烦,有空再好好试试。

    • 我知道Muse,但是 Emacs 的学习曲线比 Vim 更加陡峭,而且对于我这个非计算机行业的人员来说,Emacs 基本上是没有必要去探究的,除非出自于兴趣

      txt2tags的使用,一直无法明白…

      首先还是要从自己能懂的工具下手吧

      • emacs的确是学习的成本有点太大了。muse一个很不错的特性是插入图片是可视化的,而且各级标题是会有大小区别,只是这个特性是由emacs提供的。
        txt2tag和ascciidoc都是单py文件,需要python的运行环境,可能更多的是依赖于命令行(cmd或是shell)或是用makefile管理。可以参考一下这篇中文介绍,http://sunxun.info/2009/08/txt2tags-basic/。
        还有markdowm也很不错,wordpress也有相应的插件支持,可以试试。

    • 以前用过DocBook,只是标记太复杂,推广不方便,看了你的说明找到了txt2tags,觉得是目前最适合我的解决方案了,并且最新的SVN版本已经支持Docbook了,以后就用它了,还是基于Python的,可以自己动动了,呵呵,谢过了。。

  2. vimwiki这个插件第一眼看到的时候就觉得不错
    完全读完它的帮助文件,就知道,这就是我想要的,不要为了voof的双边框就安装个python
    感觉真的没有必要,在windows平台下.
    另外,vimwiki的转换网页功能也不错.值得使用

  3. 想问个问题,和vim兼容性比较好的拼音输入法是哪个?搜狗打“无奈”和按2选词的时候会执行vim里的其它命令,很无奈
    【善用佳软:无法具体回答,因为不用拼音。我认为这是输入法的bug,还上升不到兼容的层面(一般说vim兼容是指支持normal模式自动英文,i模式自动中文),猜测:换一个sogou版本,或者随便换一款google, 紫光等应该都行吧。】

  4. 原文:将下载到的vimwiki.vba文件放到vim的安装目录”~Vimvim72plugin”或”~Vimvimfilesplugin” 下

    这一步不是必需的,放在哪里都一样,应该这个文件装好后,是用不到的,删了都可以。

    至少,我在Win,Mac里装都没有放到上面所说的位置。

  5. wiki做PKM,可以看看connectedtext。这个最大特色可能是有可视化的结构图。
    http://www.connectedtext.com/screenshots.html

    这类东西偏重于解决自己怎样写。而我的主要需求是抓取别人写的,自己要做的是读和组织。所以不适合我。

    我觉得选知识库软件要小心,要尽量选择开放性的可转换的。如果有一天你发现不能满足你的需求,辛苦建立的知识库要遗弃在角落,那可就糟了。

  6. 在笔记模式下可以实现插入的图片的 直接 显示吗?我 研究了半天,应该是不行的吧 插件大部分是E文的我E文又不好,请问有人知道吗? 导入的网页在Mybase里直接打开会很卡 看来对IE9直接不是很好… 本人经常进行网文搜集..尤其是一些技术性文章,经常是收集下来在慢慢细读… 为知的管理功能太弱.. 网博士,动不动就出错,在论坛提交了几次都无人理会.. 给人一种已经放弃开发的感觉 Mybase国际知名,可是对于爱手机网文的人实在不合适,尤其是我第一个提到的问题这要都无法显示的话,那根本就没有考虑的理由了 ,还不如去用纯文本笔记本呢 Evernote这种标签式管理不是很习惯,最不喜欢的就是二级目录都无法创建 三强中就Surfulater没用过,没有汉化版用着很费劲 要是只是这样也就算了 他还是个收费软件 有谁能推荐个软件吗? 网文收集比较好用的软件…收费的也行不要太贵就行..毕竟还在上学.

  7. 关于换行我还是有些疑问,在VIM编辑中换行,并且设置vimwiki_list_ignore_newline=0.
    但是转换成html后还是连在一行里面了,不知道有没有人碰到这个问题?
    let g:vimwiki_html_header_numbering = 2
    let g:vimwiki_camel_case = 0
    let g:vimwiki_list_ignore_newline=0
    let g:vimwiki_use_mouse=1

  8. 另外在新建事项:
    * [3] 切换列表项开/关
    * [0] 简单的在 [ ] 和 [X] 之间切换.
    * [4] 所有的列表子项将被适当的切换为开/关.
    * [4] 仅当当前行是列表项时,切换子项.
    * [4] 父列表项将受子列表项的切换影响.
    生成HTML文件时会自动加上checkbox,却不会显示该事项的进度,虽然我设置了let g:vimwiki_listsyms=”01234″,问题依旧存在.
    我想生成如org-mode效果:
    [66%] 新事项
    [X] 该事项已完成
    [X] 同上
    [] 同上
    [ ] 未完成

    • @大尾巴兔, 手动修改autoload/vimwiki_html.vim就可以了,像VimwikiAll2HTML时删除其它文件,o,O新行等操作dev版本好像fix了,或者手工修改吧.你上面的两个问题,我都是通过手工修改的.

  9. 您好:我也遇到“大尾巴兔”的回车不能换行问题以及任务进度问题。可是到底如何来解决呢?看了一下脚本未果,望指点。

  10. ws “Select and open wiki index file”怎么是未知呢?
    这个是在定义了多个vimwiki list的时候在命令行弹出列表让你输入编号选择想要打开的wiki用的。

回复 Leon 取消回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据