vi使用手册.doc_第1页
vi使用手册.doc_第2页
vi使用手册.doc_第3页
vi使用手册.doc_第4页
vi使用手册.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Vi 是 Unix 世界里极为普遍的全萤幕文书编辑器,几乎可以说任何一台 Unix 机器都会提供这套软体。Linux 当然也有,它的 vi 其实是 elvis(版权问题),不过它们都差不多。熟悉 DOS 下的文书处理後,也许会感到 vi 并不好用;Unix 上也已经发展出许多更新、更好用的文书编辑器,但是并不一定每一台 Unix 机器上都会安装这些额外的软体。所以,学习 vi 的基本操作还是有好处,让你在各个不同的机器上得心应手。Vi 基本观念Unix 提供一系列的 ex 编辑器,包括 ex, edit 和 vi 。相对於全萤幕编辑器,现在可能很难想像如何使用 ex, edit 这种行列编辑器(有人用过 DOS 3.3 版以前所附的EDLIN 吗?)。 Vi 的原意是 Visual,它是一个立即反应的编辑程式,也就是说可以立刻看到操作结果。也由於 vi 是全萤幕编辑器,所以它必须控制整个终端机萤幕哪里该显示些什麽。而终端机的种类有许多种,特性又不尽相同,所以 vi 有必要知道现在所使用的是哪一种终端机。这是藉由 TERM 这个环境变数来设定,设定环境变数方面请查看所使用 shell的说明。(除非执行 vi 的时候回应 unknow terminal type ,否则可以不用设定。)只要简单的执行 vi 就可以进入 vi 的编辑环境。在实际操作之前先对它有个概略的了解会比较好。Vi 有两种模式,输入模式以及指令模式。输入模式即是用来输入文字资料,而指令模式则是用来下达一些编排文件、存档、以及离开 vi 等等的操作指令。当执行 vi 後,会先进入指令模式,此时输入的任何字元都视为指令。进入与离开要进入 vi 可以直接在系统提示字元下键入 vi 档案名称,vi 可以自动帮你载入所要编辑的档案或是开启一个新档。进入 vi 後萤幕左方会出现波浪符号,凡是列首有该符号就代表此列目前是空的。要离开 vi 可以在指令模式下键入 :q, :wq 指令则是存档後再离开(注意冒号)。要切换到指令模式下则是用 ESC 键,如果不晓得现在是处於什麽模式, 可以多按几次 ESC,系统会发出哔哔声以确定进入指令模式。Vi 输入模式要如何输入资料呢?有好几个指令可以进入输入模式:新增 (append)a 从游标所在位置後面开始新增资料,游标後的资料随新增资料向後移动。A 从游标所在列最後面的地方开始新增资料。插入 (insert)i 从游标所在位置前面开始插入资料,游标後的资料随新增资料向後移动。I 从游标所在列的第一个非空白字元前面开始插入资料。开始 (open)o 在游标所在列下新增一列并进入输入模式。O 在游标所在列上方新增一列并进入输入模式。也许文字叙述看起来有点繁杂,但是只要实际操作一下马上可以了解这些操作方式。实务很重要,尤其是电脑方面的东西随时可以尝试及验证结果。极力建议实际去使用它而不要只是猛 文件,才有事半功倍的效用。(注:此段为废话。)Vi 基本编辑配合一般键盘上的功能键,像是方向键、Insert 、Delete 等等,现在你应该已经可以利用 vi 来处理文字资料了。当然 vi 还提供其他许许多多功能让文字的处理更形方便,有兴趣的看倌请继续。在继续下去之前先来点 BCC 吧。电脑有许多厂牌,不同的硬体及作业系统。PC 也不是仅仅只有 IBM PC 及其相容品而已。事实上,包括键盘,终端机等等往往都有不同的规格。这代表什麽?在文书编辑软体上会遇这样的问题,某些电脑的键盘上没有特定的几个功能键!那麽不就有某些功能不能用了?这个问题在 Unix 系统上也一样,几乎各大电脑厂商都有自己的 Unix 系统,而 vi 的操作方法也会随之有点出入。我们固然可以用 PC 的键盘来说明 vi 的操作,但是还是得提一下这个问题。删除与修改何谓编辑?在这里我们认为是文字的新增修改以及删除,甚至包括文字区块的搬移、复制等等。这里先介绍 vi 的如何做删除与修改。(注意:在 vi 的原始观念里,输入跟编辑是两码子事。编辑是在指令模式下操作的,先利用指令移动游标来定位要进行编辑的地方,然後才下指令做编辑。)x 删除游标所在字元。dd 删除游标所在的列。r 修改游标所在字元,r 後接著要修正的字元。R 进入取代状态,新增资料会覆盖原先资料,直到按 ESC 回到指令模式下为止。s 删除游标所在字元,并进入输入模式。S 删除游标所在的列,并进入输入模式。其实呢,在 PC 上根本没有这麽麻烦!输入跟编辑都可以在输入模式下完成。例如要删除字元,直接按 Delete 不就得了。而插入状态与取代状态可以直接用 Insert 切换,犯不著用什麽指令模式的编辑指令。不过就如前面所提到的,这些指令几乎是每台终端机都能用,而不是仅仅在 PC 上。在指令模式下移动游标的基本指令是 h, j, k, l 。想来各位现在也应该能猜到只要直接用 PC 的方向键就可以了,而且无论在指令模式或输入模式下都可以。多容易不是。当然 PC 键盘也有不足之处。有个很好用的指令 u 可以恢复被删除的资料,而 U 指令则可以恢复游标所在列的所有改变。这与某些电脑上的 Undo 按键功能相同。Vi 进阶应用相信现在对於 vi 应该已经有相当的认识。处理文字也不会有什麽麻烦才对。如果有兴趣善用 vi 的其它功能进一步简化操作过程,不妨继续看下去。移动游标由於许多编辑工作是藉由游标来定位,所以 vi 提供许多移动游标的方式,这个我们列几张简表来说明(这些当然是指令模式下的指令):指令 说明 功能键 0 移动到游标所在列的最前面 Home $ 移动到游标所在列的最後面 End CTRLd 向下半页 CTRLf 向下一页 PageDownCTRLu 向上半页 CTRLb 向上一页 PageUp 指令说明 H 移动到视窗的第一列 M 移动到视窗的中间列 L 移动到视窗的最後列 b 移动到下个字的第一个字母 w 移动到上个字的第一个字母 e 移动到下个字的最後一个字母 移动到游标所在列的第一个非空白字元指令说明 n- 减号移动到上一列的第一个非空白字元 例如:2-就是移动到向上2列 前面加上数字可以指定移动到以上 n 列 n+ 加号移动到下一列的第一个非空白字元 前面加上数字可以指定移动到以下 n 列 nG 直接用数字 n 加上大写 G 移动到第 n 列 指令 说明 fx 往右移动到 x 字元上 Fx 往左移动到 x 字元上 tx 往右移动到 x 字元前 Tx 往左移动到 x 字元前 ; 配合 f&t 使用,重复一次 , 配合 f&t 使用,反方向重复一次 /string 往右移动到有 string 的地方 ?string 往左移动到有 string 的地方 n 配合 /&? 使用,重复一次 N 配合 /&? 使用,反方向重复一次 指令 说明 备注 n( 左括号移动到句子的最前面 句子是以 前面加上数字可以指定往前移动 n 个句子 ! . ? 三种符号来界定n) 右括号移动到下个句子的最前面 前面加上数字可以指定往後移动 n 个句子 n 左括弧移动到段落的最前面 段落是以 前面加上数字可以指定往前移动 n 个段落 段落间的空白列界定 n 右括弧移动到下个段落的最前面 前面加上数字可以指定往後移动 n 个段落 不要尝试背诵这些指令,否则後果自行负责。它们看起来又多又杂乱,事实上这是文字叙述本身的障碍。再强调一次,实际去使用它只要几次就可以不经大脑直接下达这些奇奇怪怪的指令,远比死记活背搞得模模糊糊强多了。(注:若真的不经大脑而误删资料与我无关。另,此段为废话。)进阶编辑指令这些编辑指令非常有弹性,基本上可以说是由指令与范围所构成。例如 dw 是由删除指令 d 与范围 w 所组成,代表删除一个字 d(elete) w(ord) 。指令列表如下:d 删除(delete)y 复制(yank)p 放置(put)c 修改(change)范围可以是下列几个:e 游标所在位置到该字的最後一个字母w 游标所在位置到下个字的第一个字母b 游标所在位置到上个字的第一个字母$ 游标所在位置到该列的最後一个字母0 游标所在位置到该列的第一个字母) 游标所在位置到下个句子的第一个字母( 游标所在位置到该句子的第一个字母 游标所在位置到该段落的最後一个字母 游标所在位置到该段落的第一个字母说实在的,组合这些指令来编辑文件有一点点艺术气息。不管怎麽样,它们提供更多编辑文字的能力。值得注意的一点是删除与复制都会将指定范围的内容放到暂存区里,然後就可以用指令 p 贴到其它地方去,这是 vi 用来处理区段拷贝与搬移的办法。某些 vi 版本,例如 Linux 所用的 elvis 可以大幅简化这一坨指令。如果稍微观察一下这些编辑指令就会发现问题其实是定范围的方式有点杂,实际上只有四个指令罢了。指令 v 非常好用,只要按下 v 键,游标所在的位置就会反白,然後就可以移动游标来设定范围,接著再直接下指令进行编辑即可。对於整列操作, vi 另外提供了更方便的编辑指令。前面曾经提到过删除整列文字的指令 dd 就是其中一个;cc 可以修改整列文字;而 yy 则是复制整列文字;指令 D 则可以删除游标到该列结束为止所有的文字。档案指令档案指令多以 : 开头,跟编辑指令有点区别。例如前面提到结束编辑的指令就是 :q。现在就简单说明一下作为本篇故事的结尾::q 结束编辑(quit)如果不想存档而要放弃编辑过的档案则用 :q! 强制离开。:w 存档(write)其後可加所要存档的档名。可以将档案指令合在一起,例如 :wq 即存档後离开。zz 功能与 :wq 相同。另外值得一提的是 vi 的部份存档功能。可以用 :n,mw filename 将第 n 行到第 m 行的文字存放的所指定的 filename 里去哩。时代在变,世界在变, vi 也在变,不过大致上就这样。-vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。1、vi的基本概念基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:1) 命令行模式command mode)控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。2) 插入模式(Insert mode)只有在Insert mode下,才可以做文字输入,按ESC键可回到命令行模式。3) 底行模式(last line mode)将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号等。不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。*本文由正泰linux 搜集,整理,如需转载,请注明出处!本站有大量的linux电子教程,软件,技术文档,欢迎大家访问!站长阿泰qq:253222170*2、vi的基本操作a) 进入vi在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:$ vi myfile不过有一点要特别注意,就是您进入vi之后,是处于命令行模式(command mode),您要切换到插入模式(Insert mode)才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到插入模式(Insert mode)再说吧!b) 切换至插入模式(Insert mode)编辑文件在命令行模式(command mode)下按一下字母i就可以进入插入模式(Insert mode),这时候你就可以开始输入文字了。c) Insert 的切换您目前处于插入模式(Insert mode),您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下ESC键转到命令行模式(command mode)再删除文字。d) 退出vi及保存文件在命令行模式(command mode)下,按一下:冒号键进入Last line mode,例如:: w filename (输入 w filename将文章以指定的文件名filename保存): wq (输入wq,存盘并退出vi): q! (输入q!, 不存盘强制退出vi)3、命令行模式(command mode)功能键1). 插入模式按i切换进入插入模式insert mode,按“i”进入插入模式后是从光标当前位置开始输入文件;按a进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;按o进入插入模式后,是插入新的一行,从行首开始输入文字。2). 从插入模式切换为命令行模式按ESC键。3). 移动光标vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母h、j、k、l,分别控制光标左、下、上、右移一格。按ctrl+b:屏幕往“后”移动一页。按ctrl+f:屏幕往“前”移动一页。按ctrl+u:屏幕往“后”移动半页。按ctrl+d:屏幕往“前”移动半页。按数字0:移到文章的开头。按G:移动到文章的最后。按$:移动到光标所在行的“行尾”。按:移动到光标所在行的“行首”按w:光标跳到下个字的开头按e:光标跳到下个字的字尾按b:光标回到上个字的开头按#l:光标移到该行的第#个位置,如:5l,56l。4). 删除文字x:每按一次,删除光标所在位置的“后面”一个字符。#x:例如,6x表示删除光标所在位置的“后面”6个字符。X:大写的X,每按一次,删除光标所在位置的“前面”一个字符。#X:例如,20X表示删除光标所在位置的“前面”20个字符。dd:删除光标所在行。#dd:从光标所在行开始删除#行5). 复制yw:将光标所在之处到字尾的字符复制到缓冲区中。#yw:复制#个字到缓冲区yy:复制光标所在行到缓冲区。#yy:例如,6yy表示拷贝从光标所在的该行“往下数”6行文字。p:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。6). 替换r:替换光标所在处的字符。R:替换光标所到之处的字符,直到按下ESC键为止。7). 回复上一次操作u:如果您误执行一个命令,可以马上按下u,回到上一个操作。按多次“u”可以执行多次回复。8). 更改cw:更改光标所在处的字到字尾处c#w:例如,c3w表示更改3个字9). 跳至指定的行ctrl+g列出光标所在行的行号。#G:例如,15G,表示移动光标至文章的第15行行首。4、Last line mode下命令简介在使用last line mode之前,请记住先按ESC键确定您已经处于command mode下后,再按:冒号即可进入last line mode。A) 列出行号set nu:输入set nu后,会在文件中的每一行前面列出行号。B) 跳到文件中的某一行#:#号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。C) 查找字符/关键字:先按/键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n会往后寻找到您要的关键字为止。?关键字:先按?键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n会往前寻找到您要的关键字为止。D) 保存文件w:在冒号输入字母w就可以将文件保存起来。E) 离开viq:按q就是退出,如果无法离开vi,可以在q后跟一个!强制离开vi。qw:一般建议离开时,搭配w一起使用,这样在退出的时候还可以保存文件。5、vi命令列表1、下表列出命令模式下的一些键的功能:h左移光标一个字符l右移光标一个字符k光标上移一行j光标下移一行光标移动至行首0数字“0”,光标移至文章的开头G光标移至文章的最后$光标移动至行尾Ctrl+f向前翻屏Ctrl+b向后翻屏Ctrl+d向前翻半屏Ctrl+u向后翻半屏i在光标位置前插入字符a在光标所在位置的后一个字符开始增加o插入新的一行,从行首开始输入ESC从输入状态退至命令状态x删除光标后面的字符#x删除光标后的个字符X(大写X),删除光标前面的字符#X删除光标前面的#个字符dd删除光标所在的行#dd删除从光标所在行数的#行yw复制光标所在位置的一个字#yw复制光标所在位置的#个字yy复制光标所在位置的一行#yy复制从光标所在行数的#行p粘贴u取消操作cw更改光标所在位置的一个字#cw更改光标所在位置的#个字2、下表列出行命令模式下的一些指令w filename储存正在编辑的文件为filenamewq filename储存正在编辑的文件为filename,并退出viq!放弃所有修改,退出viset nu显示行号/或?查找,在/后输入要查找的内容n与/或?一起使用,如果查找的内容不是想要找的关键字,按n或向后(与/联用)或向前(与?联用)继续查找,直到找到为止。对于第一次用vi,有几点注意要提醒一下:1、用vi打开文件后,是处于命令行模式(command mode),您要切换到插入模式(Insert mode)才能够输入文字。切换方法:在命令行模式(command mode)下按一下字母i就可以进入插入模式(Insert mode),这时候你就可以开始输入文字了。2、编辑好后,需从插入模式切换为命令行模式才能对文件进行保存,切换方法:按ESC键。3、保存并退出文件:在命令模式下输入:wq即可!(别忘了wq前面的:)Vim,一个开放源代码的文本编辑器作 者: 小赵作者:Bram Moolenaar翻译:slimzhao开放源码的自由软件-VIM的主创者在本文中讲述了vim的开发内幕和发展方向. 同时提出慈善软件的概念并解释了Bram为何将这一概念用之于vim. 本文也深入程序内部的函数和数据结构, 作者讲述了vim这一复杂的程序是如何工作的, 并且讨论了在vim最新版6.0中的新功能.介绍不太可能你还从来没有听说过vim吧. 它作为标准的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年并没有多大的变化. 上图是GTK版Vim的一个快照, 图片上显示正在编辑的C源代码, 代码的不同部分以相应的语法高亮显示, 被查找的字符模式msg_didany以黄色的背景高亮显示. 图上还显示了一个可视化的选择(灰色背景), 绿色的闪烁光标突出显示这一模式. 在底行- VISUAL -表明当前所处的工作模式, 右边是当前光标在文件中的位置信息. Vim历史很久以前我自己有一台Amiga计算机. 因为我过去一直使用Vi, 所以我想找一个 Amiga版的类似Vi的编辑器. 我找到一些叫克隆的版本. 但没一个中意的. 所以我就挑了其中最好的一个来改进它. 最初的目标是达到所有Vi的功能. 后来我逐渐增加了一些Vi所没有的额外功能, 如多级撤消. 当它看起来已经运行得不错时, 我发布了一个Vim(意思是Vi IMitation译注 Vi的仿造品)放在由Fred Fish搞的一个公共磁盘上. 接下来开始有人发给了我一些补丁, 还有一些人努力把Vim移植到其它平台上, 如MS-DOS和Unix. 我又增加了更多的一些功能让它看起来更好用. 此时, Vim可以名正言顺地叫Vi IMProved( 译注增加版Vi)了. 后来整个源代码被重新设计并且扩展了很多, 几乎再也找不到原始的克隆版源代码的痕迹了. 起初我在Vim所作的工作完全是为了方便自己. 后来我意识到Vim同样可以方便他人, 于是我就把它公之于众. 从此我就不断地致力于让它成为一个更好的工具以服务于它的大量用户. 创造一个对他人有用的东西是很有趣的. 同时, 还有很多优秀的合作小组和用户鼓舞着我的工作. 下面是Vim的发展简历: -1991 Nov 2 - Vim 1.14: 第一版 (在Fred Fish的第591号磁盘上).1992 - Vim 1.22: 移植到Unix上. Vim开始挑战Vi1994 Aug 12 - Vim 3.0: 支持多窗口多缓冲区1996 May 29 - Vim 4.0: 支持GUI(图形用户界面) (主要是Robert Webb的努力).1998 Feb 19 - Vim 5.0: 颜色支持和语法高亮2001 Sep 26 - Vim 6.0: 折行, 插件, 垂直窗口分隔-Vim中的IMproved(增强)到底意味着什么?1.22版的Vim比之Vi已经多了很多功能. 我决定把Vi IMitation改为Vi IMproved. 随着时间的推移两者之间的差距越来越大, 现在, 几乎没有理由去使用Vi而不是Vim. 我建议所有的Vi用户转而使用Vim. 下面是其大量优点的部分摘录: - 对文本行的长度没有限制, 允许ASCII码为0的字符; 可以编辑任意类型的文件, 包括二进制文件.- 多级的撤消和重做功能: 当你的转换大小写的键盘灯不慎灯亮起来时, 无须担心误操作会毁了你的文件.- 多窗口和多缓冲区: 同时可以编辑多个文件, 并且可以在它们之间复制内容.- 语法高亮: 让你快速把握整个文档的结构, 迅速发现错误所在.- 命令行历史记录和命令补全: 更正打字失误, 快速重复历史命令, 快速键入长文件名.- 可以删除和添加矩形的文本区域: 用于编辑表格- 错误信息解析: 在Vim中运行编译器并且能根据编译产生的错误信息迅速定位到源代码中发生错误的地方(译注对程序员尤其有用)- 带有超链接(译注不同于WEB浏览器中的链接, 但功能类似)的在线帮助: 让你快速找到关于任何命令的详细帮助, 阅读相关帮助主题.- 一个功能强大的脚本语言: 可以增加你自己的扩展功能.Vim的开发几年的辛苦工作之后Vim6.0版终于完成了, 核心的工作由我亲自操刀, 另外有很多人也加入了工作, 有时他们新加一项功能然后发给我一个补丁, 以便我把他们的新功能加进去, 但是多数时间这些发来的补丁还要做一些整合的工作, 很少有人能去把握Vim的各个部分是如何协同工作的. 因为整个代码实在是太复杂了. 比如说, 有人发过来一个跨行搜索字符模式的补丁. 这表明这一功能可以如何实现以及源代码中哪个地方需要做哪些改动. 不幸的是补丁的作者使用指针操作每个文本行, 他并没有意识到这些指针可能是非法的. 我必需总览整个改过的新代码来改正它. 虽然融合这些补丁很麻烦, 但这确实能帮我把握正确的方向. 用户们在Vim邮件列表上的问题往往能指明哪些是最经常碰到的问题. 有时也有人直接发补丁给我, 或者要求增加一些新功能. 我认为这种与用户的互动和合作开发是vim的主要优势. 用户与开发者能直接地开诚布公地交流. 这也正是开源软件比之商业软件更好的原因. 发行Vim可以自由发行, 不过, 也有少许的限制. 下面一段文字是与Vim一起发行的: -摘要Vim是福利软件. 你可以自由使用和复制, 但是我们希望你能关注一下乌干达的孤儿. 参见下面的|iccf|节.如果你将Vim在CD-ROM中发行, 我很高兴能收到一份. 只是想知道世界上又有人在这样发行Vim(也可以向我的朋友们展示:-).正文对Vim不加修改的复制和发行都没有限制, Vim也可以部分发发行, 但是这段文字必需包括在内. 你也可以在发行版中包括你自己从一个未被修改的源代码中编译的可执行文件, 或者你自己的使用例子, 脚本.如果你要发行一个修改过的Vim版本, 我们(维护者)希望收到一份你的包括源代码的修订版. 或者让维护者可以通过ftp来下载; 如果所作的改动很小,(比如只是更改了Makefile) 仅仅把不同之处EMAIL给当前维护者也可以, 但无论如何如果维护者要求的话, 你必需提供源代码给他.Vim的维护者保留将这些改进包括到Vim正式版中的权利. 不过仍有商量余地, 但不允许在你不准备把你的源代码提供给维护人员的情况下发行你的修订版Vim.当前的维护者是Bram Moolenaar(BRAMVIM.ORG), 如有变动, 会在适当的地方公开声明(主要是如 网站上或comp.editors这样的新闻组). 如果实在没法联系维护者,当然你也就不再有义务把你的修订版源代码发给他.不允许从Vim源代码发行版或部分发行版中删除本文, 本文的声明也适用于Vim的前期版本以代替当时的版本声明.-我更希望给用户在使用源代码方面更大的自由, 之所以加上如上的限制是为了避免Elvis(vi的一个克隆版)过去遭遇过的事情: 有人弄到了Elvis源代码, 加了一些诸如Windows的GUI特性的东西, 然后开始拿去卖钱. 修改之后的Elvis不公开源码而且整个软件的核心代码仍然是最初的Elvis, 这实在太不公平了. 不光是因为有人拿他人的劳动去赚钱, 更重要的是他不公开源码, 从而拒绝别人对该软件进行进一步的改进. 正因为这个我才加了如上限制以保证别人对源代码做的修改必需要让我知道. 虽然这些限制仍留有余地, 比如某公司做了一个Vim的修订版然后跟我协商能否不把他们所做出的修改公之于众, 但毕竟让我保留了对自己创造的软件的决定权. 为何不用GNU的GPL(Gnu公共许可证)?GNU的公共许可证有更严格的限制, 虽然它声明保护软件自由, 但实际上限制了你所能做出的改变. 你可以做出修改, 但如果你要发行修订版的话你必需将你的所有改动公之于众, 这样人们就失去了自己持有他所修改过的源代码的权利, 我想这实际上限制了你的自由. 另一方面, 如果允许任何人都可以任意修改然后作为自己的私藏, 甚至他并未作出修改就从Vim的某部分受益, 也并不公平, 所以我决定加上这一条件: 所有对源代码的修改必需让我知道. 我可据此决定这些改动中哪些确实是对人们普遍有益的, 从而把它添加到Vim中. 而哪些只拥有少量的用户群, 所以允许某个公司从中赚点钱, 毕竟, 如果一个软件的源代码是公开的话, 很难再去要用户为此付钱. 同时我也并不认为所有的软件都应该是免费的或是都应该是开源项目, 我所知道的所有为开源软件工作的人也都为商业软件工作谋生, 或者是全职工作为其工作, 或者是正准备找, 如果没有商业软件,那这些软件业的人又能如何谋生呢? 我认为自由软件, 开源软件和商业软件将会共存, 很多商业软件不可能公开源代码, 因为这样公司就会失去竞争优势. 软件源代码的创造代价昂贵, 所以商业软件公司可不想别人能坐享其成. 由于软件的专利和版权保护力实际上是很微弱的, 不予公开在很多情况下仍然是最好的保护措施. 一个不幸的后果就是, 你无法从中学习这些商业软件是如何实现的, 也无法自己去修改你花钱买来的软件里面的BUG, 解决之道可以是公开一个软件的大部分源代码, 但保留其中核心的部分. 开源软件的前景什么软件会是开源项目而什么软件又不会是开源项目? 这一问题无从回答, 对于某一个应用领域, 是否有人愿意为此花费大量心力去创造并维护一个软件, 很大程度上依赖于一个个人的动机因素: 又没钱得, 又要花费自己的大量劳动. 这一点无法控制, 而且后果莫测. 不久以前人们还认为只有小的软件项目才可能是开放源代码的, 而大型的软件项目由于项目周期和资金方面的问题必需由一个商业软件公司来承担, 但Linux的发展打破了这想法, 而且Linux并不是个别的例外, 还有不少其它的大型的开源软件项目也都成功了, 如KDE. 现实中我发现多数人只会对自己要使用的软件感兴趣. 这正是Vim当时的情况: 我每天都用它. 这几乎成了一种制约, 因为越来越多的人开始学写程序. 这确实限制了致力于某个专用程序的人数, 理论上可以按如下公式去计算有多少人可能为开源软件工作: 人数 = 感兴趣的人数 x 能力 x 动机其中: 人数 为某个开源项目工作的人数感兴趣的人数 有兴趣使用该程序的人数能力 这其中有能力写程序的人所占的百分比动机 某个人有志于从事这个项目的比率值得注意的是, 有兴趣使用某个程序的人数也依赖于已有程序的可用性, 如果没有足够好的可替代程序或者太贵了, 人数就会升高, 如果已经有一个又便宜又好的程序. 人数就会下降. 不是说随便一个人都能写软件, 而且写不同的程序所需要的技巧差别也很大. 如果目标程序是软件工程方面的, 可能就有很多人投身其中, 这其中不乏确实有足够的编程能力的人, 如果程序是处理稀有鸟类的数据, 可能感兴趣的人数就很少. 整个公式中动机是一个最难以把握的因素, 在有能力写程序的人中又有多少人愿意去写? 这一问题听起来也蛮有趣, 看看是否这个因素也是可以估算出来的. 对这一公式的修正要引入另一因素:有多少人愿意为了别人来写程序. 尤其是为伤残人士. 不过, 我想人数很少. 假设人数最终还是被算出来了, 剩下的一个大问题就是: 事实上真的会有人这么做吗. 或者情况好一点: 就算会, 什么时间? 只要有足够的时间, 我相信每个程序都需要有人去做. 应该有一个公式也可以计算出某个程序今年是否会被写出来. 这个就留给读者们去考虑吧. 总的来说, 这个公式中有太多的不确定因素, 可以说难以预测将来会有多少开源软件. 福利软件由于Vim是一个开源软件并且免费发布, 所以用户不需要为使用它而付钱. 即使这样, 还是有一些经常使用Vim的人表示他们想通过某种方式褒奖一下我为此作出的工作. 我自己其实不需要额外的钱财, 并且我也不喜欢人们因为使用一个自由软件而付钱给我. 当时我开始考虑福利软件的概念. 主要意思是使用Vim的人要向福利事业捐赠. 这样使用Vim还是免费的, 但是如果你认为值的话, 可以为一个更好的原因付钱. 我怎么会选择了福利? 是这样的, 我曾经作为一个志愿者为一个项目在乌干达南部工作过一年. 这一地区被爱滋病严重侵害. 估计有10%到30%的成人感染有HIV. 很多身为父母的人都死了, 留下他们的孩子孤苦伶仃. 这个项目通过几种方式帮助这些嗷嗷待哺的孩子. 为他们找一个新家, 保证他们可以上学, 或给予他们医疗方面的关心, 等等. 从乌干达回来之后, 我仍然心里想着那里. 我决定至少我可以通过给他们一些钱来继续支持这个项目. 与Vim关联起来是一件顺理成章的事. 所以现在我要求Vim的用户们考虑为乌干达的孤儿们捐款. 你可以在财政上收养一个孩子, 这会使他得到长期稳定的帮助, 对孩子来说这是最好的. 由于我们只是跟志愿者们一直工作并且钱是直接送到该项目去的, 所以绝大多数钱确实能真正用于乌干达. 你可以在找到更多的相关信息.Nabasagi Morine是荷兰ICCF赞助的孩子之一.福利软件真的行得通吗?通过福利软件, 我确实收到不少给乌干达孤儿的捐赠品. 情况不定, 有时一个月也没有一次, 有时一次就有好几笔捐赠. 一些数目很少, 也有的数目很大. 我说不准具体的数目, 因为不是所有的捐赠都是经我之手, 也搞不清楚到底是不是因为Vim. 大概在1997年共收到2000美元, 1998年有4000美元. 相当多的一部分来自德国. 不光是钱的问题, 福利软件也让人知道了其他人的需要. 如果我不这样做, 就不会有那么多人知道乌干达的这个项目, 对很多人来说很难想象生命中除了挣钱和关心自己还有其它很多有价值的事情. 我也接触到一些人, 他们无力捐赠, 但是被这一概念深深触动. 在某些方面福利软件确实能改变人. 福利软件也适用于其它项目吗? 检查以下几点以确定它是否适用于你的项目: 你自己不需要钱. 如果你把钱用在比邻居更大的汽车上, 它不适合你. 你正在做一个共享软件, 但所获不多, 因为人们不愿把钱给你. 你目前提供的软件完全免费, 但你认为它值得人们为它付出点什么. 何时你会决定做福利软件, 你会使用什么理由? 最好的一个是通过这个你可以亲自接触一些人. 用户会更好地理解你的动机, 另外, 找一个你可以信任的需要钱和人们注意的组织. 我不主张支持大的组织, 尤其是他们本来就有路子联系到赞助者的组织. 福利软件的变体我不强制Vim的用户向乌干达的项目捐赠. 也没有数目上的限定, 最大的自由留给用户自己, 他也可以看完乌干达爱滋病的事然后就忘了它. 另一种做法, 用户被告知他们必需要捐赠, 并且还要指定一个最小限额. 声明必需放在一个不可能被用户忽略的地方. 但愿这一做法会带来更多的捐赠, 但是注意不要把用户给惹火了. 你必需设定一个最小限额, 否则这种强制将毫无意义. 不过确定这个最小限额到底是多少又是一个难题. 另一个更具强制性的做法是限制一些或全部的功能, 直到收到用户的捐赠. 这不是一个好办法, 因为这不合乎仁道; 这样穷人就不能用你的程序了! Vim内幕Vim已变为一个很大的项目. 这里是一个关于程序主要部分和源代码分布的概览. 我把每个文件(针对5.6版)的大小也统计进去, 以便你知道程序的各个部分到底需要多少的代码量 程序启动代码, 主要的命令循环 main.c 43538普通命令模式的命令处理 normal.c 140320执行命令行命令 ops.c 109742在屏幕上显示文本 screen.c 165136多窗口处理 window.c 52168多缓冲区处理 buffer.c 63743命令预修饰符,键映射和缩写 getchar.c 76964终端输入输出 term.c 109869文件读写 fileio.c 122685交换文件管理 memfile.c 31516缓冲行管理 memline.c 114193撤消与重做 undo.c 29014插入模式 edit.c 142302保留文件中的标记 mark.c 2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论