|
写了好久了,转贴一把。
- 程序员的编辑器——VIM
- dieken at newsmth dot net
- 一、VIM的历史
- 1. ed
- ed是UNIX上最古老最基本的编辑器,它最初是UNIX之父Ken Thompson编写的,他第一次在
- ed中应用了正则表达式(regular expression),这个创举将RE理论带入了实践,对UNIX界造
- 成了深远的影响。 实际上ed是受来自加州伯克利大学的QED编辑器的影响,Ken便是从这所院
- 校这里毕业的。
- ed是一种行模式编辑器,下面是一个ed会话的例子:
- $ ed greeting
- 0 # 因为新创建文件,所以读入了0个字节
- a # 进入编辑模式(append)
- hello world, eveyone. # 输入一行文本
- . # 回到命令模式
- 1p # 显示(print)第一行
- hello world, eveyone.
- 1c # 最后一个词写错了,修改(change)第一行
- hello world, everyone.
- . # 回到命令模式
- 1p # 重新显示第一行,这回发现无误
- hello world, everyone.
- q # 退出(quit)
- ? # ?表示没有保存或者命令不认识
- w # 保存(write)
- 23 # 提示写了23个字节
- q # 退出
- 也许大家觉得这个编辑器很难用,可是在70年代,许多使用UNIX的人都是用廉价的终端机
- 通过电话线连到UNIX服务器上的,因为传输速率慢,所以这种简洁的行模式编辑就很有意义,
- 现在虽然硬件有了长足的发展,ed编辑器很少有人用了,但是它的很多理念比如命令字符、正
- 则表达式却在它的很多后辈身上体现出来。下面这个网址有一些ed的笑话,从中我们或多或少
- 能体会到那个时代人们的某种精神。
- http://www.gnu.org/fun/jokes/ed.msg.html
- GNU ed: http://www.gnu.org/software/ed/ed.html
- Reference: http://en.wikipedia.org/wiki/ed
- http://snap.nlc.dcccd.edu/learn/nlc/ed.html
- http://cm.bell-labs.com/cm/cs/who/dmr/qed.html
- http://www.answers.com/topic/ken-thompson
- 2. ex
- ex是ed的扩展,实际上vi构建在ex之上,vi引入了现在我们所熟悉的全屏编辑模式。
- 3. vi
- 随着硬件的发展,UNIX上许多全屏模式编辑器被开发出来,pico,nano,joe,jed,jove,
- 但是最为广泛使用的无疑就是VI(nvi,elvis,vim等)和Emacs(GNU Emacs,XEmacs等)。
- 1976年左右Bill Joy开发了vi,他也是伯克利大学的毕业生,后来他跟其他人一起成立了
- Sun Microsystems公司并成为了Sun的首席科学家。一开始Bill开发了ex,尔后开发了vi作为
- ex的visual interface,也就是说vi允许一次能看到一屏的文本而非一行,vi也因此得名。在
- 当今的UNIX系统上,可能没有缺省安装Emacs,但是肯定会有vi,当然,ed编辑器也必定存在:-)
- 下面引用《Unix技术大全——Internet卷》的一段文字:
- “
- 早期,当键盘和视频终端成为最新的计算机交互手段时,人们开发了VI。那时候的键盘不
- 具有目前熟悉的全部功能键,所以,VI就设计成只需要打字机的键盘加上退出键就能完成对文
- 本的输入和修改(现在有的还接受一些其他的键输入方式,如光标控制键)。尽管看起来受了
- 限制,不能充分利用现代键盘新增的许多键,可是‘祸中有福’,限制带来的好处是手指不离
- 开打字区就能完成所有的编辑工作。”
- Reference: http://www.bellevuelinux.org/vi/history.html
- http://www.theregister.co.uk/2003/09/11/bill_joys_greatest_gift/
- 4. VIM
- 技术不断进步,需求也在不断提高,VI的各种变种也不断涌现,知名的有nvi,elvis,
- VIM,vile,yzis,其中移植性最好、特性最多、使用最广的当属VIM,VIM主要是Bram Moolenaar
- 开发的。最初Bram在Amiga计算机上改进一个叫Stevie的VI版本,他称之为“Vi IMitation”。
- 随着功能的逐渐丰富,VIM的含义也就改成了“Vi IMproved”。相比原始的VI,VIM增加的一
- 项最重要的功能便是多级撤销,VI只支持一级撤销。
- 下面是VIM的重要版本历史:
- DATE VERSION Milestone
- 2005 Vim 7.0aa Spell Checking,multi tabpage
- 2000 Jul 09 Vim 6.0a Folding (and more)
- 1998 Feb 19 Vim 5.0 Syntax coloring/highlighting
- 1996 May 29 Vim 4.0 Graphical User Interface (Robert Webb).
- 1994 Aug 12 Vim 3.0 Support for multiple buffers and windows.
- 1992 Vim 1.22 Port to Unix. Vim now competes with Vi.
- This was when Vim became Vi IMproved.
- 1991 Nov 2 Vim 1.14 First release (on Fred Fish disk #591).
- 1988 Vim 1.0 Vi IMitation on the Amiga
- Reference: Learning the vi Editor,6th Edition,O'Reilly。
- http://www.mamiyami.com/document/oreilly/books/unix2/vi/index.htm
- (中国电力出版社有中译版)
- http://www.vmunix.com/vim/hist.html
- http://www.vmunix.com/vim/
- http://www.vim.org
- vim :help vi_diff.txt
- :help version4.txt
- :help version5.txt
- :help version6.txt
- 二、VI/VIM基础知识
- 很多人应该都知道VI是个有模式的编辑器:编辑模式和命令模式,按ESC回到命令模式,
- 用i或者a进入编辑模式,由于区分了模式,导致VI的命令非常简洁,而无模式编辑器比如
- Emacs,所有的命令都需要加上控制键Ctrl或Alt,所以有个笑话说Emacser们最希望计算机备
- 一个脚踏板,这样就可以用脚踩Ctrl和Alt键了(编辑器圣战——在VI和Emacs之间有很多口水
- 战,自然也引出非常多的幽默),这里罗嗦一句VI vs. Emacs: VI继承了ed的理念,另外也
- 有历史原因,VI追求的是快捷——启动程序迅速,编辑文本高效,功能专注,而Emacs追求的
- 是功能的丰富强大以及集成带来的方便,在Emacs里头可以发邮件,上新闻组,听mp3,浏览网
- 页,玩游戏,几乎可以login->emacs->logout了:-),VI和Emacs都是程序员的编辑器,相比而
- 言,Emacs更是提供了一种程序员的生活氛围。
- 闲话少说,这篇文档也不是一份VI/VIM教程,所以这一节我只会简单的提及VI/VIM的基础
- 知识。VIM引入了更多的模式,在VIM里头:help mode可以看到VIM的所有模式,主要有如下几种:
- Normal mode 即通常所谓的命令模式,在此模式使用a、i、A、I、o、O等进入Insert mode
- Insert mode 即通常所谓的编辑模式,在此模式使用ESC进入Normal mode或者
- Ctrl-o临时进入Normal mode。
- Command-line mode 命令行模式,在Normal mode下按冒号进入,按ESC取消执行命令或者回车
- 执行命令,然后回到Normal mode。
- (Visual Studio.Net也添加了命令行脚本功能,幸甚)
- Visual mode 即选择模式(注意跟用鼠标选择不同),用v,V,C-v或C-q进入
- Select mode 鼠标选择
- Replace mode 在Normal mode下按R进入,按ESC返回Normal mode,相当于Windows下
- 命令行中按Insert键进入的覆盖模式
- 从VI/VIM中退出: 按ESC确认返回到Normal mode,然后
- :wq 保存并退出
- :q! 不保存并退出
- :x 退出,如果文件更改则保存
- ZZ 退出,如果文件更改则保存(按住Shift,再按两次z)
- VI的命令是非常具有美感的,下面是几个例子:
- i 在光标前插入 I 在行首插入
- a 在光标后插入 A 在行末插入
- o 在下一行插入 O 在上一行插入
- x 删除当前字符 X 删除前一个字符
- 类似的还有b,B,ge,gE,w,W,e,E,f,F,t,T,这些命令都可以用:help cmdname查到帮助。
- dd 删除一行 yy 拷贝一行
- h j k l 左下上右移动光标
- Ctrl-w h,Ctrl-w j,Ctrl-w k,Ctrl-w l 切换到左下上右窗口
- 类似ed,VI/VIM的命令大多都可以带一个数字前缀或者一个数字范围,比如:
- 5dd 从当前行开始删除5行
- 5yy 从当前行开始拷贝5行
- 1,3d 删除1至3行
- 1,3y 拷贝1至3行 (.代表当前行,$代表最后一行)
- d<motion>,y<motion>,c<motion>,v<motion>分别代表删除/拷贝/修改/选择<motion>
- 命令指定的范围,比如
- int main(void)
- {
- ......;
- }
- 将光标放在{处,然后输入v%就可以把大括号中内容选定,然后按=就可以按照C语言格式
- 缩排(:help =可以看到=命令的描述),%命令的作用是跳到匹配处,比如括号之间,C的
- 宏指令#if #else #endif之间。
- int some_ugly_modifier and some_ugly_name (void)
- 如果光标放在第一个s上,想删除到“(”为止,则输入dt(就可以了,t(的作用是跳到下一个
- "("前。
- dG可以从当前位置一直删除到文件末尾,因为G的作用是跳到文件最后一行。
- VIM的命令可以非常快捷的做到一些复杂的编辑操作,下面是几个示例:
- (a)
- 将“(1), ...., (2), ....,(100)”替换成“(2), ...., (3), ...., (101)”。
- 在文本中一处处找到并修改是很累的,在VIM下一条命令就可以搞定:
- :%s/(\(\d+\))/\="(".(submatch(1)+1).")"/g
- 命令解释如下:
- % 全文(“%”是“1,$”范围的缩写)
- s 替换
- / 搜索字符串开始
- ( 左括号
- \) 开始记录匹配
- \d+ 一个或多个数字
- \) 结束记录匹配
- ) 右括号
- / 搜索字符串结束
- \= 把后面的表达式计算出来作为替换字符串
- "(" 左括号
- . 字符串连接运算符
- (submatch(1) + 1) 把第一个匹配的结果加一作为一个整体返回
- .")" 添上右括号
- /g 替换字符串结束,g表示替换每一行的所有匹配结果。
- (b)
- 这个问题是我曾经碰到的,有一个log系统对于输出行长度有限制,因此在
- 输出很长的log时需要断行,在断行时以单行的“-$-”标记,现在的需求是
- 把这些行连起来,在VIM中也可以很方便的做到(edyfox at newsmth指点):
- :%s/\n-\$-\n//g
- 命令的含义就是把“换行-$-换行”替换成空,另一个办法是:
- :g/-\$-/norm ddkJx
- 命令g/-\$-/的含义就是找到所有的断行标记,然后norm表示在找到的
- 每一个行上执行后面的命令,dd删除这个断行标记,k移动到上一行,J合并
- 当前行和下一行,由于J合并后会留一个空格(只对于英文情况下),所以x
- 来删除这个空格。
- (c)在Fortran代码
- integer, dimension(:, :), allocatable :: &
- short_var, &
- A_very_long_name_var, &
- other
- 中,想把每行的&符号定位到固定的一列,比如第78列,手动对齐也是很麻烦的,
- 这个问题可以用VIM的Align插件(http://www.vim.org/scripts/script.php?script_id=294)
- 解决,另外利用宏也可以:
- :set ve=all 使得光标可以定位到屏幕任何位置(缺省下VIM的光标只能放在行内的字符上)
- gg 到文件第一行
- /\s\+&\s*$ 找以&结尾的行,&前至少一个空白字符,后0或多个空白字符
- qa 记录宏到寄存器a
- D 删除到行尾
- 78| 定位到第78列
- i&<ESC> 插入&并返回到命令模式
- n 查找下一个&
- q 停止记录宏
- 10000@a 执行一万遍寄存器a中保存的命令
- :set ve="" 恢复ve缺省值
- (d)连续插入72个等号
- 按ESC进入Normal mode,输入72i=再按ESC即可。
- (e)在多行开始插入//
- 移动光标到需要注释掉的第一行开头,然后按Ctrl-v(如果使用了VIM的mswin.vim,则
- Ctrl-v表示粘贴,这时需要用Ctrl-q代替)进入Visual blockwise模式,这个模式是
- Visual mode的一种,相当于UltraEdit中的块选择。 然后按j选择上所有需要注释行的
- 行首(看起来效果是选择了第一列),输入I//再按ESC就可以在每一行开头插入//了。
- Reference: http://newsmth.org VIM board
- http://edyfox.codecarver.org/html/index.html edyfox的个人主页
- 这些例子也许初看起来有点吓人,可是在很多时候VIM这些强大的命令能省不少力,VIM
- 不愧是为“编辑”这个功能费尽心思。
- 三、编程辅助
- 既然是程序员的编辑器,自然要show一下它的编程辅助功能。
- (1) ctags,cscope
- 现在的IDE都提供了类、函数的索引功能,可以方便的找到某个类或者函数的在哪里定义
- 的,VIM这方面可以利用ctags、cscope做到,Exuberant ctags支持的语言种类非常多,
- UltraEdit的tags功能也是利用的ctags。cscope只支持C,它能实现Source Insight的一些功
- 能,比如查找某个函数调用了哪些函数,某个函数被哪些函数调用。VIM对这两个工具集成的
- 非常好,利用它们就可以在源文件中方便的跳转搜索类和函数了。
- Reference: http://ctags.sourceforge.net Exuberant ctags
- http://iamphet.nm.ru/cscope/ cscope for Win32
- :help ctags
- :help cscope
- (2)multi window,multi buffer,multi tab page
- 一个buffer对应一个文件,它可以对应多个window,这样可以方便的对照编辑一个文件的
- 不同部分,tab page跟现在许多编辑器上常见的标签页意义并不一样,可以将tab page理解为
- 一个windows的容器,这样如果想新建一个窗口编辑文件但又不想打乱现在的多窗口布局,那
- 么就可以新开一个tab page,把新窗口放到这个新的tab page里头。tab page是VIM 7.0不久
- 前新增的特性,目前VIM 7.0还未正式发布。
- Reference: :help windows
- :help buffers
- :help tabpage
- (3) 语法高亮
- VIM发行版里带了450多种语言的语法高亮,在其主页vim.org上还可以找到更多。
- Reference: :help syntax
- (4) 自动缩进
- 在打开自动缩进选项后,VIM会自动的控制缩进,比如输入{自动向右缩进一个tab字符
- (具体用什么缩进可以配置),输入}自动回退缩进。 使用=命令可以对选择的程序块排版缩
- 进,这对于整理代码非常有帮助。 另外对选择的块用>>和<<命令可以很方便的控制一个程序
- 块的缩进。
- Reference: :help cindent
- :help autoindent
- :help smartindent
- (5) 类和函数列表
- taglist等插件可以提供很方便的类和函数列表功能。
- (6) 自动完成
- VIM在Insert mode下输入一个单词的前几个字符,然后用Ctrl-p或者Ctrl-n就可以列出以
- 这些字符开头的单词,特别在配置了ctags后也能列出头文件中的符号,特别方便,除此外VIM
- 还有行自动完成、文件名自动完成等,这点即使是现在强大的IDE也未免不足。
- 如果设置了如下选项:
- :set wildmode=list:full
- :set wildmenu
- 则在命令行打开文件或者输入命令时按Tab(以输入字符为前缀补全)或者Ctrl-d(列出
- 包含输入字符的所有匹配项目)自动补全,这一功能大大降低了VIM的使用难度。
- 另外有许多插件可以实现许多IDE中的自动完成类成员的功能,当然,这个功能还比不上
- Eclispe、Visual Studio等IDE中的强大,这一点是VIM比较可惜的地方。VIM 7.0引入了Omni
- Completion,可以自定义匹配完成函数,也许可以弥补这个缺陷。
- Reference: :help 'complete'
- :help omni-completion
- (7) folding
- VIM支持折叠代码,还可以根据文件中特殊的标记对文件中的行折叠,可以实现Outline视
- 图,这可以极大的方便编辑很大的文件。
- Reference :help fold
- (8) quickfix
- 许多人对于UNIX开发的印象都是“编辑代码,退出编辑器,编译,发现错误,记录出错信
- 息,遍辑代码,退出编辑器,编译,用gdb调试,再编辑代码……”,这是古老的VI时代的事
- 情了,有了VIM的quickfix特性,我们可以在VIM里编译然后直接跳到编译出错的行,这个反复
- 的过程无需退出编辑器,而且VIM的quickfix特性可以经配置后支持不同的编译器以及不同的
- 语言:只要编译器在出错信息里包含文件名和行号。
- 不过比较遗憾的是VIM对于集成调试支持还不好,有些项目尝试集成GDB到VIM,比如
- http://skawina.eu.org/mikolaj/vimgdb/ 和 http://www.volny.cz/zellerin/gdbvim/,
- 在http://www.vim.org/search.php中的scripts处搜索gdb也可以找到一些插件.这方面
- Emacs的GUD(Grand Unified Debugger)调试界面要更强大,毕竟GCC/GDB/Emacs是一家。
- Reference: :help quickfix
- (9)auto command
- VIM可以在某些事件发生时比如打开文件、保存文件、切换窗口时自动执行一些VIM命令,
- VIM的许多插件都利用了这个功能。常用的一种情况是把某种文件后缀指定到一种文件格式上,
- 比如*.jv指定到Java文件格式,这样在每次打开.jv类型的文件时自动使用Java的语法高亮:
- :autocmd BufNewFile, BufRead *.jv :set ft=Java
- Reference: :help autocmd.txt
- (10)mode line
- 在编辑文件时常常指定一些选项,比如缩进量、是否将制表符转换成空格等,每次手动指
- 定这些选项很麻烦,写到vimrc中却又成了全局选项,而且换了一份VIM,原有的设置就丢失了。
- VIM可以识别文件中的特殊行,自动设置一些选项,下面是写在C源文件开头的一个mode line示例:
- /* vi:set tw=0 ts=8 sw=8 noet nowrap ft=c fdm=syntax: */
- /*
- * File: xxxx.c
- * Author: xxx
- */
- 四、强大方便的帮助系统
- 使用了那么多软件,只有VIM和Emacs的帮助系统给我方便快捷的感觉,大部分
- 软件的帮助往往是摆设而已,而VIM的帮助的确是考虑到了自己“help”的身份,利用它
- 能很方便容易的找到想要的东西。
- VIM的帮助是超链接形式的,它使用的就是tags,所以可以跟ctags功能
- 一样按Ctrl-]跳转到链接所指处,按Ctrl-t返回。
- :help 打开帮助首页,这个首页分类非常清楚
- :help cmd 查找normal mode命令,比如:help dd
- :help i_cmd 查找insert mode命令,比如:help i_Ctrl-y
- :help :cmd 查找command-line命令,比如:help :s
- :help 'option 查找选项,比如:help 'tabstop
- (这些信息都在:help打开的帮助首页上)
- 如果你记不清命令或者选项的全称,那么可以利用Tab或者Ctrl-d的自动补全功能。
- :help options 可以找到所有的选项说明
- 查看某一个选项的值(实际上选项是VIM中的一种变量,类似SHELL的变量以$符号引用,
- VIM的选项以&引用,另外VIM的寄存器以@引用):
- :echo &tabstop
- 五、其它高级功能
- (1)寄存器
- VIM里面的寄存器可以用来保存拷贝的文本、记录的宏、设置的书签等等,一般的编辑器
- 都只有一个剪切板(MS Office加入了多个剪切板),而VIM和Emacs编辑器中的多寄存器可以
- 实现多个剪切板的功能。VIM中有九类寄存器:
- 无名寄存器 " 最近一次删除/修改/替换操作的文本都会放入这个寄存器
- 10个数字寄存器 0-9 拷贝或者删除的文本存入这些寄存器,这些寄存器是循环使用
- 的,在每次存入内容到寄存器1时,原有的内容会依次存入到
- 后一个寄存器中。
- 小删除寄存器 - 删除内容少于一行时放入这个寄存器
- 26个命名寄存器 a-zA-Z 大小写无关。这些寄存器可以在拷贝或者删除等操作中指定使用。
- 四个只读寄存器 :.%# 特殊用途。
- 表达式寄存器 = 特殊用途。
- 选择和拖放寄存器 *+~ 用于与系统剪切板交互,以及接收拖放操作的内容。
- 黑洞寄存器 _ 放到这里面的内容都被丢弃,这样可以删除或拷贝时不影响其它寄存器。
- 最后一次搜索模式寄存器 / 保存最后一次搜索的正则表达式。
- 使用:reg命令可以看到所有寄存器中的内容,使用"+y或者"*y可以将visual mode下选择
- 的内容拷贝到系统剪切板,使用"+p或者"*p可以将剪切板中的内容粘贴到VIM中,如果打开了
- mswin特性的话则在insert mode下使用Ctrl-x,Ctrl-v,Ctrl-c了。
- Reference: :help registers
- (2) 宏
- Normal mode下按q<reg>,<reg>指{a-zA-Z0-9"}37个寄存器中的一个,然后可以进行任何
- 操作,包括在模式间切换,最后在Normal模式下按q可以结束宏录制,用@<reg>命令可以应用
- 这个宏,命令前可以带数字前缀表示执行多少次这个宏。
- Reference: :help q
- (3) 书签
- Normal mode下按m<reg>作书签,<reg>指26个命名寄存器中的一个,然后可以用'<reg>或
- 者`<reg>跳到书签处。
- Reference: :help m
- (4) 映射
- VI/VIM可以将某个按键序列映射到一个命令序列上,比如在配置文件.vimrc(Windows下
- 是_vimrc)中写入
- map <F6> <ESC>i<C-R>=strftime("%Y-%m-%d")<ESC><ESC>
- 即可以在Normal mode下插入当前日期。
- Reference: :help :map
- (5) 缩写
- VI/VIM支持用一个缩写字符串代替一个长的字符串,比如
- :ab hw hello world
- 然后在Insert mode下输入“hw ”(不包括引号)后VIM就自动替换成了“hello world”。
- 这里展示一个Emacs下abbrev功能的动画(没错,是Emacs的):
- http://www.bloomington.in.us/~brutt/msf-abbrev.html
- http://www.bloomington.in.us/~brutt/msf-abbrev-demo.gif
- Reference: :help :ab
- (6) :s//和:g//,:!g//
- 这两个命名加上正则表达式,常常能完成非常复杂的编辑任务,可以毫不夸张地说是VIM
- 的两柄瑞士军刀。:s是替换操作,:g是查找匹配模式的行,:!g是查找不匹配模式的行。
- http://www.vim.org/tips/tip.php?tip_id=1063这个tip可以把:g找到的行拷贝到一个新的缓
- 冲区中,非常有用。
- Reference: :help :s
- :help :g
- (7) 插件
- VIM自己有脚本语言,另外也支持用Perl/Python/Tcl/Ruby/Scheme编写插件,这些插件
- 极大的丰富了VIM的功能。
- (8) color scheme
- VIM有许多配色方案,下面这个链接有许多配色方案效果的图样:
- http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/
- (9) 二进制编辑
- VIM可以利用xxd实现二进制编辑,不过这项功能还是不够好用。
- (10) sign
- sign指在编辑窗口的最左列显示一个标记,利用这个功能能实现很多IDE中的书签标记或
- 者断点标记。
- Reference: :help sign
- 六、VIM Scripts
- VIM script包含几大类:
- color scheme 配色方案
- ftplugin File type插件,特定语言语法的设置,比如如何识别注释
- syntax 语法高亮的配色
- plugin 提供额外功能的插件,比如智能完成、缓冲区管理。
- VIM的script安装非常简单,下载的script文件或者压缩包里头都有安装说明,在VIM的安
- 装目录(比如C:\VIM64)下面有一个vimfiles目录,把script放到vimfiles目录下即可。对于
- 多用户系统,可以在HOME目录(一般是c:\Documents and Settings\ <USER_NAME>\)下面建
- 立一个vimfiles目录,把script放置到这里。
- 下面是一些好用的VIM插件,具体使用办法请参考各自。vim文件头部的注释。
- BufExplorer.vim *****
- http://www.vim.org/scripts/script.php?script_id=42
- 这个插件可以使编辑多文件更加方便,装完插件后Normal mode下输入\be即可打开缓冲区
- 列表,光标放置在某一个文件上按回车即可打开这个文件,而缓冲区列表自动关闭。
- Taglist.vim *****
- http://www.vim.org/scripts/script.php?script_id=273
- 这个插件可以实现类或者函数列表功能,支持C/C++,java,perl,python,tcl,sql,
- php等语言,它可以在VIM中创建一个窗口,列出编辑的源文件中的类、函数、变量定义列表,
- 而且更方便的是这个列表也插入在了右键菜单中,分类存放,访问非常方便。
- TabBar.vim ***
- http://www.vim.org/scripts/script.php?script_id=1338
- 这个插件实现了类似UltraEdit中的标签页的功能,而且能通过Alt-<n>来切换,<n>代表
- 1-9。
- minibufexpl.vim ***
- http://www.vim.org/scripts/script.php?script_id=159
- 实现了类似UltraEdit中的标签也功能。
- c.vim ***
- http://www.vim.org/scripts/script.php?script_id=213
- 提供了很多便于C/C++编程的功能,比如文件头模版,代码片断等。
- CRefVim **
- http://www.vim.org/scripts/script.php?script_id=614
- 为VIM定制的C参考手册,这样对于语法或者函数不清楚的地方可以方便的查找了。
- latex-suite *****
- http://www.vim.org/scripts/script.php?script_id=475
- http://vim-latex.sf.net/
- 提供了很多便于编辑TeX/LaTeX文件的功能,比如在VIM里面编译或者预览、自动插入TeX
- 标记等。
- word_complete.vim ***
- http://www.vim.org/scripts/script.php?script_id=73
- Insert模式下在输入的时候自动补全单词,如果补全正确可以按Tab键接受,否则可以不
- 管它继续输入或者按Ctrl-n,Ctrl-p切换补全。 注意是输入三个字符后才开始补全。
- Vim JDE
- http://www.vim.org/scripts/script.php?script_id=1213
- 支持C/C++等的自动完成(需要VIM 7.0,编译时打开+ruby特性).
- cppcomplete.vim **
- http://www.vim.org/scripts/script.php?script_id=527
- 能自动完成C/C++/Java的结构或类成员,注意它的快捷键是Alt-l(字母L)不是Alt-i。
- The NEAD Commenter **
- http://www.vim.org/scripts/script.php?script_id=1218
- 在许多类型的文件中方便的加上注释或者取消注释。
- winmanager
- http://www.vim.org/scripts/script.php?script_id=95
- 把标准的File Explorer以及Buffer Explorer插件集成在一起,提供现代编辑器中常见的
- 文件列表和缓冲区列表功能。
- sketch.vim ***
- http://www.vim.org/scripts/script.php?script_id=705
- Draw with mouse: boxes, arrows, lines, fills. Transparent/opaque drag and drop.
- 照着它的教程做一遍,你就会震撼于它的创意了。
- DrawIt.vim **
- http://www.vim.org/scripts/script.php?script_id=40
- 可以方便的画连线图。
- MultipleSearch ***
- http://www.vim.org/scripts/script.php?script_id=479
- MultipleSearch2.vim ***
- http://www.vim.org/scripts/script.php?script_id=1183
- Mark.vim ***
- http://www.vim.org/scripts/script.php?script_id=1238
- otf.vim **
- http://www.vim.org/scripts/script.php?script_id=634
- 这些插件可以同时高亮显示多次搜索结果,这个特性非常有利于显示代码中某些变量或函
- 数的调用位置。
- SearchComplete.vim *
- http://www.vim.org/scripts/script.php?script_id=474
- 可以用/搜索时按Tab补全要搜索的单词。
- Vim Intellisense
- http://insenvim.sourceforge.net
- 顾名思义,此插件用于给VIM提供智能完成功能,支持C++,C#,Java,JSP,HTML,SQL,
- XML,我安装后一直懒得配置,也就没用上。
- project
- http://www.vim.org/scripts/script.php?script_id=69
- 提供一些IDE功能,看介绍似乎很不错。
- JavaBrower
- http://www.vim.org/scripts/script.php?script_id=588
- 提供文件中Java类的树状列表。
- vimspell
- http://www.vim.org/scripts/script.php?script_id=465
- ispell or aspell based spell checker with fly-spelling。
- cream
- http://cream.sourceforge.net/
- 一套配置文件,可以把VIM的界面改成CUA(Common User Access)模型,降低VIM的学习
- 难度,个人不推荐这种做法,不过其中有些高级配置值得学习(有意思的是Emacs也有类似的
- 项目: Easymacs,EmacsW32)。
- IComplete
- http://icomplete.sf.net
- 搭配VIM 7.0的Omni Complete,可以做到C/C++的智能完成功能.
- 七、VIM资源
- http://www.vim.org VIM主页,有许多scripts和tips,查找插件的第一去处。
- http://newsmth.net 新水木BBS的VIM版,有很多VIM爱好者可以讨论
- http://vimdoc.sf.net VIM文档工程
- http://vcd.gro.clinux.org/ VIM中文文档
- http://tnerual.eriogerg.free.fr/vim.html VIM Quick Reference Card
- http://edyfox.codecarver.org/ newsmth VIM版版主的wiki
- http://learn.tsinghua.edu.cn:8080/2001315450/ 王垠的个人主页
- 《学习vi编辑器(第六版)》机械工业出版社译,O'Reilly
- 几个学习正则表达式的工具(from happyvim at newsmth)
- http://weitz.de/regex-coach/ Regex Coach
- http://jregexptester.sourceforge.net/ JRegexp Tester
- http://www.regexbuddy.com/ Regex Buddy
- http://www.yzis.org/ yzis是一个新的VI变种,它支持变宽字体,目前功能还不够丰富.
- http://ex-vi.sourceforge.net/ 传统VI的源代码
- 八、编译安装最新CVS版的VIM
- 1. 获取源代码
- cvs -z3 -d:pserver:anonymous@cvs.sf.net:/cvsroot/vim co vim7
- 源代码位于当前目录的vim7目录下面,假设安装目标在d:\work\program\Vim\vim70b
- 2.编译
- 注意重新编译前最好clean一下,确保“*obj*”目录被删除了,否则可能出现莫名其妙的
- 问题,比如链接时找不到一些函数。下面是一个批处理脚本:
- rem --------------------------------------------->
- @echo off
- set path=c:\winnt;c:\winnt\system32
- vcvars32.bat
- cd vim7\src
- rem .sh文件跟其它程序有关联,避免运行VC的link时执行了link.sh
- ren link.sh link.sh.old
- @echo clean...
- rem clean时加入这些选项是因为$(OUTDIR)和$(OBJDIR)根据这些标志合成的,
- rem 如果不加这些标志, 在rmdir /s /q时会找不到目录, 从而没有删除掉。
- nmake -f Make_mvc.mak clean FEATURES=HUGE GUI=yes OLE=yes MBYTE=yes IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:\work\program\Perl DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:\work\program\Python24 DYNAMIC_PYTHON=yes PYTHON_VER=24 SNIFF=yes CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
- @echo build big debug version...
- nmake -f Make_mvc.mak all FEATURES=HUGE GUI=yes OLE=yes MBYTE=yes IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:\work\program\Perl DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:\work\program\Python24 DYNAMIC_PYTHON=yes PYTHON_VER=24 SNIFF=yes CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
- ren link.sh.old link.sh
- @echo done.
- pause
- @echo on
- rem <-----------------------------------------------
- 对于MinGW,
- @echo off
- @echo clean...
- make -f Make_ming.mak clean DEBUG=yes
- @echo make...
- make -f Make_ming.mak all GUI=yes OLE=yes MBYTE=yes IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:/work/program/Perl DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:/work/program/Python24 DYNAMIC_PYTHON=yes PYTHON_VER=24 CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
- @echo done.
- pause
- @echo on
- 如果发现MinGW编译出来的gvimd.exe非常大(约4~5MB),可以用MinGW自带的strip处理一下。
- 3. 安装
- 如果你的系统先前有一份不同版本的VIM,那么需要先卸载掉(运行vim\vimXX\uninstal.exe,
- 或者在拷贝完文件后运行新版VIM的install.exe,它也会提示卸载旧版本),最近的VIM 7
- CVS代码安装目录也从vim70aa转变到vim70b,也需要卸载原先的vim70aa,这一步主要是删除
- 一些注册表项。
- 如果你从CVS上更新代码后,install要求的安装目录名字没有改变(也就是说VIM版本没
- 变),那么不需要卸载原先的版本,直接拷贝文件覆盖即可,如果你想更改目录安装的话也需
- 要卸载。
- cd vim7
- dir /s/b *.exe
- dir /s/b *.dll
- xcopy vim7\runtime d:\work\program\vim\vim70b (vim70b是一个目录)
- copy vim7\src\*.exe d:\work\program\Vim\vim70b
- copy vim7\src\xxd\xxd.exe d:\work\program\Vim\vim70b
- copy vim7\src\vimtbar.dll d:\work\program\Vim\vim70b
- copy vim7\src\GvimExt\gvimext.dll d:\work\program\Vim\vim70b
- copy vim7\src\VisVim\Visvim.dll d:\work\program\Vim\vim70b
- 然后进入vim70b目录运行install.exe,如果发现一个DOS窗口一闪而逝,那么很可能是建
- 立的vim70b目录名不对,比如我前几天升级后使用的仍然是vim70aa目录名,在DOS窗口中运行
- install.exe它就提示需要在vim70b目录下运行,将vim70aa改名即可。install.exe的源代码
- 是vim7\src\dosinst.c,这里面修改了注册表,并拷贝一些文件到WINDOWS目录下等等。
- 4.善后
- 视情况你需要更新PATH环境变量、文件关联、_vimrc中的路径名等,并将diff.exe,
- ctags.exe,cscope.exe拷贝到vim70b下面。
- 最后运行gvimd.exe,键入:ver开始享受VIM吧。
- 九、一份vimrc配置文件
- 十、VIM的不足
- 前面已经提到,VIM在自动完成和集成调试方面还比不上现代的许多IDE,另外VIM对二进
- 制编辑还没有UltraEdit强大,对于现在流行的重构,VIM也支持不力,但是作为一个文本编辑
- 器而言,堪比的只有Emacs,另外Visual SlickEdit也很强大,不过它是商业软件。VIM也可以
- 嵌入到Visual Studio中作为编辑器,另外Code Forge,Eclipse,NetBeans,Sun Visual Workshop
- 等也提供了一定的VIM支持或者键绑定。
- Reference: :help workshop
- :help netbeans
- :help debugger
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|