2010年8月15日,超级经典的文本编辑器 Vim(官网|介绍) 发布了 7.3 正式版。本文试对Vim 7.3的一些特性进行分析和直观介绍。欢迎Vim爱好者补充指正。
1. Vim 7.3 新特性总体介绍
1.1 Vim 7.3 下载
gVim 7.3 Windows直接下载:http://ftp.vim.org/pub/vim/pc/gvim73.exe
更多下载:http://www.vim.org/download.php
1.2 升级安装注意事项
– 安装程序会自动卸载旧版Vim:如果你不放心,也可暂不卸载。
– 安装程序会询问是否保留vimfiles:当然要保留!
更新:中文帮助文件
Vim 7.3 的中文帮助文件已经发布,下载、使用如下:
– 下载:链接。
– 解压到合适路径,如 d:\soft\Vim\vimfiles\doc\
– 更新帮助文件的tags,如::helptags d:\soft\Vim\vimfiles\doc\
– 测试新特性的中文帮助,如 :h ‘rnu’@cn
1.3 官方重点强调的新特性:
The biggest additions since 7.2:
– Persistent undo, undo for reload
– Blowfish encryption, also encrypt the swap file
– Conceal text (note: since 7.3a ‘conc’ was renamed to ‘cole’)
– Lua interface
– Python 3 interface
1.4 更多新特性
请在安装新版Vim后,运行 :ver 查看。
2. 隐藏文字(Conceal text)
Vim支持语法高亮,有的语法高亮需要一些额外的标注符,它们并不是文本内容的一部分。比如用VOoM实现带折叠的双栏树状文本管理时,需要用 {{{1、{{{2 这样的符号表示标题级别。这些额外的标注符,最好比较低调。比如,上文就采用了零宽断言(:h zero-width)或contain来区分标注符,然后用link 到 ignore(文字前景色=背景色)的方式来“不显示”。但这里的不显示,只是一种前背景同色的障眼法。相比之下,Vim 7.3的conceal text具备了更强大的功能;某种程度上,相当于inline folding。
2.1 conceal text 功能介绍
Conceal text,直译为“隐藏文字”。不过,译为“可隐藏文字”更符合原意。因为,它的最终效果——是否隐藏、如何隐藏——取决于如下属性/参数:
① syn命令的conceal参数
语句:sy match test_conceal “(善用佳软.*)” conceal
表示:括号内以善用佳软开头的字符串,命名为 test_conceal 组,具备了conceal属性。
更多参见::h conceal
② conceallevel(简称cole)选项值
具备conceal属性的字符串,并不一定是隐藏的。其具体表现取决于conceallevel的值。
☆ 0:默认值,显示。 因此,只设定conceal,并没有任何隐藏效果。
☆ 1:短线高亮。 匹配的字符串缩略显示为一个“-”符号(取决于listchars设定),并采用conceal组的高亮方案。
☆ 2:不显示,除非定义了cchar变量。 举个例子就明白了,如下语句
:syntax match Entity “&”?conceal cchar=&
可以把实体字符显示为原字符,更易于阅读。
☆ 3:完全不显示。
更多参见::h cole
③ concealcursor(简称cocu)参数
该值默认为空,效果就是无论如何隐藏,当光标位于该行时,conceal文字仍会显示。
如果想取消此效果,可设定相应值:n v i c。vim帮助文件中的设定值为nc。
更多参见::h cocu
2.2 conceal text 应用举例
上面的文字已经隐含了两个例子:
– 任何额外标记符的隐藏,如Voom中的 {{{1。还可扩展到vim的帮助文件、vimwiki……
– html源代码中,实体字符的还原显示。
我能想到的例子:
– 用来背单词。比如把英文单词后面的所有释义设为隐藏;光标移在该行时,再显示释义。
– txt格式的读书笔记:参见下面的视频。
– 隐藏 xml/html 标签,只显示文字。示例:
1、如下内容保存为 d:\1.vim
sy match tag_conceal “<.\{-}>” conceal
se cole=3
2、打开html文件,再 :so d:\1.vim ,成功:所有html tag标签隐藏,只显示文字。
3、副作用是原html高亮失效,或许通过其他conclude, transparent参数能控制,但无精力/兴趣继续研究。
3. 相对行号(’relativenumber’ ‘rnu’)
以前,输入 :set nu 会显示行号;现在,输入 :set rnu 会显示相对行号。
所谓相对行号,就是光标所在行为第0行,然后,向上向下分别1、2、3……行标示。
其主要用途,可方便计算移动距离。
但由于翻页/滚屏时,当前行会移动,所以,相对行号只能在一屏内使用。
操作方法:
:set rnu
:set nornu
(nu与rnu不能同时使用)
更多说明::h rnu
4. 彩色列(colorcolumn)
例1:
:set cc=10,20,30
表示把第10、20、30列,进行高亮。
例2:
:set cc=-20,+10,120
表示把 textwidth-20、textwidth+10、第120列,进行高亮。
例3:
:hi colorcolumn guibg=lightgreen
定义高亮列为亮绿色。
功能说明:
– cc列标可以是绝对值,也可以是相对值,如例2所示。
– 会降低屏幕刷新速度。
– 对换行、中文,可能会不连续。
使用说明:
– 我觉得colorcolumn有一个最实用的功能,set cc=81,可以提醒自己写得代码别超过80列 (by ankyhe)
5. 持久性撤销 (更新)
功能介绍:
Vim此前的撤销(u: undo)功能,与大多数软件一样,局限于本次打开文件后所做的编辑。而Vim 7.3新增的持久性撤销(persistence undo),即使文件多次关闭又重新打开编辑,所有的修改都可以u还原回去(当然不能超过’undolevel’的限制)。
相关参数:
– :set undofile。 undofile(udf),缺省关闭,局部于缓冲区。设定后,Vim 在把缓冲区写入文件时,自动保存撤销历史到撤销文件。读入文件到缓冲区时,自动恢复撤销历史。
– ‘undolevels'(‘ul’):可以撤销的最大改变次数。缺省为100或1000。例 set ul=500。
– 指定 undodir。’undodir’指定撤销文件存放的目录。默认是当前目录,为全局变量。 undodir可以是目录名列表,以逗号分隔,格式参见 backupdir。但是,在写入时,会使用第一个存在的目录。因为 “.” 总是可用, 所以”.” 之后的目录不会用来写入。在读取修改历史时,会查找所有的项目来寻找对应的撤销文件,并使用第一个找到的撤销文件。如果该文件不可读,报错,但不再继续查找。
关于撤销文件:
文件名:”.” 代表文件所在的目录。此时,”file.txt” 对应的撤销文件名是 “.file.txt.un~”。如使用其他目录,撤销文件名是被编辑文件的完整路径,但路径分隔符以 “%”代替。
文件保护:撤销树文件中会包含这个文件内容的hash值,这样当一个文件有了撤销树文件后,如果它被其他程序编辑过,Vim会忽略撤销树文件,而不会因此让撤销使文件乱掉。
不会自动删除: 目前Vim只会去创建撤销树文件,而永远不会去删除它们,需要手动删除。因此,我只好把它们放到自己的tmpfs临时目录中,关机自动清除好了。
原有命令的增强:earlier和:later:
这两个命令也增加了一个单位:f——写入次数。比如说,我打开了一个配置文件,编辑N久,保存并测试后不满意,想恢复到原来的样子。怎么办呢?以前我会一直按着u键直到Vim告诉我不能撤销了,或者用备份文件(*~)来覆盖当前文件。现在可以使用命令:earlier 1f直接恢复到上次写入时了。
如何只对某些类型的文件启用undofile:
-通过 BufReadPre autocmd 方式进行设定。
-使用现成的 undofile.vim 脚本。
6. +cursorbind
在比较文件的时候,有个scrollbind功能,可以让被比较的文件同步滚动。但是,在之前的版本中,光标经常并不在同一行。从一个窗口跳转到另一个窗口时,我经常找不到光标的位置了。。。现在好了,有了这个特性,光标的位置也同步了。
7. 是否升级到Vim 7.3的考虑
收益:
– 客观上,提供了新特性;
– 主观上,需要判断这些新特性是否是自己所需要的。
成本:
– 下载、升级;
– 修改gvim路径,从vim72改为vim73。比如:TC中F4编辑器的设定;再比如win+r某些快捷方式的属性(“D:\soft\Vim\vim73\gvim.exe -p –remote-tab-silent f:\now\now\now.htm”)。更好的设置方式是把gvim.exe所在目录写入path变量,在引用时不加路径,直接写为gvim.exe(可以带参数)。
– python兼容性问题。vim7.2对应python2.6,而vim7.3默认需要python2.7,如果某些扩展需要python支持,则需要升级python。
我的建议:
总有一款程序让你如此信任,而随着它同步升级。对我而言,Vim就是如此。
附:视频演示-Vim 7.3 新特性之Conceal text、rnu、cc
用Wink录制的flash演示:492×451, 100+KB.
如无法查看,请检查浏览器设置,或在这里下载附件。
附:文章更新历史
2012-06-07:补充 隐藏html标签。
2010-08-16:更新至 vim 7.3 正式版;补充 undofile.vim 脚本;补充中文帮助。
2010-08-01:初稿。
鸣谢:依云、ankyhe、yeskky等。
发表回复
要发表评论,您必须先登录。