西卡107防水防水怎么做:VOoM(原VOOF):vim实现带折叠双栏树状文本管理 | 善用佳软

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 13:09:29
VOoM(原VOOF):vim实现带折叠双栏树状文本管理
重要说明:自v4.0开始,VOoM支持html、vimwiki、wiki等格式的标题,本文有待更新。
Vim[1]加装VOoM插件,实现了带折叠的双栏树状文本管理[2]/[3],为我几年来的寻找画上了近乎圆满[4]的句号。只须在txt文本的标题行增加 {{{1、{{{2…… 或其他自定义的简单标识,利用VOoM就可以生成目录树,与正文分居两窗口,实现光标点击跳转,以及对节点的层级、顺序管理。即,VOoM让txt成为最通用的资料库,让Vim成为最方便的个人信息管理软件。
一、VOoM界面预览及视频演示:界面、视频
二、VOoM基本教程:安装、python支持、基本操作
三、高级使用:改进VOoM:快捷调用、更快捷定义标题行、高亮标题行并隐藏标识符、自定义标识符、在html中变通使用
四、总结
附录:注释、文章更新历史
一、VOoM界面预览及视频演示
1. VOoM界面预览

上图是善用佳软使用Vim VOoM的实际截屏,从中可以看到如下特点:
* 两栏;
* 左侧目录可折叠/展开(正文也可以折叠,本例未采用);
* 点击目录可实现正文跳转;
* 标题高亮。
2. VOoM视频演示
下面的视频是使用vim的outliner功能,来写日记的示例。有助于初学者感性认识及理解Vim,内容包括:
* 用fdm=indent实现基于缩进的长文本折叠管理。
* (2分10秒开始) 下载安装VOoM插件。
* VOoM的使用。
* (3分20秒开始) 自定义语法文件,高亮标题。
需要说明的是视频中未能展示节点管理(改变层级、调整顺序)功能。
',1)">
二、VOoM基本教程
1. 安装VOoM
VOoM插件的安装与使用极为简单,有基础者可以略过本段。
* 到Vim官方网站VOoM主页下载最新版:http://www.vim.org/scripts/script.php?script_id=2657 。
* 解压到vim安装目录/vimfiles/下。
* 重启Vim。
* 打开自带的示例文件 simple_outline.txt (可能位于 x:\soft\Vim\vimfiles\voom_samples\)。
* 在命令行模式键入(注意大小写):Voom 并回车。
如果顺利,现在就能看到左侧的树状目录了。
如果不顺利,很可能是需要Python支持,见下。
2. VOoM 与 python
VOoM 之所以基于 Python,完全是出于效率:Python扫描文本正文发现fold marker的速度,大约是vim脚本的10倍。作者在帮助文档的“Why VOoM uses Python”一节,给出了详细的测试代码和测试结果。
所谓 VOoM 需要 Python支持,具体包括两方面:
① GVIM.exe 支持 Python;
② 系统中安装有对应版本的Python环境。
条件①通常具备,因为官方发布的gVim默认是支持 Python的。
条件②可能会有些问题:如果你没有安装Python,这时就需要根据gvim的版本,安装合适版本的Python:gvim7.2需要Python 2.4,gvim7.3需要Python 2.7。安装Python时最好在C根目录。如果你的Python版本与gvim版本不对应,一种办法是换用正确版本的Python;一种办法是重新编译gvim,让它支持你已经安装的Python版本(不会编译的请到这里下载)。
为了这样一个插件而安装Python,对普通用户是否值得?这是一个爱屋及乌、见仁见智的问题。笔者不做程序开发,安装JRE是因为FreeMind;安装.Net是因为EverNote v3.5;安装Python是因为VOoM与UltiSnips;安装Ctags、taglist是因为TxtBrowser……
3. VOoM 基本操作
鼠标方式:Vim并不排斥鼠标。如果想用鼠标操作VOoM,则它与类似软件并无区别,无须解释。
键盘方式:Vim的长处还是键盘。要点如下,详见帮助文档。
1. 基本操作之Tab:在左右[6]两个窗口之间切换焦点;
2. 基本操作之跳转到目录:在目录树侧,可通过↑↓来打开正文的相应位置,→←来展开/折叠父子节点。
3. 节点基本操作:在目录树buffer中,如下快捷键可用:
i I a A:修改当前节点标题行。
i、I:在当前节点前、后插入新节点。(LocalLeader默认为\,也可自定义)
ctrl+方向键:上下移动节点(调整顺序);左右移动节点(调整级别)。
dd yy pp:删除、复制、粘贴节点。
三、高级使用:改进VOoM
1. 更快捷调用VOoM
默认情况下,需要键入 :Voom回车 来调用VOoM插件。此过程需要注意输入法状态、vim模式、大小写,不算简便。因此,可以自定义热键。
我的选择是映射为 F11 ——选择 F11 是因为数字11的形状与双栏式结构很相像,便于记忆。
具体做法是在 _vimrc 中增加一句 “map :Voom”——放到 _vimrc中因为此命令常用。
2. 更快捷定义标题行
如果认为 {{{1 这样的字符串也不便于键入,不妨进行自定义。举例如下。
例1:基本做法
imap [1 {{{1
imap [2 {{{2
imap [3 {{{3
实现了插入模式的映射,即键入 [1 可以得到 {{{1 …… 当然,也可用缩写代替映射。
例2:改进做法(推荐)
imap [1 $a {{{1
map [1 $a {{{1
功能同上,但不限模式、光标无须准确定位。
例3:Geek做法(供参考)
设定1/2/3级标题,在 MS Word 中的默认热键是 ctrl+alt+1/2/3。按照“不同软件的操作方式尽可能一致”原则,也力争在VOoM中保持同样热键。但是,Vim map 并不支持 ctrl-数字,所以,ctrl+alt+数字也是做不到的。一定要实现?请用万能的AutoHotkey :
^!1::
IfWinActive, ahk_class Vim
{
sendinput {esc}$a {{}{{}{{}1
}
else
sendplay ^!1
return
3. 高亮标题行、隐藏标识符
为实现高亮效果,可以使用如下syntax代码:
syn match zhead0 "^.+{{{d"
hi zhead0 gui=bold guibg=black
syn match zhead1 "^.+{{{1"
hi zhead1 gui=bold guifg=red guibg=black
syn match zhead2 "^.+{{{2"
hi zhead2 gui=bold guifg=green guibg=black
syn match url "S*://S*"
hi url guifg=lightblue gui=underline
但是,标题行突出显示后,{{{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 或其他预设风格。
4. {{{2 标识符的自定义等
{{{1、{{{2……这样的标识符用来表示标题。VOoM称之为“起始折叠标记”(start fold marker),它是通过 foldmarker 选项来定义的。比如 set fmr=<<<,>>> 或 set fmr=[[[,]]] ,这样就可以使用 <<<2 或 [[[2 来表示二级标题。
另外,除了数字表示级别外,还可以紧跟如下字母(及组合):x 表示标记(目录树第二列显示x),可用来标出某些重要标题。= 表示起始节点,即:Voom时的起始节点。o 表示open,即该目录树完全展开。除了在标题行直接增加这些标记外,也有相应快捷键操作。
5. 在html中变通使用vim-VOoM
工具固然有好坏之分,但多数情况下,用户应用水平对最终效果的影响更大。而学会变通使用,闻一知二、举一反三,是显著提升应用效果的关键。
txt需要额外标记才能使用VOoM,而html是已经附有标记的、扩展后的txt。其中,标题行以及层级已由h标签进行了标示。所以,理论上,html应该可以“不加修改”、“快速”使用VOoM功能。
所谓好工具,就是理论上应该能做到的事,实际上也能做到。对着VOoM想一下,答案有了!
实现方法:很简单,只须设定
:set fmr=再:Voom 即可(对于自己的html笔记文档,可增加modeline)。

上述操作效果如图。美中不足的是,目录行首的h起始标签有些碍眼。
最理想的效果参见此文,通过修改voom.py(v2.0)中第59行开始的函数:def makeOutline(body, lines),在 74 行之后,增加如下两行:
del_html_re = re.compile('<.*?>')
tline = del_html_re.sub('', tline)
把html标签全部清空即可——此修改当然有副作用,所有尖括号内容均被忽略,请慎用!感谢 vfantasie @ newsmth.net 网友提供上述代码,相关讨论参见此处。
四、总结
如果说Vim是单一txt文件编辑利器,Vim加wiki类扩展则实现了多个txt的管理,那么VOoM就实现了以txt为文本资料库的管理。凭着Vim方便的加密、查找、替换、语法高亮、折叠功能,再加上VOoM的树状管理,我自己认为找到了理想的文字笔记管理方案。
附录:注释
[1]: 参见Vim--普通人编辑利器、更多vim文章。
[2]: 关于纯文本资料管理。txt是最简单,也是最基本的文件格式,很多人对它情有独钟。通过软件为长篇txt增加目录功能,一直是某些开发者和用户的梦想,为此,有了《超级小巧的5款免费树状笔记软件》。
[3]: 关于双栏树状结构。我最早是利用 UltraEdit 的 function list 实现长篇txt的目录导航。后来转到 Vim 后,一直试图用tag、folding来模拟此功能,但都不满意。对于较少使用高级文本编辑器的用户而言,双栏树状结构的典型例子是 MS Word 的“文档结构图”[5]。
[4]: 近乎圆满,是因为 Vim 并不适合处理太大的txt文件。当然,这个大小是相对的,与硬件及Vim激活的功能多少有关。 更新:而VOoM处理长文本,也会较占资源,主要是扫描正文生成outline。VOoM作者的2002年旧电脑(1.6GHz Pentium 4 Mobile)上,附带的 calendar_outline.txt (3.2 Mb, 56527 lines, 4160 headlines)会在更新后有明显停顿(小于1秒)。但要说明的是:仅阅读跳转仍然流畅;减少标题行能大幅度提高效能。总之,我相信当前情况下,10MB txt,上千个节点是可以正常使用的。
[5]: MS Word 文档结构图是处理长文档极为重要的工具,也是我推荐的Word视图,我在 Word 2003 中调用此功能的“快捷键”是 alt+v d ,可参见[视频教程] WPS处理长文档的技巧。
[6]: 用户也可以自定义目录窗口的位置:上、下、左、右,及其大小。建议放在默认位置,即左侧。
附录:文章更新历史
2010-09-16:感谢知无兄协助更新本文。
2010-04-18:VOOF改名为VOoM;html利用h标签更完美。
2010-03-24:补充目录、总结。
2010-03-20:补充在html中利用h标签,实现目录的做法。
2010-03-03:全面更新文章;VOOF升级到v1.92。
2009-12-09:改进实现^!1/2/3功能的AutoHotkey脚本。
2009-11-11:补充“隐藏标示符”。
2009-11-09:补充截屏,增加改进部分与Python,算是下篇。
2009-11-06:补充视频,修改并发表,算是上篇。
2009-05-27:长期跟踪vim.org的习惯让我在第一时间发现了刚刚诞生的VOOF。一试之下,赞叹不已!立即在水木社区vim版发文推荐。
您可能也喜欢:
[投稿]Pkm工具:Vimwiki
试着开始 gVim 系列?(更新视频到更高清晰度)
支持非等宽字体、屏幕取词的gvim v7.3
笔记: gvim同时处理中日韩文
vtano.ahk:GVIM+AHK实现顶层透明笔记本
gvim打印乱码问题的讨论
来自无觅网络的相关文章:
(@ipc) Net2FTP网页版的FTP客户端 (在网吧或任何地方均能管理文件了)
(@ipc) 8
(@ipc) PowerTool 国产免费的内核级进程与系统管理器
(@ipc) 好用的硬盘搜索软件-快易搜(EeAdd) v1.3 免费正式版下载
(@ipc) TXT杀手最终版下载 - 小巧方便的txt文本分割工具
(@iplaysoft) Doit.im 多平台免费网络同步GTD软件 (行程/记事提醒/工作安排/任务管理)