linux vi

如题所述

第1个回答  2010-12-14

Vi的使用

vi(visual interpreter)为使用者提供了一个全屏幕的窗口编辑平台,窗口中一次可容纳20多行的编辑内容,并可进行上下屏的滚动。vi是全屏幕编辑程序,比ed的功能有所改进。使用vi编辑文件有大小限制,这个限制随UNIX版本的不同而不同。vi也是UNIX系统中配备的基本编辑工具之一。

3.2.1   如何进入vi、退出vi及保存一个文件

在vi的使用中,用户可在三种方式下工作,这三种方式可协助使用者完成文本输入、文本保存和文本修改等工作。它们是:

1)命令行方式:命令行方式是用户进入vi后的初始方式。在此方式中,用户可输入vi的命令,请求vi为你完成不同的工作。例如:光标移动、删除字符、删除单词等,也可以进行选定内容的复制、写盘及退出vi等工作。从命令行方式可切换到其他两种工作方式中,在其他两种工作方式下也可返回到命令行方式。

2)插入编辑方式:在插入编辑方式下,用户可在编写的文件中添加或输入文本及程序代码。对初学者来说应注意的是:插入方式并非是进入vi的初始状态。须使用vi的“i”、“a”等命令进行切换。当用户完成插入操作后,须点击ESC键结束插入方式返回命令行方式。

3)末行命令方式:在vi的末行命令方式下,有许多操作功能类似于命令行方式,只是它的命令输入出现在屏幕的最底部,在命令行方式下输入:“:”、“/”、“?”等字符可进入末行命令方式。在末行命令方式下,当输入的命令完成后,vi控制程序会自动返回到命令行方式下等待下一步的操作。

用户从UNIX的shell中进入vi、退出vi或在vi内部工作的三种方式之间进行转换的过程可用图

3-1描述。图中方框中描述的是用户所处的状态,箭头表示从一种状态向另一种状态的转换,箭头上标注的文字表示从vi的一种方式转换到另一种方式时需使用的命令或功能键。了解vi的这些状态转换和状态转换命令有助于更好地把握vi的使用技巧。

 

图3-1   vi中多种工作方式的转换关系

3.2.2   命令行方式下的常用命令

在vi的命令行方式下,用户可以输入相关的操作命令完成对vi的控制和对文本的编辑调整。vi中可使用的命令如表3-5所示:

表3-5   vi中使用的命令

  

  

3.2.3   末行命令方式下的常用命令

在vi的末行命令方式下也可以使用一些操作命令,完成对编辑文本的控制和管理。它与vi的命令行方式命令形成互补,命令行方式命令更多地是对编辑文本在屏幕中显示格式和位置的修改与调整,而末行命令方式命令则主要对文本全文或文件本身进行操作。末行命令方式下的操作命令如表3-6所示:

表3-6   末行命令方式下的操作命令

(续)

 

 

3.2.4   进入插入编辑方式的常用命令

在vi中可以有多种方式从命令行或末行命令方式进入插入编辑方式中,例如可以使用下面表3-7列出的命令:

表3-7   进入插入编辑方式的常用命令

  

3.2.5   使用vi的注意事项

由于UNIX系统的vi编辑器是从行编辑器ed发展而来的,实事求是地讲,它不如目前流行的微软推出的同类产品易用、直观。但它是UNIX系统中配备的基本编辑工具,在多种版本的UNIX系统中都会内置ed和vi编辑器,因此掌握这些工具的使用方法还是很有必要的。作为UNIX系统的初学者,在开始使用vi时可能会感到有一些不便和困惑,这对学习vi是十分不利的,因为这样可能会使用户丧失使用vi的信心。针对这类问题我们在这里列出一些使用vi时应注意的事项和对可能碰到问题的解决方法,希望能对初学者有所帮助。当然,对vi的编辑技巧和使用经验还需要使用者在学习和使用中不断地自我积累。

1)对vi的多种方式使用不习惯,在插入编辑方式和命令方式切换时出现混乱,使用户不知所措。这种情况的产生常常是由于:还未输入插入命令,便开始进行文本输入,从而使所编信息无法输入到文本的正确位置上;另外当插入信息完成后,还未按[Esc]键结束插入编辑方式,就又输入了其他的命令信息,从而使命令无法执行。当出现这些情况时,用户首先要确定自己所处的操作方式,然后再决定下一步做什么工作。若不易搞清楚当前所处的状态时,可以使用[Esc]键退回到命令输入方式重新进行输入。

2)在做文档编辑时,vi的编辑屏幕产生混乱状态。这种状态的产生往往是由于屏幕刷新有误,此时可以用Ctrl+l命令对屏幕进行刷新,有的终端也可以使用Ctrl+r进行屏幕刷新。

3)对屏幕中显示的信息进行操作时系统没有反应。出现这种情况有可能是由于屏幕的输出进程被挂起(如不慎输入了Ctrl+s键等),此时可用Ctrl+q键进行解脱,然后重新进行输入。

4)当用户编辑工作完成后,出现不能正确退出vi的现象。出现这种情况有可能是此刻系统出现了意外情况。例如:文件系统的容量超出、用户对所编辑的文件没有写权限等。如果用强行退出命令“:w!”仍无法退出时,可以用“:w newfile”命令将文件进行重新存盘,以减少工作中的损失。而这个新文件newfile应是用户有写权限的文件,如果暂时没有可以使用的文件,可以借助/tmp目录的特殊性创建一个新的文件。因为UNIX系统中的/tmp目录是一个临时目录,系统启动时总要刷新该目录。因此操作系统一般情况下不对此目录进行保护,利用这个特点可将无法存储的文件暂时存入其中,这样可以解燃眉之急。但当处理完成后,切记应对此目录中的有用文件及时进行转储,否则依然会造成信息损失。

5)在使用vi时,万一发生了系统掉电或系统突然宕机的情况怎么办?工作时发生掉电和宕机无疑对于正在进行的工作是一种损失,但UNIX系统的vi程序可以使你的损失降到最小。因为对vi的操作实际上是在对编辑缓冲区进行操作,而系统会经常自动地保存编辑缓冲区的内容。因此宕机后用户可以在下次登录系统后,用-r选项进入vi将系统中最后保存的版本恢复出来。例如:

1. % vi  -r  file-to-be-edit 

这样起码可以得到最近一次编辑文档存储的内容。

vi的学习更应侧重于实际的应用。在了解了vi的使用规则后就应当多上机操作,不断地积累经验,逐步使自己成为vi编辑能手。

3.2.6   vi环境的设置

通过设置(或取消设置)某些选项,用户可以对编辑器vi的环境进行个性化定制,这种定制可以是临时的也可以是永久的。

1. 临时更改vi的环境

每当进入vi时,选项均设置为特定的默认值,用户可以自行修改这些设置,直到满意为止。当退出vi时,所有选项均还原为默认值。这种方式是临时性修改方式。在这种方式下,每进入vi时都需要重新设置选项,但选项的修改并不对下一次的使用产生影响。

要查看所有默认选项,请键入:

1. :set all    

2.     /*这里的冒号表示使用vi的末行方式命令*/ 

要更改这些选项的值时,可使用:set命令:

1. :set option 

这里option是要使用的编辑器选项的名称,具体内容参阅表3-8中关于vi选项的说明。

要取消设置(撤销)某个编辑器选项,请在选项前键入no:

1. :set no option 

表3-8   vi编辑器常用选项表

  

(续)

  

2. 永久改变vi环境

为了避免每次进入vi时都要设置选项或定义缩写或宏,在Linux中可以将所有常用的选项和定义放入用户主目录下的.exrc文件中。这样每次进入vi时,系统都会自动读取此文件,将已定制后的vi环境保持下来。

要创建或更改.exrc文件,请执行以下操作序列:

1. % cd   

2. % vi .exrc 

键入希望设置的永久性选项、单词缩写和宏(不要在命令前加冒号)。键入:wq,保存文本并退出vi。

以上举例说明了一些更改vi整体行为的选项。另外,还可以使用ab定义常用表达式的缩写形式,供vi识别时使用,这样可以使vi的编辑工作更方便。下面给出一个修改.exrc文件的例子。

创建一个.exrc文件,使其包括以下选项和缩写内容:

1. set wm=8 

2. set showmode  

3. ab eeg Electrical Engineering 

保存并关闭文件后,重新启动vi可看到对vi环境所做的更改。这时,每次进入vi时你都会发现:

右边距自动包含8个空格(更改了默认值0),回车键将出现在大约72个空格后。

处于文本插入模式时,屏幕右下角将显示“INPUT MODE”。

无论何时输入eeg,此缩写都会自动扩展成Electrical Engineering。

退出VI的方法

当编辑完文件,准备退出Vi返回到shell时,可以使用以下几种方法之一。

 在命令模式中,连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出,返回到shell;若当前编辑的文件没被修改过,则Vi直接退出, 返回到shell。

 在末行模式下,输入命令

  :w

  Vi保存当前编辑文件,但并不退出,而是继续等待用户输入命令。在使用w命令时,可以再给编辑文件起一个新的文件名。

  :w newfile

  此时Vi将把当前文件的内容保存到指定的newfile中,而原有文件保持不变。若newfile是一个已存在的文件,则Vi在显示窗口的状态行给出提示信息:

  File exists (use ! to override)

  此时,若用户真的希望用文件的当前内容替换newfile中原有内容,可使用命令

  :w! newfile

  否则可选择另外的文件名来保存当前文件。

   在末行模式下,输入命令

  :q

  系统退出Vi返回到shell。若在用此命令退出Vi时,编辑文件没有被保存,则Vi在显示窗口的最末行显示如下信息:

  No write since last change (use ! to overrides)

  提示用户该文件被修改后没有保存,然后Vi并不退出,继续等待用户命令。若用户就是不想保存被修改后的文件而要强行退出Vi时,可使用命令

  :q!

  Vi放弃所作修改而直接退到shell下。

   在末行模式下,输入命令

:wq

  Vi将先保存文件,然后退出Vi返回到shell。

  在末行模式下,输入命令

   :x

  该命令的功能同命令模式下的ZZ命令功能相同。

相似回答