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等。
《 “Vim 7.3正式版:新功能介绍(附视频、中文帮助文件)” 》 有 51 条评论
请问善用佳软大侠:能否推荐一款excel文档内容搜索器啊?
要能象search and replace那样可以显示被搜到处的文件内容的,那样就不必一一去打开文件看了。
这个编辑器很强大
7.3c发布了
http://ftp.vim.org/pub/vim/unstable/pc/gvim73b.exe
不好意思地址错了
7.3c发布了
http://ftp.vim.org/pub/vim/unstable/pc/gvim73c.exe
用这个,但是正版很贵
powergrep.com
绝大多数人都用不上的好软件
等正式版把,7.2用的很好了。
关于:
7 成本:修改调用gvim的配置,把vim72改为vim73b。
应该:
在path中设定gvim.exe的路径,然后,引用处直接写gvim.exe。在快捷方式中测试成功;TC中不太成功。
能不能把Everything和vim结合起来呢?
源码库里今天已经到7.3d了
7.3c 好像文件关联打开有问题, 关联打开内容是空的
相对行号和持久性撤销不错
本想做个进入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
《》都被隐藏了。。
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》
《bar》要改成《esc》
set nu
set rnu
怎么才能同时显示
请问xbeta兄,如果我把vim7.3直接覆盖安装到vim7.2,vim7.2的中文帮助文件是否可用,或者有没有vim7.3的中文帮助文件?
另外,通过您的博客的介绍,我也在用voom,对隐藏文字也很感性趣(虽然不是非常必要),相对行号也不错
vim升级很智能,程序目录与用户目录区分得非常清楚。直接升级后,原中文帮助文件仍能使用。只不过新版未翻译部分是缺失的。
目前应该没有vim7.3中文帮助,这种事要靠志愿者翻译。
谢谢您的解惑!~
新的来了
http://ftp.vim.org/pub/vim/unstable/pc/gvim73d.exe
果然是福音啊,持久性撤销
正式版来了 ftp://ftp.vim.org/pub/vim/pc/gvim73.exe
呵呵,虽然不是Vim爱好者,也来支持一下。
vim我只用了它的%1都觉得很强大了
打倒VIM,恢复中华。
围观一下。7.3的新特性感觉不错,彩色列功能用来检查代码缩进很爽
想问一下,这个7.3的中文帮助能用在LUNIX下么?
真的很强大!
文章写得很不错,很有新意。顶一个!
有空在说 继续7.2…
老实说,VIM真的很难入门。但或许入门了以后就会好了。一如N前学的五笔吧,现在已经开始受益了。有的时候,学习或许就是一种坚持。
Xbeta:能不能征集一个比较适合大多数人的配置文件啊?配置貌似很复杂
哈哈,更新了,太好了。
我在你这里逛了一圈又一圈,除了介绍VIM就是notepad++,能不能多介绍几款文本编程工具,最好是免费的。
我在这里也给你说几款编程工具吧,RJ TextED,PSPad,notepad2 v4,在我的具体使用过程当中,各有各的特点和缺点,RJ TextED和PSPad对我的某些文件过敏,不认识,但这些简单的文件连notepad.exe都能处理,简直不敢相信。还有一个notepad2 v4,汉化过的,也正在使用。我还用过其它很多的编程工具,都不能正确处理中文或者utf-8编码问题,只有notepad.exe和editplus能处理。
也希望借助你的这个平台,能找到适合我使用的编程工具。
PS:实在找不到可以留言的地方了,先发到这里吧,about页面好像也不能给你留言哟。
tearoff 菜单失效,是不是忘记加了,tearoff就是菜单下拉剪刀菜单VIM7.3已经失效,VIM7.2的可以浮动的,开发人员忘记了
我也有这样的问题,请问有办法解决么?
还真是….哈哈, 因为从来没用过这个功能,所以不介意.
已经验证是中文系统的问题,估计它直接按中文字符去找菜单名称去了
安装是不选择本地语言支持选项就可以解决,不过菜单和提示就是英文的了
@tearoff, gVim 7.3 中英文字体分别设置为微软雅黑与Consolas | 狂飙
http://networm.me/gvim-font.html
把这句加到_vimrc中,比较方便菜鸟
“拖放文件,自动在新标签打开
autocmd BufAdd *.* :tabnew “%a”
有点bug
autocmd BufCreate *.* :tabnew “%a”
这个稍好点
初次用了v7.3 版本, 以前没有用过, 哪位朋友有相关的入门教程(中文版),请发一份给我,谢谢.
对了 , 留下邮箱:asp.neter@qq.com
你好,博主,我想请教一个问题:
我从网上复制的内容然后粘贴到gvim中的时候,基本上每行开头都会按原网页上的空两格,但这两格不是普通的空格,我查找了一下,用%s/^s*//g无法进行替换,不知道是什么原因造成这样的?有没有什么好的解决方法?
(xbeta注:复制这两个字符,到替换命令中。)
你这个方法行。有没有可以实现定义成快捷键的方法的?因为如果我每篇文章都这样的话,太麻烦了,所以想请教一下有没有可以定义成快捷键的方法。或者说这两个字符有没有什么代码可以表示的?感觉感谢
你确定是两个文字的话
map :%s/^..//g
试试
map <F2> :%s/^..//g
上面都是半角字符,大家都懂的
请问gvim 7.3下如何实现右键新标签打开文本,搜索出来改注册表的方法都是7.2的,xp下打开文件是空白的。
(xbeta注:不明白意思。资源管理器右键菜单?vim中点右键?
我是TC用户,在Total Commander中按F4对选中文件新标签打开。)
谢谢回复;
是资源管理器中的右键菜单;
7.3默认的那个右键菜单“用vim编辑”是在新窗口打开的。
持久性撤销很好的东西,受教了
对这个很感兴趣,就是不知道从何处开始学起,现在还没有真正的入门,请高手推荐学习材料,不胜感激!
[…] Vim 7.3正式版:新功能介绍(附视频、中文帮助文件) | 善用佳软. 分类: vim 标签: 本文的评论功能被关闭了. MetaPost hoamon’s sandbox: 可怕的 VIM 订阅 […]