Vim[1]加装VOOF插件,实现了带折叠的双栏树状文本管理 [2]/[3],为我几年来的寻找画上了近乎圆满[4]的句号。只须在txt文本的标题行增加 {{{1 {{{2 {{{3 这样的简单标识,利用VOOF就可以生成一个目录树,与正文分居两窗口,实现点击跳转。

上图是善用佳软使用Vim VOOF的实际截屏:两栏;左侧目录可折叠/展开(正文也可以折叠,未采用);点击目录可正文跳转;标题高亮。
下面的视频是使用vim的outliner功能,来写日记的示例。有助于初学者感性认识及理解Vim,内容包括:
- 用fdm=indent实现基于缩进的长文本折叠管理。
- (2分10秒开始) 下载安装VOOF插件。
- VOOF的使用。
- (3分20秒开始)自定义语法文件,高亮标题。
VOOF的安装与使用极为简单,几乎不需要说明。
到Vim官方网站 VOOF 页下载最新版,解压到vim安装目录/vimfiles/下。重启Vim,打开自带的示例文件 simple_outline.txt (可能位于 x:\Program Files\vim\vimfiles\plugin\VOOF_11\),然后在命令行模式键入(注意大小写):
:Voof
并回车,就能看到双栏窗口了。
如果通过鼠标来使用,则与通常的图形化界面outliner并无区别。
如果喜欢键盘操作,只要记住左右 [6]两个窗口之间切换焦点的默认按键是Tab;目录树侧可通过↑↓来移动节点,→←来展开/折叠节点。
默认情况下,需要键入 :Voof回车 来调用VOOF插件。此过程需要注意输入法状态、vim模式、大小写,不算简便。因此,可以自定义热键。
我的选择是映射为 F11 ——选择 F11 是因为数字11的形状与双栏式结构很相像,便于记忆。
具体做法是在 _vimrc 中增加一句 “map <F11> :Voof<CR>”——放到 _vimrc中因为此命令常用。
如果认为 {{{1 这样的字符串也不便于键入,不妨进行自定义。举例如下。
例1:基本做法
imap [1 {{{1
imap [2 {{{2
imap [3 {{{3
实现了插入模式的映射,即键入 [1 可以得到 {{{1 …… 当然,也可用缩写代替映射。
例2:改进做法(推荐)
imap [1 <esc>$a {{{1
map [1 <esc>$a {{{1
功能同上,但不限模式、光标无须准确定位。
例3:Geek做法(供参考)
设定1/2/3级标题,在 MS Word 中的默认热键是 ctrl+alt+1/2/3。按照“不同软件的操作方式尽可能一致”原则,也力争在VOOF中保持同样热键。但是,Vim map 并不支持 ctrl-数字,所以,ctrl+alt+数字也是做不到的。一定要实现?请用万能的AutoHotkey :
上图中的高亮效果,来自如下代码:
标题行突出显示后,{{{1 这样的标示符更加刺眼。能否将之隐藏呢?Vim 当然不会让你失望,只需稍修改上述高亮规则即可。笔者在初学 vim syntax 时,曾苦苦探寻实现方式。而现在,可以直接给出两种做法:
一是利用零宽断言(:h zero-width)让标题不包括{{{\d,代码如下:
syn match zhead0 "^.\+\({{{\d\)\@="
syn match zkey "{{{\d"
二是利用contain参数,代码如下:
syn match zkey "{{{\d" contained
syn match zhead0 "^.\+{{{\d" contains=zkey
对于zkey的隐藏,可以直接设定前景色与背景色相同,但更推荐 hi link zkey ignore 的做法。同理,zhead0 也可以不做直接设定,而是 hi link zhead0 MatchParen 或其他预设风格。
关于 VOOF 与 python:需安装与gVim对应的Python版本。官方的gVim 7.2默认支持Python 2.4。如果你已经安装了其他版本的Python,也可自行编译对应的gVim 或到,其他Python版本可参见这里下载。
[1]: 参见Vim–普通人编辑利器、更多vim文章。
[2]: 关于纯文本资料管理。txt是最简单,也是最基本的文件格式,很多人对它情有独钟。通过软件为长篇txt增加目录功能,一直是某些开发者和用户的梦想,为此,有了《超级小巧的5款免费树状笔记软件》。
[3]: 关于双栏树状结构。我最早是利用 UltraEdit 的 function list 实现长篇txt的目录导航。后来转到 Vim 后,一直试图用tag、folding来模拟此功能,但都不满意。对于较少使用高级文本编辑器的用户而言,双栏树状结构的典型例子是 MS Word 的“文档结构图” [5]。
[4]: 近乎圆满,是因为 Vim 并不适合处理太大的txt文件。当然,这个大小是相对的,与硬件及Vim激活的功能多少有关。
[5]: MS Word 文档结构图是处理长文档极为重要的工具,也是我推荐的Word视图,我在 Word 2003 中调用此功能的“快捷键”是 alt+v d ,可参见 [视频教程] WPS处理长文档的技巧。
[6]: 用户也可以自定义目录窗口的位置:上、下、左、右,及其大小。建议放在默认位置,即左侧。
2009-12-09:改进实现^!1/2/3功能的AutoHotkey脚本。
2009-11-11:补充“4. 隐藏标示符”。
2009-11-09:补充截屏,增加改进部分与Python,算是下篇。
2009-11-06:补充视频,修改并发表,算是上篇。
2009-05-27:长期跟踪vim.org的习惯让我在第一时间发现了刚刚诞生的VOOF。一试之下,赞叹不已!立即在水木社区vim版 发文推荐。
相当完美的解决方案,明天有东西玩了~~
回复
看了前面那篇Outlines,这几天正在琢磨怎么用vim实现,哈哈,xbeta老大这文章发正是时候啊..
回复
“近乎圆满,是因为 Vim 并不适合处理太大的txt文件”
就我使用经验而言,vim打开大文本文件比我用过的其他软件个要快的多,翻屏速度也不卡(主频2.4,内存512M)。也许我打开的文件不算是最大的(文本10M左右)?大家能否推荐一下打开较大快头的文本文件(>10M)的编辑器还有什么?
回复
lodwef: 2009-11-09 17:57
在我用过的编辑器中,百G以上的大文件,大概只有emeditor可以驾驭。
可惜现在40美元的价格稍贵了一点。
回复
I.O.R.I: 2009-11-09 22:16
是贵,一直很想注册一个,奈何价格……
回复
晏然自在: 2009-11-10 06:52
谢谢回复.还好我还不至于用到编辑上G的文本文件(难以想象).vim对我而言足以.深入学习中…
xiaodiega: 2009-11-10 23:15
我用emeditor多年,也很想注册一个…
这个要求要安装 PYTHON,不想安装这个,现在就还是用不了。
回复
输入:Voof,提示缺少python24.dll
回复
ewebull: 2009-11-09 18:13
本机是装了python2.5的。找到了解决办法。
http://www.gooli.org/blog/gvim-72-with-python-2526-support-windows-binaries/
回复
同样缺少python环境,有无相对环保的解决办法?
回复
我装的gvim默认只支持2.4,机器上已有2.6,只好重新编译了一个gvim.exe,比较折腾
回复
您好,善用佳软,可否推荐了桌面便签软件。谢谢!
回复
sean: 2009-11-10 20:52
atnotes 在单位用了1年多,非常稳定
回复
您好,善用佳软,可否写一编文章专门介绍一下vim排版?
【善用佳软:你们说的排版具体指什么?Vim是纯文本纯辑器,几乎没有格式,更无版式。】
回复
Forrest: 2009-11-11 21:55
强烈申请出排版教程
回复
这个不错。不过在视频中找使用后的效果找了好一会儿。希望以后还是弄个截图。
【善用佳软:已补充。】
回复
我的也报缺少python24.dll,怎样解决啊?
回复
lilydjwg: 2009-11-10 04:27
安装python2.4呗。或者(如果已经装有不同版本的Python2.x)重新编译一下,把python2.6编译进去。
最好的解决办法是换Linux,就像我这样。
回复
ibbcall: 2009-11-11 16:05
谢谢了!:)
回复
可不可以把视频中的极点皮肤发给我?(是极点吧)谢谢!
【善用佳软:极点5.2,实际是没有skin,但仍需skin目发和文件,freewb\skin\none\skin.ini 内容如下:】
[状态栏]
状态栏自动定位=1
隐藏状态栏=1
透明度=0
字号=9
候选窗按钮文件名=nofile.ini
图像宽度=75
图像高度=20
文本框top=4
文本框left=20
文本框right=68
文本框bottom=16
状态栏无法自动定位时的位置=0
[候选窗]
候选窗光标跟随=0
汉字候选窗透明度=20
候选项数=2
汉字候选窗字号=12
汉字候选窗圆角弧度=14
汉字候选窗采用单线框=1
候选框使用透明边框=0
汉字候选框式样=3
自动缩放背景图=0
汉字候选使用背景图=0
候选窗背景色=238,238,238
候选窗前景色=0,0,0
候选窗边框色=176,176,255
候选汉字颜色=0,0,0
候选字提示码颜色=47,3,222
自动词组前景色=0,0,0
背景图片文件=no_bmp.bmp
横坐标=105
纵坐标=322
回复
blire: 2009-11-10 22:33
谢谢!
回复
安装了python2.4.3重启后使用正常,感谢xbeta。这也是目前最理想的使用组合了。
为了提高可读性,请教xbeta如何实现以下类似UE的模板效果:
输入Alt+1自动输出下面模板,^为鼠标定位位置
〓〓〓〓〓〓〓〓〓〓
^ {{{1
【善用佳软:
:map <a-1> <esc>O———————-<cr>{{{1<esc>bi
:imap <a-1> <esc>O———————-<cr>{{{1<esc>bi
】
回复
我原本安装的是python2.6
也报了2.4dll的问题,下了一个2.4版本的dll,
dll的错没有,但是还有其他错误,是python interface的问题,重新下载了python-enabled vim的exe替换了,就ok了
回复
lilydjwg: 2009-11-11 05:45
那个应该就是一个重新用python2.6的库编译的Vim了。
回复
http://www.gooli.org/blog/gvim-72-with-python-2526-support-windows-binaries/
这个是vim的替换文件
回复
xbeta可以试试把python24.dll放到C:\Windows\system32下(这是默认位置)或者gvim.exe所在目录。但即使这样还是会有问题:这个插件是Python写的,其中引用了几个Python文件,所以必须安装Python,否则脚本不能运行,就像运行.Net程序必须安装.Net Framework一样。不过Windows版的Vim编译时用的Python版本有点低。
回复
可在 http://sourceforge.net/projects/cream/下载最新的gvim 7.2.284 支持python 2.6.4
回复
博主有办法把 {{{1 这些东西隐藏掉么,比如在语法文件中设置为背景色,同时还要保存之前的标题语法高亮?
【善用佳软:可以。vim能做的事有很多,能个性化的地方更是超乎想象。
把 “^.\+{{{\d” 中的 {{{\d 改为 \({{{\d\)\@= ,这样标题行高亮就不包括这个标识了。
然后,重新定义标识的前/背色相同即可。
相关知识 :h /zero-width】
回复
lilydjwg: 2009-11-11 23:38
还是把标识链接到Ignore组比较好,不然换个配色方案还要重新修改它。
回复
hj: 2009-11-11 23:42
哈哈~~行了 谢谢博主啊 折腾了两天终于比较满意了
回复
可以下载vim的源代码修改成你自己机器上的python版本,再编译一下。
回复
有点不明白为什么善用佳软从来不用带图片的笔记.因为很多教程什么的都有图片.即使学会了,以后也可以拿出来回顾一下.毕竟人的脑袋总有想不起来的一天.
【善用佳软:因为我经常读、经常写,但极少复制下载。】
回复
xbeta,我对笔记的苛刻要求和你简直一模一样,要求用最简单的htm实现文字+图片,同时不影响htm源码的阅读、编辑和树状快速定位(VOOF)。仔细看了前面《我这样记笔记:gvim+。。。》和《大道至简,终于。。。》二文,但对详细实现仍比较模糊,恳请xbeta照顾下我等html半文盲,给一个全面的htm笔记源码模板。在下感激不尽~~~!!!
【善用佳软:讲完基础内容之后,会就此做一个总结。】
回复
要求用最少的htm标识,最直观的文本格式来编辑带图的内容,同时方便地通过gvim来调用浏览器打开阅读,是最理想的笔记了。这里介绍过比较优秀的笔记软件我都用过(正版和盗版),但都不满意,唯有随心所欲的自行控制htm显示,随心所欲的快速自行编辑内容,才是我的最佳笔记方式。
另外我还担心由于htm用到不合规范的源码,导致若干年后的htm笔记浏览器显示有问题,不知道会不会杞人忧天了。
回复
:Voof
显示无法加载库pathon2.4怎么办哪?
回复
弱问一下,在insert模式下怎么移动光标比较方便?方向键太远了?
另外,map :tabnew里面M-t代表什么按键啊?
回复
用gVim来写文章,一个自然段就是一行,常常会碰到由于是文章的一段话,这一行字会特别长的情况,打开自动折行,要好几行甚至十多行才能显示完全。这这种情况下,vim只会在在当前窗口下能把整个段落完全显示的时候,才将其显示;而在不能完整显示的情况,它会用@来代替,请问有没有办法让vim在当前窗口能显示这行字的多少就显示多少,而不要等整行字都能显示时才将其显示出来?谢谢。
附件为截图。
回复
Forrest: 2009-11-27 09:11
本来准备发到你xbeta.info的邮箱里,可是发不过去~
回复
Forrest: 2009-11-27 12:50
查到解决方法:
set display=lastline即可。
另外还可以用gj和gk可以上下移动屏幕显示的一行。
新的问题出现了:如果一行文本有几千汉字时,gVim的支持非常差,右边滚动条滚动和鼠标滚动毫不自然,有时很难凭借滚动来移动到自己想要到的位置。如果用gj和gk来移动,尤如隔靴搔痒,gVim的高效性荡然无存。不知道善用佳软是如何用gVim来操作中文长行的,期待你的回复。
回复
winstarst: 2009-12-27 02:04
老兄,可以试着在模式行中加上set fo+=mM,然后就能自动对中文换行了,注意是真正的换行,不是折行,如果修改后可以用gq命令重新格式化,用起来相当方便。
感谢佳软,一直想在VIM下写日志什么的,但总是觉得管理起来麻烦,以前都是用UE写的,这次终于知道什么是“圆满”了,多谢佳软。
我已经把一年多的日志都合并在一起了,用VIM编写,还可以用X加密,只是文件大了有些慢。
回复
【善用佳软:因为我对Python并不“理解”,并且是很早之前安装的VOOF,所以,现在无法提供细致的解决办法。我争取找一台无VOOF和Python的PC,再试一下问题和解决办法。】
输入“:Voof”报错“无法加载库 python26.dll”
于是跟着文中的介绍下载了“Gvim 7.2 with Python 2.5/2.6 support Windows binaries”(http://www.gooli.org/blog/gvim-72-with-python-2526-support-windows-binaries/),将相应文件替换后还是报相同的错误。
于是下载并安装了python2.6 for windows(http://download.csdn.net/source/676273
),结果还是不行。
很想在用上为善用佳软长期寻找画上完美句号的Voof,可是却被这一问题阻挠,希望能得到你的帮助。
回复
tc: 2009-12-03 20:34
我这里也是一样的,我的VIM是在D盘的
是不是因为这个问题啊?
希望佳软件解决下
谢谢了
回复
tc: 2009-12-04 10:26
找到原因了,安装python之后,要在系统环境变量把它的路径加入,让vim可以找到它。就解决了你的问题,再谢谢佳软
回复
Voof的这个方法是不是有问题,当你要记录的文本里面本身就含有{{{n的时候,tree就乱了。
对于想对一些程序或者数学公式做笔记的人来说,{{{n出现的概率太大了。
回复
winstarst: 2010-01-31 23:02
可以自己定义标识符的,比如换成<<<
回复