Gentoo Logo

学习vi──备忘单方法

内容:

1.  新手上路

介绍

本教程将会向你展示如何使用vi──一个强大的可视化编辑器。通过使用特别的备忘单方法,本教程可使你成为一名熟练的vi用户,而不要求大量的时间。在这个vi教程中,你将会学会如何移动、编辑文本、使用插入模式、复制和粘贴文本,以及使用诸如可视化模式和多窗口编辑这样重要的vim扩展。

如果你没听说过vi,或者不习惯使用vi,那么你就应该对自己负责,利用本教程赶紧学习这个最流行最强大的Linux/UNIX可视化编辑程序。

关于本指南

只有特别的一件事会使学习vi很困难──vi有众多的命令。为了有效地使用vi,你需要记住不少命令。这会需要很长时间,而本教程的目标之一就是不占用你的很多时间。所以,我们一开始就有一个挑战──我是如何具体地帮助你在短期就记住众多的命令?

为了处理这个挑战,在我们进行本教程的过程中,会逐渐地生成一个vi备忘单。这个单子会包括所有重要的vi命令。当你完成本教程后,你将能在忘记了某个命令的时候参考该备忘单。时间一长,由于你记住了命令,你会渐渐地越来越不依赖于备忘单。通过使用备忘单的方式,你将能前所未有地更快学习如何使用vi!

学习过程

在本指南中,我将使用几个技巧来帮助你学习。首先,我会描述某个命令是如何工作的,正如之前你所期望的。然后,我将让你试着在vi中使用该命令(为了练习)。接下来我会让你将该命令转录到备忘单上(以备将来参考)。如果你想更快地学习vi,执行所有这些步骤是很重要的。在vi中试用命令并转录到备忘单中将会帮助你记忆该命令。

介绍vim

vi有很多版本,而我将会向你展示如何使用一个叫做vim的版本。vim非常流行,并有使vi漂亮了很多的众多扩展(当我示范vim专用的命令时,我会加以说明)。如果你需要安装vim,可以从www.vim.org那里得到它。除了增强版的命令行vi,vim还增加了gvim,一个漂亮的图形化编辑器,可以被配置来调用优秀的GTK+图形化界面库。这是我系统上的gvim截图:


图示 1.1: VIM截图

Fig. 1: 截图

如果你是vi新手,请让gvim运行在你的系统上。对于初学者来说,在图形化界面下使用vi可以使事情变得简单一些。

2.  第一步

打开文件

在使用vi编辑文件之前,你需要知道如何使用vi在文件中移动。vi有许多移动命令,而我们将会看到其中的很多。为教程中的这一部分找一个不重要的文本文件,并通过输入以下命令来将它载入到vi中:

代码 2.1: 将文件载入vi

$ vi myfile.txt

如果你已安装了vim,输入vim myfile.txt。如果你更喜欢使用gvim,输入gvim myfile.txtmyfile.txt应该是你系统上的某个文本文件名。

vi内部

vi启动之后,你应该能在屏幕上看到载入的文本文件的一部分了。恭喜──你已经进入vi了!vi不像其他的编辑器,当它启动时处于一个叫做命令模式的特殊模式中。这意味着如果你按键盘上的l键,光标会向右移一位,而不是在当前光标位置上插入一个l。在命令模式下,键盘上的字符是用来向vi传送命令的,而不是在文本中插入文字字符的。移动命令是最重要的命令类型之一;让我们来看看其中的一些。

3.  移动

vi中的移动,第1部分

当在命令模式中时,你可以分别使用hjkl键来向左、下、上和右移动。如果你正在使用现代版本的vi,你也可以使用方向键来达到同样的目的。hjkl键很方便,这是因为一旦你适应了它们,你就可以不用把手指从主键盘上移开就在文件中四处移动。试着用hjkl键(还有方向键)在文本文件中移动吧。试着用h键直到你移到了一行的开始处。注意,vi不允许你在行首时用h键转到前一行。同样地,你也不能在行尾时用l键转到下一行。

vi中的移动,第2部分

vi为跳转到当前行的首或尾提供了特别的捷径。你可以按0(零)键来跳转到一行的开始,以及$键跳转到末尾。试试它们看看。由于vi有许多便捷的移动命令,它也是一个伟大的“翻页工具”(如同more或者less命令)。用vi做翻页也会帮助你迅速学习所有的移动命令。

你也可以用<CTR>F<CTR>B来一次前进或后退一页。现代版本的vi(比如vim)也允许你用PGUPPGDOWN键达到同样的目的。

词语移动,第1部分

vi也允许你向左右按词移动。按w键移到下一个词的第一个字符。按e键移到下一个词的最后一个字符。按b键移到前一个词的第一个字符。试验一下它们。

词语移动,第2部分

玩过词语移动命令之后,可能你已经注意到vi将像foo-bar-oni这样的词看做是五个分开的词!这是因为vi默认地按照空格或者标点来区分词语。因此foo-bar-oni被看做是五个词:foo-bar-oni

有时这是你想要的,而有时这却不是。幸运的是,vi也能理解“长词”的概念。vi仅按照空格或是新行分解长词。这意味着当foo-bar-oni被看做是五个vi词语时,却仅仅是一个vi长词。

词语移动,第3部分

你可以用一个大写的词语移动命令来跳转到前一个或后一个长词。用W键来跳转到下一个长词的第一个字符,用E键跳转到下一个长词的最后一个字符,用B键跳转到前一个长词的第一个字符。试验一下它们,然后比较一下匹配的单词和长词移动命令,直到你理解了它们之间的不同。

更大的移动

在我们开始把它们集中到备忘单之前,再来看看几个命令。你可以用()键来移到前一句或后一句的开始处。还有,你可以敲{}键来转到当前段落或下一段落的开始处。试验一下它们。

4.  退出

我们已经讲过了基本的移动命令,但是你还需要知道其他一些命令。输入:q会退出vi。如果这个不灵,那你可能意外地修改了文件某处。如要让vi放弃所有更改而退出,输入:q!。现在你应该位于命令提示符处了。

在vi中,所有以:开头的命令都被称为ex模式命令。这是因为vi有一个内建的非可视化的编辑器,叫做ex。它可以像sed那样用来做基于行的编辑操作。还有,它可以用来退出,就像我们刚刚看到的那样。只要你在命令模式下敲了Q键,就会转到ex模式。如果这发生在你身上了,那你会面对一个:提示符,而且输入回车符会使整个屏幕向上翻页并退出。只要输入vi并回车就能又回到vi模式。

5.  备忘单

备忘单的开端

我们已经讲过了许多命令,现在是把它们转录到备忘单的时候了。为此你需要一张信纸,或者A4大小的纸张(我们将会把许多信息都记在这张单子上!)。这张图片展示了我的备忘单,转录了到现在为止所有我们讲到的命令。如果可能的话请模仿我的布局,这样我们可以把所有的信息都集中在一张单子里。


图示 5.1: 备忘单

Fig. 1: 备忘单的第一部分

vi杂项

让我们继续学习命令的脚步。在命令模式中,你可以输入G键来跳转到特定的行。要跳转到文件的首行,输入1G。注意G是大写的。

如果你想跳转到下一处某个文本模式的出现,输入/<regexp>后敲回车。用你正在寻找的正则表达式替换<regexp>。如果你不知道怎么使用正则表达式,不要烦躁──输入foo会移动到下一处foo出现的地方。对此你唯一需要注意的是,当你想引用^.$\字符时,用反斜线符号(\)做这些符号的前缀。比如,foo\.gif会搜索下一处“foo.gif”的出现。

要向前重复搜索,敲n键。要向后重复搜索,输入N。跟往常一样,在你自己的vi编辑器里测试这些命令。你也可以输入//来重复上一次搜索。

6.  保存和编辑

保存和另存为

我们已经讲过了如何使用ex命令:q来从vi中退出。如果你想要保存更改,输入:w。如果你想要将更改保存到另一个文件,输入:w filename.txt来另存为filename.txt。如果你想保存并退出,输入:x或者:wq

在vim(还有其他高级vi编辑器,像elvis)中,你可以同时打开多个缓冲区。要在新窗口中打开文件,输入:sp filename.txtfilename.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键继续撤消对文件的更改。试着将一些du命令混合起来。

更新备忘单

到更新备忘单的时候了!加上到目前为止我们讲过的命令后,你的备忘单看起来应该是这样的:


图示 6.1: 含有编辑命令的备忘单

Fig. 1: 备忘单

7.  插入模式

迄今为止,我们已经讲了如何在vi中移动,进行文件输入/输出,以及一些基本的编辑操作。然而,我仍然没有向你展示如何实际地输入自由格式的文本!这是故意的,因为vi的插入模式一开始有点儿复杂。但是,当你适应了插入模式之后,它的复杂性(以及灵活性)会成为优点。

在vi的插入模式中,你将能直接向屏幕里输入文本,就像在其他很多可视化编辑器中一样。一旦你输入完更改,可敲Esc键退回到命令模式。你可以按i键或a键进入插入模式。如果你按i键,你的文本会被插入到当前字符之前,而如果你按a键,你的文本会被续写到当前字符之后。记住,在你输入了文本之后,敲<ESC>来回到命令模式。

插入模式的益处

继续试着使用ai命令。敲a键或i键,输入一些文本,然后敲ESC回到命令模式。敲完ai后,试着敲<ENTER>看看会发生什么。试着使用方向键和<DEL>键来感受一下插入模式是怎样工作的。通过使用方向键和<DEL>键,你可以执行大量的编辑步骤,而不用重复进出插入模式。

插入选项

这里有一些其他进入插入模式的便捷方式。不管你当前处于当前行的什么位置,按A键(大写)来开始在该行的末尾处续写。同样地,按I键(大写)来开始在当前行的开始处插入文本。按o键来在当前行下面创建一个新的可插入文本的空行,而按O键(大写)可在当前行之上创建一个新行。按cc可用新行将当前行全部替换掉。要将从当前位置到本行末尾之间的一切替换掉,输入c$。要将从本行开头到当前位置的一切替换掉,输入c0

除了执行特定的操作,这些命令都能将你置于插入模式中。输入你的文本后,敲<ESC>键退回到命令模式。

更改文本

迄今为止我们已经使用了一些c(change,即变更)命令,包括ccc0c$cc是变更命令的一种特殊形式,同dd相似。c0c$命令是将变更命令和移动命令结合使用的例子。在这种形式中,cd工作方式类似,除了它将你置于插入模式之中以让你能输入可替代删除区域的文本。将一些移动命令和c结合起来,在你的文件中试试看(提示:cWcec(。)

8.  复合命令

当你开始使用复合(“套餐”)命令,如d{cw时,vi才真正地变得强大起来。除了这些命令,你也可以将数字和任一移动命令组合,比如3w,它会告诉vi向右跳转三个词。这里有一些移动“套餐”命令的范例:12b4j

vi除了允许(数字)(移动命令)的组合,还允许dc和数字或移动命令组合。所以,d3w会删除后面三个单词,d2j会删除当前行和下面两行,等等。试验一下cd相结合的移动,感受一下vi编辑是多么强大和简洁。一旦这些命令成为了第二天性,你将能以闪电般的速度编辑文件。

更新备忘单

是再次更新备忘单的时候了。现在它看起来应该是这个样子:


图示 8.1: 含有复合命令的备忘单

Fig. 1: 备忘单

提高工作效率的特性

到目前为止,我们已经讲了如何移动、保存和退出、进行简单编辑和删除,以及使用插入模式。有了当前备忘单上记录的一切,你应该能使用vi来进行几乎所有的任务了。

但是,vi还有许多更强大的命令。在本部分,你会学习到如何使用剪切复制粘贴搜索替换,以及使用自动缩进特性。这些命令会帮助vi变得更有趣更具工作效率。

可视化模式

剪切和粘贴的最佳方法是使用可视化模式,它是被加入到诸如vim和elvis等现代版本的vi中的一种特殊模式。你可以将可视化模式看做为一种“高亮文本”模式。一旦文本被高亮,它就可以被复制或删除,然后粘贴。如果你正在使用gvim,即可用拖拽鼠标左键滑过某段区域的方式来高亮。


图示 8.2: 含有高亮文本的VIM

Fig. 2: 高亮的文本

另外,你也可以按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: 终极备忘单

Fig. 3: 备忘单

将你的备忘单常置于手边,并开始使用vi来编辑文件和编写邮件。有需要时参考备忘单;你会发现一周之内,你能记住几乎所有的命令,而你的vi工作效率会直冲云霄!

如果你想用vi做为默认编辑器,对/etc/rc.conf做如下更改:

代码 8.1: 将vi设为默认编辑器

(将EDITOR设为你喜欢的编辑器)
#EDITOR="/bin/nano"
EDITOR="/usr/bin/vim"
#EDITOR="/usr/bin/emacs"

资源

这里有一些资源,在你继续深入学习vi时可能会有帮助:

关于本文档

本文章的原始版本首先发布于IBM developerWorks,版权归Westtech Information Services所有。本文档是原始版本的更新版本,包含了由Gentoo Linux文档组做的各种改进。



打印

更新于2008年 6月 2日

本翻译的原始版本已经不再被维护

总结: 本指南将教你如何使用vi,并使用备忘单的方式来加快学习进程。这会是满足新手需要的第一份vi指南。

Daniel Robbins
Author

Eric Stockbridge
Author

Benny Chuang
Editor

  井诚
译者

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.