科技: 人物 企业 技术 IT业 TMT
科普: 自然 科学 科幻 宇宙 科学家
通信: 历史 技术 手机 词典 3G馆
索引: 分类 推荐 专题 热点 排行榜
互联网: 广告 营销 政务 游戏 google
新媒体: 社交 博客 学者 人物 传播学
新思想: 网站 新书 新知 新词 思想家
图书馆: 文化 商业 管理 经济 期刊
网络文化: 社会 红人 黑客 治理 亚文化
创业百科: VC 词典 指南 案例 创业史
前沿科技: 清洁 绿色 纳米 生物 环保
知识产权: 盗版 共享 学人 法规 著作
用户名: 密码: 注册 忘记密码?
    创建新词条
科技百科
  • 人气指数: 12702 次
  • 编辑次数: 3 次 历史版本
  • 更新时间: 2011-11-03
admin
admin
发短消息
明天
明天
发短消息
相关词条
WiGig
WiGig
ARPU
ARPU
VIM
VIM
LTE
LTE
BSD
BSD
手机游戏
手机游戏
CDS
CDS
KJAVA
KJAVA
CMMB
CMMB
可视图文
可视图文
推荐词条
希拉里二度竞选
希拉里二度竞选
《互联网百科系列》
《互联网百科系列》
《黑客百科》
《黑客百科》
《网络舆情百科》
《网络舆情百科》
《网络治理百科》
《网络治理百科》
《硅谷百科》
《硅谷百科》
2017年特斯拉
2017年特斯拉
MIT黑客全纪录
MIT黑客全纪录
桑达尔·皮查伊
桑达尔·皮查伊
阿里双十一成交额
阿里双十一成交额
最新词条

热门标签

微博侠 数字营销2011年度总结 政务微博元年 2011微博十大事件 美国十大创业孵化器 盘点美国导师型创业孵化器 盘点导师型创业孵化器 TechStars 智能电视大战前夜 竞争型国企 公益型国企 2011央视经济年度人物 Rhianna Pratchett 莱恩娜·普莱契 Zynga与Facebook关系 Zynga盈利危机 2010年手机社交游戏行业分析报告 游戏奖励 主流手机游戏公司运营表现 主流手机游戏公司运营对比数据 创建游戏原型 正反馈现象 易用性设计增强游戏体验 易用性设计 《The Sims Social》社交亮 心理生理学与游戏 Kixeye Storm8 Storm8公司 女性玩家营销策略 休闲游戏的创新性 游戏运营的数据分析 社交游戏分析学常见术语 游戏运营数据解析 iPad风行美国校园 iPad终结传统教科书 游戏平衡性 成长类型及情感元素 鸿蒙国际 云骗钱 2011年政务微博报告 《2011年政务微博报告》 方正产业图谱 方正改制考 通信企业属公益型国企 善用玩家作弊行为 手机游戏传播 每用户平均收入 ARPU值 ARPU 游戏授权三面观 游戏设计所运用的化学原理 iOS应用人性化界面设计原则 硬核游戏 硬核社交游戏 生物测量法研究玩家 全球移动用户 用户研究三部曲 Tagged转型故事 Tagged Instagram火爆的3大原因 全球第四大社交网络Badoo Badoo 2011年最迅猛的20大创业公司 病毒式传播功能支持的游戏设计 病毒式传播功能 美国社交游戏虚拟商品收益 Flipboard改变阅读 盘点10大最难iPhone游戏 移动应用设计7大主流趋势 成功的设计文件十个要点 游戏设计文件 应用内置付费功能 内置付费功能 IAP功能 IAP IAP模式 游戏易用性测试 生理心理游戏评估 游戏化游戏 全美社交游戏规模 美国社交游戏市场 全球平板电脑出货量 Facebook虚拟商品收益 Facebook全球广告营收 Facebook广告营收 失败游戏设计的数宗罪名 休闲游戏设计要点 玩游戏可提高认知能力 玩游戏与认知能力 全球游戏广告 独立开发者提高工作效率的100个要点 Facebook亚洲用户 免费游戏的10种创收模式 人类大脑可下载 2012年最值得期待的20位硅谷企业家 做空中概股的幕后黑手 做空中概股幕后黑手 苹果2013营收 Playfish社交游戏架构

Vim是一个类似于Vi的文本编辑器,不过在Vi的基础上增加了很多新的特性,Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs同样都是非常优秀的文本编辑器。

目录

[显示全部]

中文介绍编辑本段回目录

    它作为标准的Vi编辑器存在于Linux的几乎每一种发行版里. 在很多系统里如FreeBSD和Sun Solaris 8它作为一个便于安装的独立软件包, 在其它系统(MS-Windows, Macintosh, OS/2等等)上的源代码和已编译好的可执行程序在因特网上很多地方都可以下载
  Vim是一个类似于Vi的文本编辑器, 不过在Vi的基础上增加了很多新的特性, Vim普遍被推崇为类Vi编辑器中最好的一个, 事实上真正的劲敌来自Emacs的不同变体. 1999 年Emacs被选为Linuxworld文本编辑分类的优胜者, Vim屈居第二, 但在2000年2月 Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖, 又将Emacs推至二线, 总的来看, Vim和Emacs同样都是非常优秀的文本编辑器.
  Vim(和Vi)一个最大的优势在于, 它最常用的命令都是简单的字符, 这比起使用复杂的控制组合键要快得多, 而且也解放了手指的大量工作, 学习使用这些命令的时间很快就能从由此带给你的高效率中得到回报. 另外, 与Vi不同, Vim也支持在插入模式下使用上下箭头键, 这使初学者可以很容易上手.
  与其它的类Vi编辑器相比, Vim拥有众多的特性: 对180多种语言的语法高亮功能,C语言的自动缩进, 以及一个功能强大的内置脚本语言. 对每个人来说, Vim总有让他们喜欢的东西.
  Vim的开发仍然在继续进行, 写作本文时, Vim6.0版的工作已经于9月份(2001年 )完成了, 在这之后, vim的主要目标是更稳定, 更实用, 而不是再去增加更多的新功能了, 完善已有功能和修改bug的工作已经够人忙的了. 比起Vim, 原始版的Vi自1985年并没有多大的变化. 

英文介绍编辑本段回目录

What Is Vim?

Vim is a highly configurable text editor built to enable efficient text editing. It is an improved version of the vi editor distributed with most UNIX systems.

Vim is often called a "programmer's editor," and so useful for programming that many consider it an entire IDE. It's not just for programmers, though. Vim is perfect for all kinds of text editing, from composing email to editing configuration files.

What Vim Is Not?

Vim isn't an editor designed to hold its users' hands. It is a tool, the use of which must be learned.

Vim isn't a word processor. Although it can display text with various forms of highlighting and formatting, it isn't there to provide WYSIWYG editing of typeset documents. (It is great for editing TeX, though.) 

详解编辑本段回目录

VIM的历史

     

Bram Moolenaar 在 80 年代末购入他的 Amiga 计算机时,Amiga 上还没有他最常用的编辑器 vi。Bram 从一个开源的 vi 复制 Stevie 开始,开发了 Vim 的 1.0 版本。最初的目标只是完全复制 vi 的功能,那个时候的 Vim 是Vi IMitation(模拟)的简称。1991 年 Vim 1.14 版被 "Fred Fish Disk #591" 这个 Amiga 用的免费软体集所收录了。1992 年 1.22 版本的 Vim 被移植到了 UNIX 和 MS-DOS 上。从那个时候开始,Vim 的全名就变成 Vi IMproved(改良)了。

  在这之后,Vim 加入了不计其数的新功能。做为第一个里程碑的是 1994 年的 3.0 版本加入了多视窗编辑模式(分割视窗)。从那之后,同一萤幕可以显示的 Vim 编辑文件数可以不止一个了。1996 年发布的 Vim 4.0 是第一个利用图型接口(GUI)的版本。1998 年 5.0 版本的 Vim 加入了 highlight(语法高亮)功能。2001 年的 Vim 6.0 版本加入了代码折叠、插件、多国语言支持、垂直分割视窗等功能。2006 年 5 月发布的 Vim 7.0 版更加入了拼字检查、上下文相关补完,标签页编辑等新功能。现在最新的版本是 2008 年 8 月发布的 Vim 7.2,该版本合并了 vim 7.1 以来的所有修正补丁,并且加入了脚本的浮点数支持,在2010年08年15,历时两年的时间,vim又发布了vim 7.3这个版本,这个版本修复了前面版本的一些bug,以及添加了一些新的特征,这个版本比前面几个版本来的要更加优秀。

VIM学习方法

  Vim目前已经有各主流系统的版本,尽管vim较vi已经改良了不少,但是初次使用还是会一头雾水,不知如何操作,所以学习vim要首先过2关。第一关是理解vim的设计思路,vim设计之初就是整个文本编辑都用键盘而非鼠标来完成,键盘上几乎每个键都有固定的用法,且vim的制作者希望用户在普通模式(也就是命令模式,只可输入命令)完成大部分的编辑工作,将此模式设计为默认模式,初学者打开vim,如果直接输入单词,结果就会滴滴乱响,这是因为vim把用户输入的单词理解为命令了。第二关是命令关,vim有过百条命令对应编辑的需要,如果能熟练使用vim这些命令,编辑速度确实比鼠标要快很多,但是想全都记住它们也是一件难事,我想记住它们最好的方法就是多多来练习,确实把vim用在日常的文本编辑中去,且遇到难题不要放弃,而是查找解决的方法,每解决一个难题,你的vim技能就上升一级。

  其实, Vim与其它编辑器一个很大的区别在于, 它可以完成复杂的编辑与格式化功能. 在这些领域还少有软件能与它分庭抗礼, 但是, 与所有的灵活性的代价一样, 你需要用自己的双手来实现它. 这在事实上造成了用户在使用Vim过程中的几个自然阶段.

  一开始是notepad, word, edit垄断你的大脑, 这些东西根深蒂固, 挥之不去Vim的使用对你而言是一场噩梦, 它降低而不是提高了你的工作效率. 对三种工作模式的不解甚至使你认为它是一个充满BUG或者至少是一个古怪的与当今友好用户界面设计严重脱节的软件. 事实上, 这些起初看起来古怪的特性是Vim(或者是vi)的作者和它的用户们在自己漫长的文字编辑和程序设计生涯中总结出来的最快速最实在的操作, 在几乎等于计算机本身历史的成长期中, 历经无数严厉苛刻的计算机用户的批评与检验, 无用的特性或糟糕的设计在Vim用户群面前根本就没有生存的余地. Vim细心而谨慎的作者们也不允许自己精心设计的软件里有这样东西.

  第二个阶段你开始熟悉一些基本的操作, 这些操作足以应付你日常的工作, 你使用这些操作时根本就不假思索. 但这些阶段你仍然很少去碰Vim那晦涩的在线帮助文档. 它在你心里只是notepad, edit一个勉强合格的替代品.

  第三个阶段, 精益求精的你不满足于无休无止的简单操作, 冗长而乏味,有没有更好的办法可以四两拔斤. 于是, 从UNIX参考手册上, 从同事口中, 你渐渐叩开:help xxx的大门. 开始探索里面充满魔力的咒语. 从杂耍般的带有表演性质的技巧开始, 这些技巧令人眩目但少有实用性. 不过这却是你拥有魔力的第一步. 接下来, 你开始认识到这些咒语背后的真经, 开始偷偷修改一些奇怪的符号, 于是, 奇迹产生了, 魔力不但仍然有效, 而且真实地作用于你现实中的文字编辑生活. 你在第二阶段由于熟练操作而尘封已久的大脑突然开始运作. 但这个过程并非是达到某个临界状态后的一路坦途, 不断的挫折, 新的挑战, 看似Mission Impossible的任务.永远伴随着任何一个人的任何一个学习过程. 这是你使用Vim的最后一个阶段, 也是最漫长最有挑战性同时也充满无数奇趣的阶段. 这个阶段里你开始定制一些希奇古怪的颜色. 开始以敲入i18n来输入internationalization, 开始让Vim替你纠正经常把the 误敲成teh的毛病, 开始让Vim与系统里各种精悍而强大的兄弟工具进行合作, 开始写越来越长的script, 每一次的文本编辑体验都妙趣横生高潮跌起. 你的头脑因为要用Vim完成高效的编辑而高度紧张. 你开始在Vim邮件列表里提一些确实是问题的问题. 也开始发现你在Vim里做了以前在SHELL里做的几乎一切事. 事实上你已经成了一个无可救药的Vim骨灰级玩家.重复 ,

高效率移动

1、在插入模式之外

  基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面 VIM 就像一个“哑巴”编辑器一样。很多新手都会一直呆在插入模式里面,因为这样易于使用。但 VIM 的强大之处在于他的命令行模式!你会发现,在你越来越了解 VIM 之后,你就会花越来越少的时间使用插入模式了。

2、使用 h、j、k、l

  使用 VIM 高效率编辑的第一步,就是放弃使用箭头键。使用 VIM,你就不用频繁的在箭头键和字母键之间移来移去了,这会节省你很多时间。当你在命令模式时,你可以用 h、j、k、l 来分别实现左、下、上、右箭头的功能。一开始可能需要适应一下,但一旦习惯这种方式,你就会发现这样操作的高效之处了。

  在你编辑你的电子邮件或者其他有段落的文本时,你可能会发现使用方向键和你预期的效果不一样,有时候可能会一次跳过了很多行。这是因为你的段落在 VIM 看来是一个大的长长的行。这时你可以在按 h、j、k 或者 l 之前键入一个 g,这样 VIM 就会按屏幕上面的行如你所愿的移动了。

3、在当前行里面有效的移动光标

  很多编辑器只提供了简单的命令来控制光标的移动(比如左、上、右、下、到行首/尾等)。VIM 则提供了很多强大的命令来满足你控制光标的欲望。当光标从一点移动到另外一点,在这两点之间的文本(包括这两个点)称作被“跨过”,这里的命令也被称作是 motion。(简单说明一下,后面会用到这个重要的概念)

4、常用到的一些命令(motion)

  fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。

  tx:和上面的命令类似,但是是移动到 x 的左边一个位置。(这真的很有用)

  Fx:和 fx 类似,不过是往回找。使用 , 来重复上一个F命令。

  Tx:和 tx 类似,不过是往回移动到 x 的右边一个位置。

  w:光标往前移动一个词。

  b:光标往后移动一个词。

  0:移动光标到当前行首。

  ^:移动光标到当前行的第一个字母位置。

  $:移动光标到行尾。

  ):移动光标到下一个句子。

  ( :移动光标到上一个句子。

5、在整个文件里面有效移动光标

  VIM 有很多命令,可以用来到达文件里面你想到达的地方。下面是一些在文件里面移动的命令:

  <C-F>:向下移动一屏。

  <C-D>:向下移动半屏。

  <C-B>:向上移动一屏。

  <C-U>:向上移动半屏。

  G:到文件尾

  numG:移动光标到指定的行(num)。(比如 10G 就是到第 10 行)

  gg:到文件首

  H:移动光标到屏幕上面

  M:移动光标到屏幕中间

  L:移动光标到屏幕下面

  *:读取光标处的字符串,并且移动光标到它再次出现的地方。

  #:和上面的类似,但是是往反方向寻找。

  /text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n移动到下个 text 处,N 移动到上一个 text 处 。

  ?text:和上面类似,但是是反方向。

  m{a-z}:在当前光标的位置标记一个书签,名字为 a-z 的单个字母。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。

  `a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。

  `.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。

  %:在成对的括号等符号间移动,比如成对的 [ ] , { }, ( ) 之间。将光标放到任意符号上,然后通过 % 来移动到和这个符号匹配的符号上,% 还可以正确的识别括号的嵌套层数,总是移动到真正匹配的位置上。因此这个命令在编辑程序代码的时候非常有用,可以让你方便的在一段代码的头尾间移动。

高效的输入

1、使用关键词自动完成

  VIM 有一个非常漂亮的关键词自动完成系统。这表示,你可以输入一个长词的一部分,然后按一下某个键,然后 VIM 就替你完成了这个长词的输入了。举个例子:你有一个变量名为 iAmALongAndAwkwardVarName 在你写的代码的某个地方。也许你不想每回都自己一个一个字母的去输入它。

  使用关键词自动完成功能,你只需要输入开始几个字母(比如 iAmAL),然后按 <C-N>(按住 Ctrl,再按 N)或者 <C-P>。如果 VIM 没有给出你想要的词,继续按,直到你满意为止,VIM 会一直循环它找到的匹配的字符串。

2、聪明的进入插入模式

  很多新手进入插入模式都只是用 i。这样当然可以进入插入模式,但通常不是那么合适,因为 VIM 提供了很多进入插入模式的命令。下面是最常用的一些:

  i:在当前字符的左边插入

  I:在当前行首插入

  a:在当前字符的右边插入

  A:在当前行尾插入

  o:在当前行下面插入一个新行

  O:在当前行上面插入一个新行

  c{motion}:删除 motion 命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。

  d{motion}:和上面差不多,但是不进入插入模式。

3、有效的移动大段的文本

  使用可视选择(visual selections)和合适的选择模式

  不像最初的 VI,VIM 允许你高亮(选择)一些文本,并且进行操作。这里有三种可视选择模式:

  v:按字符选择。经常使用的模式,所以亲自尝试一下它。

  V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。

  <C-V>:按块选择。非常强大,只在很少的编辑器中才有这样的功能。你可以选择一个矩形块,并且在这个矩形里面的文本会被高亮。

  在选择模式的时候使用上面所述的方向键和命令(motion)。比如,vwww,会高亮光标前面的三个词。Vjj 将会高亮当前行以及下面两行。

4、在可视选择模式下剪切和拷贝

  一旦你高亮了选区,你或许想进行一些操作:

  d:剪贴选择的内容到剪贴板。

  y:拷贝选择的内容到剪贴板。

  c:剪贴选择的内容到剪贴板并且进入插入模式。

  在非可视选择模式下剪切和拷贝

  如果你很清楚的知道你想拷贝或者剪切什么,那你根本就不需要进入可视选择模式。这样也会节省时间:

  d{motion}:剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。

  y{motion}:和上面类似,不过是拷贝。

  c{motion}:和 d{motion} 类似,不过最后进入插入模式。

  dd:剪切当前行。

  yy:拷贝当前行。

  cc:剪切当前行并且进入插入模式。

  D:剪切从光标位置到行尾到剪贴板。

  Y:拷贝当前行。

  C:和 D 类似,最后进入插入模式。

  x:剪切当前字符到剪贴板。

  s:和x类似,不过最后进入插入模式。

5、粘贴

  粘贴很简单,按 p。

6、使用多重剪贴板

  很多编辑器都只提供了一个剪贴板。VIM 有很多。剪贴板在 VIM 里面被称为寄存器(Registers)。你可以列出当前定义的所有寄存器名和它们的内容,命令为“:reg”。最好使用小写字母来作为寄存器的名称,因为大写的有些被 VIM 占用了。

  使用寄存器的命令为双引号 “。

  比如:我们要拷贝当前行到寄存器 k。你应该按 “kyy。(你也可以使用 V”ky。为什么这样也可以呢?)现在当前行应该已经存在了寄存器 k 里面直到你又拷贝了一些东西进入寄存器 k。现在你可以使用命令 “kp 来粘贴寄存器 k 里面的内容到你想要的位置。

7、避免重复

  令人惊奇的 . 命令

  在 VI 里面,输入 . (小数点符号),将会重复你输入的上一个命令。比如,你上个命令为“dw”(删除一个词),VI 将会接着再删除一个词。

8、使用数字

  使用数字也是 VIM 强大的而且很节省时间的重要特性之一。在很多 VIM 的命令之前都可以使用一个数字,这个数字将会告诉 VIM 这个命令需要执行几次。比如:

  3j 将会把光标向下移动三行。

  10dd 将会删除十行。

  y3″ 将会拷贝从当前光标到第三个出现的引号之间的内容到剪贴板。

  数字是扩展 motion 命令作用域非常有效的方法。

Vim发布二十周年编辑本段回目录

1991年11月2日,Vim文本编辑器公开发布了第一个版本。昨天是它的二十周年庆。 Vim最初是为Amiga平台开发的Vi编辑器克隆,但迅速被移植到其它平台,并最终成为最流行的Vi兼容文本编辑器。Vi的开发始于1970年代末,作者是BSD开发者、太阳微系统公司联合创始人Bill Joy。它是类UNIX系统的标准编辑器。

Vi克隆出现于80年代末和90年代初,主要原因是Vi的许可证不能自由分发,而克隆则因为采用了没有限制的许可证而得到广泛使用。早期的两个著名克隆是Stevie和Elvis。Vim作者Bram Moolenaar对Amiga平台上的Vi克隆不甚满意,他开始在Stevie基础上开发新的文本编辑器。第一个公开发布的版本是1.14版,使用了宽松的公共版权许可证。名字Vim最初指Vi IMitation,后来变为Vi IMproved,代表是Vi的升级版。

uploads/201111/1320328357dXlb8kJT.png

程序员的编辑器——VIM编辑本段回目录

编者按:本文详细介绍了VIM的历史、基本知识等,并介绍了作者作为一个程序员经常用到的一些相关资源。同时包含了大量的参考文献,适合想深入了解VIM的读者。

  如果您从未接触过VIM,推荐先看看VIM的中文帮助文档和xbeta的《世界第二的VIM:普通人的编辑利器》。

一、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的笑话,从中大家或多或少能体会到那个时代人们的某种精神。

  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(参考):

  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.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:

      这些例子也许初看起来有点吓人,可是在很多时候VIM这些强大的命令能省不少力,VIM不愧是为“编辑”这个功能费尽心思。

    三、编程辅助

      既然是程序员的编辑器,自然要show一下它的编程辅助功能。

      (1) ctags,cscope

      现在的IDE都提供了类、函数的索引功能,可以方便的找到某个类或者函数的在哪里定义的,VIM这方面可以利用ctags、cscope做到,Exuberant ctags支持的语言种类非常多,UltraEdit的tags功能也是利用的ctags。cscope只支持C,它能实现Source Insight的一些功能,比如查找某个函数调用了哪些函数,某个函数被哪些函数调用。VIM对这两个工具集成的非常好,利用它们就可以在源文件中方便的跳转搜索类和函数了。

      Reference:

      (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还未正式发布。(此文发表至PConline时,已经正式发布。)

    •   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资源

        几个学习正则表达式的工具(from happyvim at newsmth)

        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 

参考文献编辑本段回目录

http://www.pconline.com.cn/pcedu/soft/gj/photo/0609/877033.html


→如果您认为本词条还有待完善,请 编辑词条

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
0

标签: VIM Vim发布二十周年

收藏到: Favorites  

同义词: Vim发布二十周年,Vim二十周年

关于本词条的评论 (共0条)发表评论>>

对词条发表评论

评论长度最大为200个字符。