Vi编辑器完全使用手册

发布者:系统管理员发布时间:2011-12-27浏览次数:1270

编辑器是使用计算机的重要工具之一,在各种操作系统中,编辑器都是必不可少的部件。Unix及其相似的ix操作系统系列中,为方便各种用户在各个不同的环境中使用,提供了一系列的ex编辑器,包括 ex, edit,ed 和vi.其中ex,edit,ed都是行编辑器,现在已很少有人使用,Unix提供他们的原因是考虑到满足各种用户特别是某些终端用户的需要。
  
  值得庆幸的是,Unix提供了全屏幕的Vi编辑器,这使我们的工作轻松不少。不少DOS用户抱怨Vi编辑器不象DOS下的编辑器如edit那么好用,这是因为Vi考虑到各种用户的需要,没有使用某些通用的编辑键(在各个不同的终端机上他们的定义是不同的,在某些终端机上甚至没有这些键)。而是采用状态切换的方法,但这只是习惯的问题,一旦你熟练的使用上了vi你就会觉得它其实也很好用。
  
  虽然 Vi采用了状态切换的方法,但电脑的硬件及操作系统多种多样,某些电脑的键盘上没有特定的几个功能键!那麽不就有某些功能不能用了?这个问题在 Unix 系统上也一样,几乎各大电脑厂商都有自己的
  
  Unix 系统,而 vi 的操作方法也会随之有点出入。这里我们采用 PC 的键盘来说明 vi 的操作,但在具体的环境中还要参考相应的资料,这一点是值得注意的。
  
  二、Vi入门
  
  (一)、进入vi
  
  在系统提示字符(如$、#)下敲入vi <档案名称>,vi 可以自动帮你载入所要编辑的文件或是开启一个新文件(如果该文件不存在或缺少文件名)。进入 vi 后萤幕左方会出现波浪符号,凡是列首有该符号就代表此列目前是空的。
  
  (二)、两种模式
  
  如上所述,vi存在两种模式:指令模式和输入模式。在指令模式下输入的按键将做为指令来处理:如输入a,vi即认为是在当前位置插入字符。而在输入模式下,vi则把输入的按键当作插入的字符来处理。指令模式切换到输入模式只需键入相应的输入命令即可(如a,A),而要从输入模式切换到指令模式,则需在输入模式下键入ESC键,如果不晓得现在是处於什麽模式,可以多按几次 [ESC],系统如发出哔哔声就表示已处于指令模式下了。
  
  附:有指令模式进入输入模式的指令:
  
  新增 (append)
  
  a :从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。
  
  A: 从光标所在列最後面的地方开始新增资料。
  
  插入 (insert)
  
  i: 从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。
  
  I :从光标所在列的第一个非空白字元前面开始插入资料。
  
  开始 (open)
  
  o :在光标所在列下新增一列并进入输入模式。
  
  O: 在光标所在列上方新增一列并进入输入模式。
  
  (三)、退出vi
  
  在指令模式下键入:q,:q!,:wq或:x(注意:号),就会退出vi。其中:wq和:x是存盘退出,而:q是直接退出,
  
  如果文件已有新的变化,vi会提示你保存文件而:q命令也会失效,这时你可以用:w命令保存文件后再用:q退出,或用:wq或:x命令退出,如果你不想保存改变后的文件,你就需要用:q!命令,这个命令将不保存文件而直接退出vi。
  
  (四)、基本编辑
  
  配合一般键盘上的功能键,像是方向键、[Insert] 、[Delete] 等等,现在你应该已经可以利用 vi 来编辑文件了。当然 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详细指令表
  
  (一)、基本编辑指令:
  
  新增 (append)
  
  a :从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。
  A: 从光标所在列最後面的地方开始新增资料。
  
  插入 (insert)
  
  i: 从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。
  I :从光标所在列的第一个非空白字元前面开始插入资料。
  
  开始 (open)
  
  o :在光标所在列下新增一列并进入输入模式。
  O: 在光标所在列上方新增一列并进入输入模式。
  
  x: 删除光标所在字符。
  
  dd :删除光标所在的列。
  
  r :修改光标所在字元,r 後接著要修正的字符。
  
  R: 进入取替换状态,新增文字会覆盖原先文字,直到按 [ESC] 回到指令模式下为止。
  
  s: 删除光标所在字元,并进入输入模式。
  
  S: 删除光标所在的列,并进入输入模式。
  
  (二)、光标移动指令:
  
  由於许多编辑工作是藉由光标来定位,所以 vi 提供许多移动光标的方式,这个我们列几张简表来说明(这些当然是指令模式下的指令):
  
  指令?nbsp;?得?nbsp;           ??? 功能键
  0 移动到光标所在列的最前面  [Home]?nbsp;
  $     ?nbsp;移动到光标所在列的最後面 [End]
  [CTRL][d] 向下半页         ?nbsp;[PageDown]
  [CTRL][f] 向下一页
  [CTRL][u] 向上半页?nbsp;
  [CTRL][b] 向上一页          [PageUp]
  
  指令 说明
  H 移动到视窗的第一列
  M 移动到视窗的中间列
  L 移动到视窗的最後列
  b 移动到下个字的第一个字母
  w 移动到上个字的第一个字母     ?
  e 移动到下个字的最後一个字母
  ^ 移动到光标所在列的第一个非空白字元
  
  指令 说明                 ??nbsp;
  n- 减号移动到上一列的第一个非空白字元前面加上数字可以指定移动到以上 n 列
  n+ 加号移动到下一列的第一个非空白字元前面加上数字可以指定移动到以下 n 列
  nG 直接用数字 n 加上大写 G 移动到第 n 列
  指令 说明
  fx
   往右移动到 x 字元上
  Fx 往左移动到 x 字元上      ?nbsp;
  tx 往右移动到 x 字元前??nbsp;
  Tx    往左移动到 x 字元前
  ;    配合 f&t 使用,重复一次?
  ,? 配合 f&t 使用,反方向重复一次
  /string 往右移动到有 string 的地方
  ?string 往左移动到有 string 的地方
  n    ?nbsp;配合 /&? 使用,重复一次
  N    ?nbsp;配合 /&? 使用,反方向重复一次
  
  指令 说明 ?缸?nbsp;
  n(
   左括号移动到句子的最前面句子是以前面加上数字可以指定往前移动 n 个句子 ! . ? 三种符号来界定
  n)?nbsp;右括号移动到下个句子的最前面前面加上数字可以指定往後移动 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 结束编辑(quit)
  :q! 不存档而要放弃编辑过的文件。
  :w 保存文件(write)其後可加所要存档的档名。
  :wq 即存档後离开。
  zz 功能与 :wq 相同。
  :x 与:wq相同
 
 
 
 
 
 
 
 
 
 
 
一、vi的工作模式
vi有两种工作模式:
  编辑模式:用来输入和编辑文件的模式,屏幕上会显示用户的键入,按键不是被解释为命令执行,而是作为文本写到用户的文件中。
  指令模式:用来编辑、存盘和退出文件的模式。
    运行vi后,首先进入指令模式。此时输入的任何字符都被视为指令,键入的命令不会在屏幕上显示。
    从指令模式切换到编辑模式,则可以按“Insert”键或“i”键,从编辑模式切换到指令模式,可按“Esc”键。
    状态行是屏幕底部一行,被vi编辑器用来反馈编辑操作结果。错误消息或提供信息的消息会在状态行中显示出来。
 
二、vi的启动和退出
1.启动vi
    在系统图示字符下键入“vi”+“空格”+“文件名”,如:vi test.txt
    vi可以自动载入所要编辑的文件或是开启一个新文件。
2.退出vi
在指令模式下键入如下命令可以退出vi:
  :q 如果用户只是读文件的内容而未对文件进行修改,可以在命令模式下输入“:q”退出vi。
  :q! 如果用户对文件的内容作了修改,又决定放弃对文件的修改,则用“:q!”命令。
  :w! 强行保存一个vi文件,如果该文件已存在,则进行覆盖。
  :wq 保存文件并退出vi。
  ZZ 快速保存文件的内容,然后退出vi。功能和“:wq”相同。
  :w filename   相当于“另存为”。
  :n,mw filename   将第n-m行的文本保存到指定的文件filename中。
 
三、vi长指令和短指令
  长指令:以冒号开头,键入冒号后,在屏幕的最末尾一行会出现冒号提示符,等待用户键入指令,输入完指令后回车,vi会执行该指令。
  段指令:与快捷键相似,键入短指令后,vi不会给任何提示就直接执行。
1.输入输出命令
  a 在光标后输入文本
  A 在当前行末尾输入文本
  i 在光标前输入文本
  I 在当前行开始输入文本
  o 在当前行后输入新一行
  O 在当前行前输入新一行
2.光标移动命令
  b 移动到当前单词的开始
  e 移动到当前单词的结尾
  w 向后移动一个单词
  h 向前移动一个字符
  l 向后移动一个字符
  j 向下移动一行
  k 向上移动一行
3.删除操作命令
  x 删除光标所在的字符
  dw 删除光标所在的单词
  dd 删除当前行
  d$ 删除光标至行尾的所有字符
  D 与“d$”命令相同
4.替换操作命令
  r 替换光标所在的字符
  R 替换字符序列
  cw 替换一个单词
  ce 与“cw”命令相同
  cb 替换光标所在的前一字符
  c$ 替换自光标位置至行尾的所有字符
  C 与“c$”命令相同
  cc 替换当前行
5.查询操作命令
  /abc 向后查询字符串“abc”
  ?abc 想前查询字符串“abc”
  n 重复前一次查询
  N 重复前一次查询,但方向相反
6.拷贝粘贴命令
  yw 将光标所在单词拷入剪贴板
  y$ 将光标至行尾的字符拷入剪贴板
  Y 与“y$”命令相同
  yy 将当前行拷入剪贴板
  y 将选取的内容拷入剪贴板
  p 将剪贴板中的内容粘贴在光标后
  P 将剪贴板中的内容粘贴在光标前
7.其他操作命令
  v 选取文本内容
  u 取消上一次的操作
  U 可以恢复对光标所在行的所有改变
  J 把两行文本链接到一起
  :set 用来设置或浏览vi系统当前的选项(加参数“all”后查看所有选项的列表)
  :X 对所编辑的文件进行简单加密
 
四、vi的高级应用
1.设置vi环境
    vi编辑器的行为可以通过设置编辑参数来定义。
    使用vi的set命令进行设置。vi在进行设置前必须处于指令模式,但选项的改变是临时的,只在用户当前编辑回话下有效,当用户退出vi编
 
辑器时,设置会被丢弃。
  autoindent选项
    将新行与前一行的开始对准,缩写:ai
    该选项将用户键入的每个新行与前一行的开始对齐。该选项对于使用程序语言编程时十分有用。本选项的默认值是noai。
  ignorecase选项
    在搜索命令下忽略大小写,缩写:ic
    vi编辑器提供大小写敏感的搜索,要使vi忽略大小写,键入“:set ignorecase”,要返回大小写敏感状态,键入“:set noignorecase”.
  magic选项
    在搜索时,允许使用特殊字符。
    某些符号在用于搜索时有特殊的含义。当用户将这些符号开头置为nomagic时,这些符号不再有特殊含义。
  number选项
    显示行号,缩写:nu
    vi编辑器一般情况下不显示每行的行号。可以改变number选项来显示行号。
  report选项
    告知用户最后一个命令作用行的行号。
    vi编辑器对用户的编辑工作并不给予任何反馈,如果希望在屏幕上看到自己编辑的反馈信息,用户可以通过编辑report选项来实现。
  scroll选项
    设定在指令模式下使用“Ctrl+d”命令翻滚的行数。
  shiftwidth选项
    设定缩进空格数,一般与autoindent一同使用,缩写:sw
  showmode选项
    在屏幕右角显示vi编辑器模式,缩写:smd
  terse选项
    缩短错误信息。
  wrapmargin选项
    将右边界设定为一定的字符个数,缩写:wm
    用户的终端屏幕通常为80列,当键入到行的末尾时,屏幕即开始一个新行,这就是行回绕。在用户按回车键时,屏幕同样开始一个新行。
 
因此,屏幕上一行的长度可以为1-80个字符之间的任何长度。但是,vi编辑器只在用户按回车时,才在用户文件中生成一个新行。如果用户在
 
按回车前键入了120个字符,这时键入的文本看起来是在2行,但实际在文件中,这120个字符只在1行中。如果要限制行长度,一是在到达屏幕
 
行末尾前按回车换行,另一种是设定wrapmargin选项使vi编辑器自动插入回车。
2.缩写操作符
    缩写操作符“:ab”命令使得用户给任何字符串指定缩写,该功能可以帮主用户提高输入速度。用户可以为自己经常输入的文本选择一个易
 
输入的缩写。
    例如:键入“:ab uox Unix Operating System”命令,当vi处于文本输入模式时,用户键入“uox”接着键入一个空格时,vi自动将键入的
 
“uox”变为“Unix Operating System”。
    取消缩写“:unab”命令可以取消一个缩写,例如:键入“:unab uox”命令即可。
    想列出已经设置了的所有缩写,键入“:ab”命令即可。
3.宏操作符
    宏操作符“:map”命令使用户能将一系列按键指定给某一按键。给用户一个在指令模式下的快捷按键。
    例如:键入“:map q dd”命令,此后处于指令模式时,每当用户键入q时,vi编辑器自动执行“dd”命令。
    取消宏操作“:unmap”命令。
    用户也可以使用map指令指定功能键,例如:键入“:map #n dd”命令,其中“#n”代表以n为功能键号的功能键。
4.“.exrc”文件
    用户在vi编辑器中所设置的所有选项都是临时的,当用户退出时,它们都会失效。要使这些设置永久保存,可以将选项的设置保存到文件
 
“.exrc”中。
    当用户打开vi编辑器时,它自动查看用户当前的工作目录中的“.exrc”文件,并根据在文件中的内容设置编辑环境。如果vi没有在当前目
 
录中发现“.exrc”文件,则将查找用户的主目录,并根据在哪里发现的“.exrc”文件设置编辑环境。如果vi一个“.exrc”文件也没找到,则
 
对选项使用默认值。
    “.exrc”文件属于启动文件。
例如:建立一个“.exrc”文件。
在终端中键入“vi .exrc”,回车。
在vi编辑器中键入:
  set autoindent
  set shiftwidth=2
  set nomagic
  set number
  set scroll=20
  set showmode
保存退出即可
5.运行Shell命令
    用户可以在vi的命令行运行Linux Shell命令,使得用户可以临时抛开vi来运行Shell命令。
    vi编辑器用“!”来通知vi其后面是一个Shell命令。例如:键入“:!date”命令,vi编辑器将清除屏幕,输出当前系统时间,后按任意键
 
返回vi编辑器,并可以继续编辑。
    如果用户系统将Shell命令执行的结果加到文件文本中,可以使用“:r!”和相应的Shell命令来将命令结果写到用户文件文本中。

相关附件:Vi编辑器完全使用手册.doc