Vim 7.3正式版:新功能介绍(附视频、中文帮助文件)

2010年8月15日,超级经典的文本编辑器 Vim(官网介绍) 发布了 7.3 正式版。本文试对Vim 7.3的一些特性进行分析和直观介绍。欢迎Vim爱好者补充指正。
gvim: text editor

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等。

《Vim 7.3正式版:新功能介绍(附视频、中文帮助文件)》有51个想法

  1. 请问善用佳软大侠:能否推荐一款excel文档内容搜索器啊?
    要能象search and replace那样可以显示被搜到处的文件内容的,那样就不必一一去打开文件看了。

  2. 关于:
    7 成本:修改调用gvim的配置,把vim72改为vim73b。

    应该:
    在path中设定gvim.exe的路径,然后,引用处直接写gvim.exe。在快捷方式中测试成功;TC中不太成功。

  3. 相对行号和持久性撤销不错
    本想做个进入visual自动切换相对行号的au ,结果发现au居然没有这个event.

    只能修改键位.如下:

    ” v and C-Q with relative number toggle
    noremap :set rnu
    vnoremap :set nu
    noremap v :set rnuv
    vnoremap v v:set nu

    1. 《》都被隐藏了。。
      noremap 《C-Q》 :set rnu《cr》《bar》《C-Q》
      vnoremap 《C-Q》 《C-Q》《bar》:set nu《cr》
      noremap v :set rnu《cr》《bar》v
      vnoremap v v《bar》:set nu《cr》

  4. 请问xbeta兄,如果我把vim7.3直接覆盖安装到vim7.2,vim7.2的中文帮助文件是否可用,或者有没有vim7.3的中文帮助文件?
    另外,通过您的博客的介绍,我也在用voom,对隐藏文字也很感性趣(虽然不是非常必要),相对行号也不错

    1. vim升级很智能,程序目录与用户目录区分得非常清楚。直接升级后,原中文帮助文件仍能使用。只不过新版未翻译部分是缺失的。
      目前应该没有vim7.3中文帮助,这种事要靠志愿者翻译。

  5. 我在你这里逛了一圈又一圈,除了介绍VIM就是notepad++,能不能多介绍几款文本编程工具,最好是免费的。

    我在这里也给你说几款编程工具吧,RJ TextED,PSPad,notepad2 v4,在我的具体使用过程当中,各有各的特点和缺点,RJ TextED和PSPad对我的某些文件过敏,不认识,但这些简单的文件连notepad.exe都能处理,简直不敢相信。还有一个notepad2 v4,汉化过的,也正在使用。我还用过其它很多的编程工具,都不能正确处理中文或者utf-8编码问题,只有notepad.exe和editplus能处理。

    也希望借助你的这个平台,能找到适合我使用的编程工具。

    PS:实在找不到可以留言的地方了,先发到这里吧,about页面好像也不能给你留言哟。

  6. tearoff 菜单失效,是不是忘记加了,tearoff就是菜单下拉剪刀菜单VIM7.3已经失效,VIM7.2的可以浮动的,开发人员忘记了

    1. 已经验证是中文系统的问题,估计它直接按中文字符去找菜单名称去了
      安装是不选择本地语言支持选项就可以解决,不过菜单和提示就是英文的了

  7. 你好,博主,我想请教一个问题:
    我从网上复制的内容然后粘贴到gvim中的时候,基本上每行开头都会按原网页上的空两格,但这两格不是普通的空格,我查找了一下,用%s/^s*//g无法进行替换,不知道是什么原因造成这样的?有没有什么好的解决方法?

    (xbeta注:复制这两个字符,到替换命令中。 )

    1. 你这个方法行。有没有可以实现定义成快捷键的方法的?因为如果我每篇文章都这样的话,太麻烦了,所以想请教一下有没有可以定义成快捷键的方法。或者说这两个字符有没有什么代码可以表示的?感觉感谢

  8. 请问gvim 7.3下如何实现右键新标签打开文本,搜索出来改注册表的方法都是7.2的,xp下打开文件是空白的。

    (xbeta注:不明白意思。资源管理器右键菜单?vim中点右键?
    我是TC用户,在Total Commander中按F4对选中文件新标签打开。 )

  9. 对这个很感兴趣,就是不知道从何处开始学起,现在还没有真正的入门,请高手推荐学习材料,不胜感激!

发表评论

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