2005年5月,我开始用Vim。此后渐入佳境,原来因版权自律而放弃盗版UltraEdit的遗憾一扫而空。并且,从Vim我才体会到,什么才是真正的编辑利器。在善用佳软或其他论坛发文,我都是先在Vim中输入,并方便高效地编辑好格式,再贴到网上。而我的通讯录、记事、读书笔记、工作记录也是在Vim中完成的。包括一些文档、数据的处理,让Vim过一下,也会提高不少效率。一句话,自用Vim以来,对它迷恋日深,几乎要超过Total Commander。但是,正如善用佳软及论坛发文所提,我大力推荐“用IrfanView/XnView代替ACDSee、用7-zip代替WinRar/WinZip、用GIMP代替PhotoShop”,但并未推荐Vim代替UltraEdit。这并不意味着Vim不能胜任,恰恰相反,如果说IrfanView等替代品比原共享软件还有些差距的话,Vim则远胜UltraEdit。不推荐的唯一原因是,Vim对初学者有点难。
但今天仍写了此文推荐给大家。原因有二:其一,编辑大人选定了题目,要向大众宣讲Vim和Emacs,这种勇气鼓舞了我。其二,已发两位高手的文章(王垠之《Emacs是一种信仰!世界最强编辑器介绍》,Dieken之《程序员的编辑器——Vim》)可能会吓住一些对它们产生了兴趣的人,对此我要做些修正。 因此本文内容有二:一是帮新手体验Vim。这部分有些象实验教程,多用实例,且行文风格尽量傻瓜化,以便于新手(包括以前从未听说过Vim)可以照我的操作,一步步体验Vim。二是介绍我的应用,即Vim如何便利我的日常工作和生活,而非编程。 1 对Vim的基本介绍 一句话介绍就是:Vim是一个超级超级强大的文本编辑器。它和Emacs是一个数量级;而我认为,比UltraEdit、Editpad、EmEditor要高一个(至少半个数量级)。如果你有兴趣,不妨一读《程序员的编辑器——Vim》,以便于对Vim有更详尽全面的理论认识。 要点1:Vim及前身VI,历史悠久(可能比多数读者的年龄更大),经历了几十年的考验和发展,值得信赖。 要点2:Vim有模式。通俗地做一下对比。notepad无模式(或称为只有一种编辑模式),你按下j,就是在正文中输入j;要保存,就要ctrl+s;要下移一行,就要↓或鼠标。而在Vim中,打开一个文件后,并不处在编辑模式,而是Normal模式,此时你按j,Vim并不认为你要在正文中输入j,而是代表光标下移一行。此时按i表示进入insert模式,即编辑模式,即notepad的模式。编辑模式按Esc退回normal模式。normal模式下按:进入命令行模式,用于输入较复杂的命令。比如:w代表保存文件,:e a.txt代表打开文件a.txt。即Vim可以不用鼠标、方向键、菜单、Ctrl、alt……发出命令。因此,以下的体验中切记进入正确的模式:Esc到Normal;Normal下i到编辑;Normal下:到命令行。再说明一点是:文中:打头的是命令行模式,此外多数Normal模式。 要点3:复杂对抗复杂。Vim有的命令行很吓人,长长一串字符恍若天书。这些貌似复杂,实际上无非是一些简单命令的组合而已。借助于此,Vim用户可以实现非常复杂的需求。如果你没有这样的需求,就无须理会它们。 要点4:一能百能。这一点是Unix或命令行风格软件的显著长处,经过实用可以深刻体会。本文尽管有一些例子,但它运用之妙,存乎一心的感觉,仍未能充分展示。这里先打个比方,如果windows下某软件号称能炒菜,那意味着你点一下菜单,菜就做好了——这就是易用哲学。到底怎么做,你是没有多少发言权的,而是由软件开发者固化。而如果Vim说能,那它就是有一个“炒菜”命令,你可以把这个命令与原有的“原料”“数量”“火候”“风味”“灶具”命令结合在一起用,甚至在它前面加上“买菜”“洗菜”,后面加上“装盘”“洗碗”做成一个自动脚本,在合适的情况下自动执行。 要点5:无限灵活,个性由我。你只要有具体需求,Vim几乎都能满足。因此不同人的Vim是不一样的,即,把下载来的Vim配置成自己的Vim。 就此打住,开始体验之旅吧! 2 下载和安装 Vim是跨平台的。在Windows下,我们用的是gVim for windows版。最新的是7.0版,下载包约8MB,完全安装后约20MB。 注:体积太大?你如果是高手,完全可以把不用的文件删除(包括帮助文件,它是我见过的软件中最好的帮助),精简后的体积可以不到2MB。或反之,仅下载一个gVim.exe(1.5MB)就能运行。但对于这次体验,鉴于第一次使用,建议全部按默认项安装,这样才能达到文中预想的结果。 PCOnline下载,官方下载 安装,基本上,一直Agree、Next就行了。我通常是装在d:\program files\Vim下。 可参见 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 3 体验之旅 3.1 初见界面 安装完成后,按提示打开readme,你将看到 ![]() 或自行打开桌面的快捷方式,也可直接运行d:\program files\Vim\Vim70\gVim.exe,你应该看到如此界面: ![]() 什么?难看?土?我第一次见到它也是这种感觉,现在却只觉得亲切。 再一点,你有没有奇怪它是中文界面?难道我给你下载的是汉化版?会不会捆绑流氓插件啊?你如果真这样想,我只能叹息无语了。 3.2 试读html 请把此网页保存为htm,比如test.htm,然后用Vim打开它。暂时用菜单吧!结果可能是这样: ![]() 平平无奇,是吧?因为它是一个标准的Vim,并且是性能优先,视效忽略的Vim。无妨,请进入命令行模式(就是按一下冒号,注意是英文冒号:),注意到最下面一行的变化了吧。再输入sy on再回车。是不是有颜色了?它应该看起来象这个样子 ![]() 重要提醒:为简化起见,下文将用 :sy on 表示(先确认在Normal模式,如不确认,请按几次Esc)你先按:进入命令行模式,再输入sy on,再回车。 补充说明:sy表示语法加亮,on当然是打开。:sy clear表示取消加亮。 3.3 改头换面 体验Vim就要按Vim的思路,所以我们要把gVim改回Vim的本来面目。 对了,如果你认为它的界面很土,请更要多看一眼当前的样子,因为下面的操作后可能会更土! 执行如下命令 :set go= 这时的Vim应该是 ![]() 不要大惊小怪,不就是菜单和工具栏不见了嘛?Vim中是不应该用到它们的。 补充说明:set表示一般性设置;go是gui option的缩写,就是界面;等于空就是什么都没有 再输入半条命令(先不要回车) :colo ev 然后,按一下tab键。是不是自动补全为evening了?Vim是非常聪明的(但是不会象MS Word那样自做聪明)。 然后你回车,看到了什么? ![]() 天色全黑了?没错,现在是evening嘛。 补充说明:colo就是设置调色方案。Vim自带了近十种调色方案,当然你还可以在网上下载更多,或改编自己的调色方案。你可以直接在:colo (加一个空格)就连续tab,选择不同的配色方案来体验一下。当然,evening是比较经典的一种。我一直就用它。 3.4 准备并打开范例文件 简化起见,请下载test.txt并保存为d:\test.txt。然后,在Vim中输入半条命令 :tabnew d:\t 输到这里后不要回车,按一下tab,Vim会自动补全为test.txt的。如果不对,再按几次tab,直到正确为止。然后回车。 ![]() 你会看到Vim打开了test.txt,并且是以多页签(tab page)的方式。你可以点击各页签在打开的文件中间切换(高手有更方便的键盘命令做法)。在Vim6.3中,还没有此功能。当然了,这并不意味着Vim的用户没办法享受多页签的便利,下载一个插件后——Vim有上千个插件——就可以了。面对多页签风格的流行(IE6→Maxthon→IE7),Vim7.0也新增了此功能。 我喜欢这种简单的页签。如果你认为此页签太难看,可试一下:set go=e 这时应如下效果 ![]() 3.5 统一格式,修改vimrc 上面所操作的各种命令,都是对Vim的设置。把它们写到一个_Vimrc文件中就成了默认选项。每个Vim用户的_Vimrc文件都不一样,因为每个人的需求不同。 为了保证下面的操作得到预期的效果,请使用善用佳软提供的_Vimrc(附1)。依次执行下述操作: ① 关闭所有的Vim ② 找到你的d:\program files\Vim\Vim7\_vimrc,复制一份存档。 ③ 用任意文本编辑器(Vim或记事本)打开_vimrc,用本文附1的内容替换它,并保存。 ④ 重启Vim。 注:这并不是标准做法,但对windows用户是比较方便的做法。 3.6 打开test.txt 再次就模式进行提醒:Esc到Normal;Normal下i到编辑;Normal下:到命令行。 运行Vim,并在命令行执行 :e d:\test.txt 接下来,我们把此文章排一下版。如果你认为可以手工排版,请把此文件复制到10000行再发表意见。 3.7 分段并保存 3.8 继续编辑 再试一下dd。是不是整行没有了?没关系,u回来就行了。 3.9 更多编辑 任务b:把行末的标点去掉,即“荣”后的顿号和“耻”后的逗号。 任务c:错落有致 补充说明:高手使用Vim是千变万化的。上面的前2个操作(分行+删标点),完全可以合成一个:%s/\(为.\)./\1\r/gc;或再把第3个操作(错落有致)融合到前一个操作中。 3.10 自由体验 体验自动补全:i进来吧,到目前为止还没写过字呢!为简单起见,你直接把用鼠标放到中文的下一行,我们把 Eight Do's and Eight Don'ts 输入一遍。但是,输入一个E,先别动!按ctrl+p是不是自动补全了? 体验大小写(每次操作后,都用u恢复原状),试一下g~~和guu和gUU和g??(g??后可以不按u,再按一次g??也能恢复原状) 3.11 体验语法高亮和折叠 3.12 加密文件 set magic
set ru "标尺信息
set ai
set sw=4
set ts=4
set dy=lastline "显示最多行,不用@@
"以上是缩进相关
set backspace=indent,eol,start
colo evening
sy on
set go= "无菜单、工具栏
set nobackup
set hlsearch
set showmatch
"tab mappings
map <M-1> 1gt
map <M-2> 2gt
map <M-3> 3gt
map <M-4> 4gt
map <M-5> 5gt
map <M-6> 6gt
map <M-7> 7gt
map <M-8> 8gt
map <M-9> 9gt
map <M-t> :tabnew<CR>
map <M-w> :tabclose<CR>
map! <M-1> <esc>1gt
map! <M-2> <esc>2gt
map! <M-3> <esc>3gt
map! <M-4> <esc>4gt
map! <M-5> <esc>5gt
map! <M-6> <esc>6gt
map! <M-7> <esc>7gt
map! <M-8> <esc>8gt
map! <M-9> <esc>9gt
map! <M-t> <esc>:tabnew<CR>
map! <M-w> <esc>:tabclose<CR>
" Use CTRL-S for saving, also in Insert mode
noremap <C-S> :update<CR>
vnoremap <C-S> <C-C>:update<CR>
inoremap <C-S> <C-O>:update<CR>
"2006-09-13 如下:保存视图
au BufNewFile,BufRead *.tx1 setf tx1
|
|