简洁的想法

仁爱、喜乐、和平、忍耐、恩慈、良善、信实、温柔、节制

学习vi -- 小抄的方法

| Comments

转自Gentoo文档繁体版本:
http://www.gentoo.org/doc/zh_tw/vi-guide.xml

1. 刚开始

简介

这份文件将会教您如何去使用vi,一个功能强大的视觉化编辑器。并且使用较特别的小抄的方法,这份文件是设计用来使您不需要花费太多时间即可以变成一个精通於vi的使用者。在这份文件中,您会学到在插入模式下如何移动,编辑文字,复制贴上文字和vi特别的功能,就像视觉模式和多视窗编辑。

如果您不清楚或在用vi时感到不方便,您可以藉由这一篇文件来使您快速的学得在Linux/UNIX上最普遍且功能强大的视觉化编辑程式之一。

关於这篇文件

在学习vi时常常会遇到一个困难点 — vi有一大推指令。为了要能有效的利用vi ,您必须要去记忆其中的一些指令。这会花去您一段时间,而这份文件的其中一个目地就是不希望花去您太多时间。所以,首先我们必须先挑战 - 我们应该如何帮您在短短的时间内记忆一大堆指令?

为了要面对这挑战,就像是我之前提过的,我们将会把他通通放在一个vi的小抄里。这个小抄将会包含所有vi重要的指令。在您阅读完这份文件後,如果您忘记一些特定的指令您可以参考这一份小抄。经过一段时间,当您已经记住这些指令您依靠小抄的机会就会越来越小了。藉由利用做小抄的方法,您将可以快点学会如何使用vi。

学习的步骤

在这份文件中,我们将会用一些方法去帮助您学习。第一步,我们将会为您解释一些特定的指令是如何运作,您应该会希望知道这个。再来,我们将会要求您试着在vi中使用这些指令(用来练习),而且再来我们希望您能将这些指令写到您的小抄(为了以後参考用)中。如果您想要更快的学习vi,一步步跟着步骤做是很重要的。在vi中试试指令然後写到您的小抄中,这将会帮助您记忆这些指令。

vim简介

vi有很多版本,我们将要为您介绍vi的其中一个版本叫vim。vim是一个普遍,且有更多的功能使得vi更好用(无论如何,我们将会用例子来说明,并且为他做个笔记)。如果您想安装vim,您可以从www.vim.org 取得。另外,为了增加vi的功能,也有gvim,一个可以被设定用在 GTK+ gui library的好用的图形化编辑器。以下是我的系统上面的gvim快照:

圖示 1.1: VIM快照

如果您是vi的新手,试着在您的系统上安装gvim。在gui介面使用vi可以让初心者较容易学习。

2. 第一步

选一个档案

在您使用vi去编辑档案之前,您必须知道如何利用vi在一份资料中移动。vi有一堆移动的指令,我们将会带您看看其中的一些。在文件的这一部分,请藉由以下指令将一个不重要的文字档案载入进vi:

原始码 2.1: 载入一个档案到vi中
$ vi myfile.txt

在vi环境中

进入vi後,您应该会看到一部分的文字档案内容在您的萤幕上出现。恭喜
-您已经在 vi环境中了

3. 移动

在vi中移动,第一部份

当在指令模式中,您可以利用h,j,k和l 来将游标往左,下,上和右移动。当您在较新版本的vi中,您也可以使用方向键来达到这目地。而h,j,k和l没有取消,是因为当您习惯使用他们时,您的手可以不需移到方向键就可以移动游标。请试着利用h,j,k和l(和方向键)在档案中移动。试试利用h来移动游标直到移至一行的第一个位置。请注意当游标已经在一行的第一个位置如果您再继续按h,vi并不会将游标跳到上一行的位置。同样的,您也不行藉由输入l来从一行的最後一个字元移到上一行。

在vi中移动,第二部份

vi有提供一些用来在一行开头或结尾处移动的热键。您可以按下0 (零) 来跳到一行的一第一个字母,或者用$来跳到最後一个字母。请试试看吧! 自从vi有了这些如此有用的移动指令後,这使得vi变得有一点像"pager"(就像是 more或是less指令)。如果您将vi当作pager来学习也会帮助您来更快速的学习移动的指令。

您也可以利用<CTR>F和 <CTR>B来一次往下或往上移动一页。在较新版的vi(例如vim)也允许您使用PGUP和PGDOWN 键来达到一样的结果。

文字中移动,第一部份

vi也允许您一次移动到单字的左边或右边。如果要移动到下一个字的第一字元,请按w。如果要移动到下一个字的最後字母,请按e。如您要移动到上一个字的第一个字母,请按b。试试看吧!

文字中移动,第二部份

在介绍过单字的移动指令後,您也许会发现vi将foo-bar-oni当成五个分开的单字!这是因为vi预设是利用空白或符号来分辨单字。因此foo-bar-oni 会被分成以下几个单字:foo, , bar, – and oni.

有时候结果是您想要的,有时候则不是。幸运的,vi也能知道如何去辨别"bigword" 。vi可以只藉由空白或newlines来判定bigwords。这表示foo-bar-oni 会被分成五个单字,而只会被分成一个vi的bigword。

文字中移动,第三部份

为了要往前或往後移动一个bigword,您可以利用大写的字母移动指令。利用W来移动到下一个bigword的第一个字母,E来跳到下一个 bigword的最後一个字母,而可以利用B来移动道前一个bigword的第一个字母。试试看吧,顺便比较看看单字和bigword的结果这样您就可以了解他们的差别。

大一点的移动

我们刚刚已经学到一些指令了,现在可以开始将他们通通写进小抄中。您可以利用(和)符号在上一节或下一节间移动。再来,您可以按下{ 或}在目前这段的开始或下一段的开始间移动。试试看吧!

4. 离开

我们已经介绍了一些基本移动指令,但是还有一些连结的指令您必须应该要知道。输入:q会离开vi。如果这没有作用,可能是您有更动到档案内容。如果您想离开vi,不管您是否有改变档案内容,可以输入:q!。您现在应该已经回到指令列了。

在vi中,任何的指令都是利用:做为开头这通常被称作ex-mode指令。这是因为vi有内建一个飞视觉化的编辑器叫做ex。他可以被称为一个以列为基本的小型编辑系统。再来,用来离开vi,刚刚我们已经看过了。如果您曾经在指令模式下输入Q,您会转换到ex模式中。如果您曾遇过这情形,您会被要求加上 : 符号,而且按下enter後他会将内部的画面往上卷。为了要回到vi,您可以输入vi并按下enter。

5. 小抄

小抄的一开始

我们已经介绍很多指令了,这时候也该是将他们写到我们小抄上的时候。为了写小抄,您将会需要一张信纸或一张A4大小的纸(我们将会将一大堆的资料写在小抄上面!)。这边有我写的小抄的照片,里面包含到目前为止所讲过的所有指令。如果可以您可以试着跟着我的格式将所有资料写上去。

[圖示 5.1: 小抄


vi的其他功能

让我们继续快速的学习我们的vi指令。在指令模式下,您可以藉由输入G来一次移动到某一行。如果要移动到第一行,请输入1G。请注意G是大写。

如果您想要移到下一个特定的文字片断,请输入/<regexp>并且按下 enter。请把<regexp>换成您要找寻的文字片断。如果您不晓得要如何使用正规化表示,别怕 -
输入/foo 将会移动到下一个foo出现的位置。唯一您需要注意的是,当您想要找寻文字的^,.,$或 \符号。请在前面加上倒斜线 (\),如此您就可以找到他。举例来说, /foo\.gif将会搜寻下一个叫"foo.gif"的文字片断。

如果想往前寻找,请按n。要往後寻找,请按N。同样的,请在您的vi 环境中试试看。您也可以试试看利用//来移动到最後找到的地方。

6. 储存和编辑

储存和另存

我们已经让您试过如何利用ex指令的:q来离开vi。如果您想要储存您的变更,请输入:w。如果您想将他存到另一个档案,请输入:w filename.txt 来将他存成filename.txt。如果您想要储存且离开,请输入:x或:wq。

在vi(或是其他从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……会加入四行。同样的,vi 也有提供其他方便使用的捷径。

要删除文字,您也可以利用d指令来与任何移动指令结合。例如, dw会删除从目前位置到下一个字中间的字母;d)会删除到下一节的结尾,而d}则会删除目前这一段所剩下的字。您可以试着结合其他的指令直到您可以好好用他。

回复上一步!

我们已经学会了删除,现在应该是学习如何去回复任何改变。藉由按下u,较旧版本的vi可以允许您只回复到上一个动作。但是在较新版本的vi中可以允许您重覆按下u来持续回复任何在您档案中所做的改变。请试试看将一些d 的指令和u结合一起用。

更新您的小抄

是时後来更新小抄了!在更新完所有我们讲过的指令,您的小抄应该起来像这样子:
圖示 6.1: 含編輯指令的小抄


7. 插入模式

到目前为止,我们已经说明完如何在vi中移动,操作档案i/o,和操作一些简单的编辑指令。但是,我们到现在并没有教您如何在自由的型式中输入文字! 这是故意的,因为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)

8. 组合指令

vi真正变成有用是当你开始使用组合的("结合")指令,就像是d{ 和cw。除了这些指令外,您也可以结合一些数字和移动指令,就像是3w,这会告诉vi一次往右跳三个字。这里有一些移动"结合"指令的范例:12b,4j。

vi,为了要让(数字)(移动指令)结合,也允许d或c去跟数字或移动指令作结合。所以d3w将会删除後三个字,d2j会删除目前和接下来两行,等等。试试看一些c和d结合移动指令来感受一下vi的强大功能和简单的编辑指令吧。一旦这些指令变成潜意识,您将可以非常快速的去编辑档案。

更新您的小抄

又到了我们更新小超的时间啦!到目前为止应该长的像这样子:
圖示 8.1: 有組合指令的小抄


众多的特色

目前为止,我们已经介绍了如何移动,存档和离开,进行简单的编辑和删除,和使用插入模式。目前为止看到在小抄上的所有东西,您应该可以使用vi 来进行任何任务了。

然而,vi虽然已经有如此多有用的指令。在这一节中,您将会学到如何剪下 ,复制和贴上,搜寻和取代,及如何使用自动断行 的功能。这些指令都将会使得vi更有趣和更有用。

视觉模式

要使用复制和贴上最好的方式就是用视觉模式,一种特别的模式已经在新的版本中加入,就像是vim和elvis。您可以把视觉模式想成"高亮度文字"模式。一旦文字被提高亮度,他就可以被复制或删除,然後贴上。如果您使用gvim,您可以利用滑鼠左键简单的拖拉选取您想要的特定区域:
圖示 8.2: 有被提高亮度文字的VIM


除此知外,您可以藉由按下v来进入视觉模式(如果您在指令列下使用vi ,这可能是您唯一的选项。) 然後,利用移动指令来移动游标(基本上是方向键) ,您将可以将一个区域的文字提高亮度。一但提高了,接下来您可以准备剪下或贴上文字了。

假如您想要复制文字,按y(意思是"yank")。假如您想要剪下文字,按d。您将会回到指令模式。现在,移动到您想要插入您剪下或复制文字的地方,然後按P在游标的後面插入文字,或p在游标前插入。恭喜,剪下/复制和贴上已经完成!在进行下一个比较进阶的节之前请试试看复制/剪下和贴上的操作。

取代文字

为了要取代片断的文字,我们使用ex模式。如果您想要取代在该行的第一个片断,请输入:s/<regexp>/<replacement>/然後按下<ENTER>其中 <regexp>是您所想要寻找且<取代> 的字串。如果要取代您那行中所有的片断,请输入:s/<regexp>/<replacement>/g 然後按下enter。如果要取代您档案中所有的片断(通常这是您想要的),请输入:%s/<regexp>/<replacement>/g然後按下enter。如果您想要进行全域取代,但是需要vi提醒您做每一个改变,请输入 :%s/<regexp>/<replacement>/gc(c可以想成是"confirm") 然後按下<ENTER>

缩行

vi支援自动缩行,是用於您想要编辑原始码时。大部份较新版本的vi中(像vim) 会自动开启自动缩行模式在您编辑原始码档案时(举例:像.c档)。当自动缩行被启动时,您可以利用<CTR>d(control-d)来往左缩行一格,利用<CTR>t (control-t)来往右缩行一格。如果自动缩行的功能没有自动启动,您可以藉由在ex下输入:set autoindent 来自动启动自动缩排。您也可以利用:set tabstop指令来设定您想要的缩排长度;:set tabstop=4是比较普遍使用的。

我们最後的小抄

在增加完小抄上所有的进阶指令,他应该会长成这个样子:
圖示 8.3: 最後的小抄

请随身带着小抄,然後开始利用vi来编辑档案和编排emails。当需要时拿看小抄;您将会发现在一个星期内,您将会记忆住所有的指令然後您的 vi技巧将会突飞猛进!

如果您想要使vi变成您预设的编辑器,请作一些改变到/etc/rc.conf:

原始码 8.1: 设定vi变成预设的编辑器
(设定EDITOR变成您想要的编辑器。)
#EDITOR=“/bin/nano”
EDITOR=“/usr/bin/vim”
#EDITOR=“/usr/bin/emacs”


资源

当您继续学习vi时,下面有一些资源您也许需要:

The vi Lovers Home Page,超棒的资源关於vi的所有东西
The vim homepage这里可以 满足您想知道vim的所有东西
如果正在寻找一些好的,经典书籍,学习 vi 编辑器,第六版 将会是一个最好的选择。包含很多好的vi资讯跟vi的演进。
关於这很文件

最原始版本是发布在IBM developerWorks,为Westtech Information Services 的财产。这文件是原始版本的更新版,并且Gentoo Linux文件组改进很多东西。

Comments