学习vi(1)
原文地址:http://www.gentoo.org/doc/zh_cn/vi-guide.xml#doc_chap2
1. 新手上路
本教程将会向你展示如何使用vi──一个强大的可视化编辑器。通过使用特别的备忘单方法,本教程可使你成为一名熟练的vi用户,而不要求大量的时间。在这个vi教程中,你将会学会如何移动、编辑文本、使用插入模式、复制和粘贴文本,以及使用诸如可视化模式和多窗口编辑这样重要的vim扩展。
如果你没听说过vi,或者不习惯使用vi,那么你就应该对自己负责,利用本教程赶紧学习这个最流行最强大的Linux/UNIX可视化编辑程序。
只有特别的一件事会使学习vi很困难──vi有众多的命令。为了有效地使用vi,你需要记住不少命令。这会需要很长时间,而本教程的目标之一就是不占用你的很多时间。所以,我们一开始就有一个挑战──我是如何具体地帮助你在短期就记住众多的命令?
为了处理这个挑战,在我们进行本教程的过程中,会逐渐地生成一个vi备忘单。这个单子会包括所有重要的vi命令。当你完成本教程后,你将能在忘记了某个命 令的时候参考该备忘单。时间一长,由于你记住了命令,你会渐渐地越来越不依赖于备忘单。通过使用备忘单的方式,你将能前所未有地更快学习如何使用vi!
在本指南中,我将使用几个技巧来帮助你学习。首先,我会描述某个命令是如何工作的,正如之前你所期望的。然后,我将让你试着在vi中使用该命令(为了练 习)。接下来我会让你将该命令转录到备忘单上(以备将来参考)。如果你想更快地学习vi,执行所有这些步骤是很重要的。在vi中试用命令并转录到备忘单中 将会帮助你记忆该命令。
vi有很多版本,而我将会向你展示如何使用一个叫做vim的版本。vim非常流行,并有使vi漂亮了很多的众多扩展(当我示范vim专用的命令时,我会加以说明)。如果你需要安装vim,可以从www.vim.org那里得到它。除了增强版的命令行vi,vim还增加了gvim,一个漂亮的图形化编辑器,可以被配置来调用优秀的GTK+图形化界面库。这是我系统上的gvim截图:
图示 1.1: VIM截图 |
![]() |
如果你是vi新手,请让gvim运行在你的系统上。对于初学者来说,在图形化界面下使用vi可以使事情变得简单一些。
在使用vi编辑文件之前,你需要知道如何使用vi在文件中移动。vi有许多移动命令,而我们将会看到其中的很多。为教程中的这一部分找一个不重要的文本文件,并通过输入以下命令来将它载入到vi中:
代码 2.1: 将文件载入vi |
$ vi myfile.txt
|
如果你已安装了vim,输入vim myfile.txt。如果你更喜欢使用gvim,输入gvim myfile.txt。myfile.txt应该是你系统上的某个文本文件名。
vi启动之后,你应该能在屏幕上看到载入的文本文件的一部分了。恭喜──你已经进入vi了!vi不像其他的编辑器,当它启动时处于一个叫做命令模式的特殊模式中。这意味着如果你按键盘上的l键,光标会向右移一位,而不是在当前光标位置上插入一个l。在命令模式下,键盘上的字符是用来向vi传送命令的,而不是在文本中插入文字字符的。移动命令是最重要的命令类型之一;让我们来看看其中的一些。
当在命令模式中时,你可以分别使用h、j、k和l键来向左、下、上和右移动。如果你正在使用现代版本的vi,你也可以使用方向键来达到同样的目的。h、j、k和l键很方便,这是因为一旦你适应了它们,你就可以不用把手指从主键盘上移开就在文件中四处移动。试着用h、j、k和l键(还有方向键)在文本文件中移动吧。试着用h键直到你移到了一行的开始处。注意,vi不允许你在行首时用h键转到前一行。同样地,你也不能在行尾时用l键转到下一行。
vi为跳转到当前行的首或尾提供了特别的捷径。你可以按0(零)键来跳转到一行的开始,以及$键跳转到末尾。试试它们看看。由于vi有许多便捷的移动命令,它也是一个伟大的“翻页工具”(如同more或者less命令)。用vi做翻页也会帮助你迅速学习所有的移动命令。
你也可以用<CTR>F和<CTR>B来一次前进或后退一页。现代版本的vi(比如vim)也允许你用PGUP和PGDOWN键达到同样的目的。
vi也允许你向左右按词移动。按w键移到下一个词的第一个字符。按e键移到下一个词的最后一个字符。按b键移到前一个词的第一个字符。试验一下它们。
玩过词语移动命令之后,可能你已经注意到vi将像foo-bar-oni这样的词看做是五个分开的词!这是因为vi默认地按照空格或者标点来区分词语。因此foo-bar-oni被看做是五个词:foo、-、bar、-和oni。
有时这是你想要的,而有时这却不是。幸运的是,vi也能理解“长词”的概念。vi仅按照空格或是新行分解长词。这意味着当foo-bar-oni被看做是五个vi词语时,却仅仅是一个vi长词。
你可以用一个大写的词语移动命令来跳转到前一个或后一个长词。用W键来跳转到下一个长词的第一个字符,用E键跳转到下一个长词的最后一个字符,用B键跳转到前一个长词的第一个字符。试验一下它们,然后比较一下匹配的单词和长词移动命令,直到你理解了它们之间的不同。
在我们开始把它们集中到备忘单之前,再来看看几个命令。你可以用(和)键来移到前一句或后一句的开始处。还有,你可以敲{或}键来转到当前段落或下一段落的开始处。试验一下它们。
我们已经讲过了基本的移动命令,但是你还需要知道其他一些命令。输入:q会退出vi。如果这个不灵,那你可能意外地修改了文件某处。如要让vi放弃所有更改而退出,输入:q!。现在你应该位于命令提示符处了。
在vi中,所有以:开头的命令都被称为ex模式命令。这是因为vi有一个内建的非可视化的编辑器,叫做ex。它可以像sed那样用来做基于行的编辑操作。还有,它可以用来退出,就像我们刚刚看到的那样。只要你在命令模式下敲了Q键,就会转到ex模式。如果这发生在你身上了,那你会面对一个:提示符,而且输入回车符会使整个屏幕向上翻页并退出。只要输入vi并回车就能又回到vi模式。
我们已经讲过了许多命令,现在是把它们转录到备忘单的时候了。为此你需要一张信纸,或者A4大小的纸张(我们将会把许多信息都记在这张单子上!)。这张图 片展示了我的备忘单,转录了到现在为止所有我们讲到的命令。如果可能的话请模仿我的布局,这样我们可以把所有的信息都集中在一张单子里。
图示 5.1: 备忘单 |
![]() |
让我们继续学习命令的脚步。在命令模式中,你可以输入G键来跳转到特定的行。要跳转到文件的首行,输入1G。注意G是大写的。
如果你想跳转到下一处某个文本模式的出现,输入/<regexp>后敲回车。用你正在寻找的正则表达式替换<regexp>。如果你不知道怎么使用正则表达式,不要烦躁──输入foo会移动到下一处foo出现的地方。对此你唯一需要注意的是,当你想引用^、.、$或\字符时,用反斜线符号(\)做这些符号的前缀。比如,foo\.gif会搜索下一处“foo.gif”的出现。
要向前重复搜索,敲n键。要向后重复搜索,输入N。跟往常一样,在你自己的vi编辑器里测试这些命令。你也可以输入//来重复上一次搜索。
我们已经讲过了如何使用ex命令:q来从vi中退出。如果你想要保存更改,输入:w。如果你想要将更改保存到另一个文件,输入:w filename.txt来另存为filename.txt。如果你想保存并退出,输入:x或者:wq。
在vim(还有其他高级vi编辑器,像elvis)中,你可以同时打开多个缓冲区。要在新窗口中打开文件,输入:sp filename.txt。filename.txt会在一个新的分割窗口中显示为编辑打开。要在各窗口间切换,输入<CTR>w<CTR>w(control-w两次)。你输入的任何:q、:q!、:w或:x命令只会作用于当前激活的窗口。
现在是开始学习一些简单编辑命令的时候了。此处我们将要涉及的命令被认为是简单的,是因为这些命令使你一直处于命令模式中。更复杂一些的命令会自动将你放到插入模式中──一种允许你从键盘输入文字数据的模式。我们也会涉及一点儿这些情况。
而现在,试着移到一些字符上并重复按x键。你会看到x会删除当前光标下的字符。现在,移动到文本文件中某段落的中间,然后按J(大写)。你会看到J命令让vi将下一行加到当前行末尾。现在,移到一个字符上并按r,然后输入一个新字符;你会看到原始字符被替换掉了。最后,移到文件中任一行并输入dd,你会看到dd删除了文本的当前行。
你可以靠.键来重复任一编辑命令。如果你试验一下,会看到输入dd...会删掉4行,而J......会加入4行。与往常一样,vi提供了其他便捷的方式。
你也可以用d命令加上其他命令来删除文本。比方说,dw会从当前位置一直删到下一个词的开始处;d)会一直删到下一句为止;而d}会删掉本段落的其余部分。试一下d命令和其他编辑命令,直到你适应了它们。
现在我们正在试验删除,这也是学习如何撤消更改的好时候。按u键,原始版本的vi仅允许你撤消最后一次的编辑。然而,像vim之类的现代版本vi会允许你重复按u键继续撤消对文件的更改。试着将一些d和u命令混合起来。
到更新备忘单的时候了!加上到目前为止我们讲过的命令后,你的备忘单看起来应该是这样的:
图示 6.1: 含有编辑命令的备忘单 |
![]() |
迄今为止,我们已经讲了如何在vi中移动,进行文件输入/输出,以及一些基本的编辑操作。然而,我仍然没有向你展示如何实际地输入自由格式的文本!这是故意的,因为vi的插入模式一开始有点儿复杂。但是,当你适应了插入模式之后,它的复杂性(以及灵活性)会成为优点。
在vi的插入模式中,你将能直接向屏幕里输入文本,就像在其他很多可视化编辑器中一样。一旦你输入完更改,可敲Esc键退回到命令模式。你可以按i键或a键进入插入模式。如果你按i键,你的文本会被插入到当前字符之前,而如果你按a键,你的文本会被续写到当前字符之后。记住,在你输入了文本之后,敲<ESC>来回到命令模式。
继续试着使用a和i命令。敲a键或i键,输入一些文本,然后敲ESC回到命令模式。敲完a或i后,试着敲<ENTER>看看会发生什么。试着使用方向键和<DEL>键来感受一下插入模式是怎样工作的。通过使用方向键和<DEL>键,你可以执行大量的编辑步骤,而不用重复进出插入模式。
这里有一些其他进入插入模式的便捷方式。不管你当前处于当前行的什么位置,按A键(大写)来开始在该行的末尾处续写。同样地,按I键(大写)来开始在当前行的开始处插入文本。按o键来在当前行下面创建一个新的可插入文本的空行,而按O键(大写)可在当前行之上创建一个新行。按cc可用新行将当前行全部替换掉。要将从当前位置到本行末尾之间的一切替换掉,输入c$。要将从本行开头到当前位置的一切替换掉,输入c0。
除了执行特定的操作,这些命令都能将你置于插入模式中。输入你的文本后,敲<ESC>键退回到命令模式。
迄今为止我们已经使用了一些c(change,即变更)命令,包括cc、c0和c$。cc是变更命令的一种特殊形式,同dd相似。c0和c$命令是将变更命令和移动命令结合使用的例子。在这种形式中,c和d工作方式类似,除了它将你置于插入模式之中以让你能输入可替代删除区域的文本。将一些移动命令和c结合起来,在你的文件中试试看(提示:cW、ce、c(。)
当你开始使用复合(“套餐”)命令,如d{和cw时,vi才真正地变得强大起来。除了这些命令,你也可以将数字和任一移动命令组合,比如3w,它会告诉vi向右跳转三个词。这里有一些移动“套餐”命令的范例:12b、4j。
vi除了允许(数字)(移动命令)的组合,还允许d或c和数字或移动命令组合。所以,d3w会删除后面三个单词,d2j会删除当前行和下面两行,等等。试验一下c和d相结合的移动,感受一下vi编辑是多么强大和简洁。一旦这些命令成为了第二天性,你将能以闪电般的速度编辑文件。
是再次更新备忘单的时候了。现在它看起来应该是这个样子:
图示 8.1: 含有复合命令的备忘单 |
![]() |
到目前为止,我们已经讲了如何移动、保存和退出、进行简单编辑和删除,以及使用插入模式。有了当前备忘单上记录的一切,你应该能使用vi来进行几乎所有的任务了。
但是,vi还有许多更强大的命令。在本部分,你会学习到如何使用剪切、复制和粘贴、搜索和替换,以及使用自动缩进特性。这些命令会帮助vi变得更有趣更具工作效率。
剪切和粘贴的最佳方法是使用可视化模式,它是被加入到诸如vim和elvis等现代版本的vi中的一种特殊模式。你可以将可视化模式看做为一种“高亮文本”模式。一旦文本被高亮,它就可以被复制或删除,然后粘贴。如果你正在使用gvim,即可用拖拽鼠标左键滑过某段区域的方式来高亮。
图示 8.2: 含有高亮文本的VIM |
![]() |
另外,你也可以按v键进入可视化模式(如果你在控制台中使用vi,这可能是你唯一的选择)。然后,用移动命令(通常是方向键)来移动光标,你将能高亮某个文本区域。一旦文本被高亮了,我们就准备好剪切或复制它们了。
如果你正在复制文本,敲y键(代表“yank”,即“用力拉拽”,译者注)。如果你正在剪切文本,敲d。你将回到命令模式。现在,移到你想插入剪切或复制的文本的位置,并敲P键来将其插入于光标之前,或p插入到光标之后。瞧,剪切/复制和粘贴完成了!在进入下一部分之前,试验一些复制/剪切和粘贴操作。
我们使用ex模式来替换某模式的文本。如果你想替换掉当前行中第一个匹配的模式,输入:s/<regexp>/<replacement>/并敲回车,此处<regexp>是你想匹配的模式,<replacement>是用来替换的字符串。要替换掉当前行中所有匹配的模式,输入:s/<regexp>/<replacement>/g并敲回车。要替换掉该模式在你的文件中的所有匹配(通常你是这么想的),输入:%s/<regexp>/<replacement>/g。如果你想要做全局替换,但是希望vi提示每一处变化,输入:%s/<regexp>/<replacement>/gc(代表“confirm”,即“确认”,译者注)并敲回车。
为了编辑源代码vi支持自动缩进。当你编辑源代码文件(比如.c文件)时,大多数现代版本的vi(如vim)自动启用自动缩进模式。当自动缩进启用时,你可以用<CTR>d(control-d)来向左移动一个缩进单位,或用<CTR>t(control-t)来向右移动一个缩进单位。如果自动缩进并未被自动启用,你可以通过在ex命令中输入:set autoindent的办法来手工启用之。你也可以用:set tabstop来告诉vi将制表符设定为你最喜欢的设置;:set tabstop=4相当流行。
嗯,我们已经抵达了vi教程的末尾了!在将所有高级编辑命令添加到你的备忘单之后,它看起来应该是这样的:
图示 8.3: 终极备忘单 |
![]() |
将你的备忘单常置于手边,并开始使用vi来编辑文件和编写邮件。有需要时参考备忘单;你会发现一周之内,你能记住几乎所有的命令,而你的vi工作效率会直冲云霄!
如果你想用vi做为默认编辑器,对/etc/rc.conf做如下更改:
代码 8.1: 将vi设为默认编辑器 |
(将EDITOR设为你喜欢的编辑器)
#EDITOR="/bin/nano"
EDITOR="/usr/bin/vim"
#EDITOR="/usr/bin/emacs"
|
这里有一些资源,在你继续深入学习vi时可能会有帮助:
- Vi爱好者主页,一个极棒的关于vi各方面的资源
- vim主页是满足你所有vim需要的地方
- 如果你在寻找一本优秀的老式图书,学习vi编辑器,第六版会是一个很棒的选择。它很好地涵盖了vi和vi克隆版本。
本文章的原始版本首先发布于IBM developerWorks,版权归Westtech Information Services所有。本文档是原始版本的更新版本,包含了由Gentoo Linux文档组做的各种改进。