vi 是visual edit 的缩写
              
进入vi 
  vi test 
  离开vi 
  :q! 离开vi,并放弃刚在缓冲区内编辑的内容。 
     :wq 将缓冲区内的资料写入磁盘中,并离开vi。 
     :ZZ 同wq 
  :x 同wq 
  :w 将缓冲区内的资料写入磁盘中,但并不离开vi。 
     :q 离开vi,若文件被修改过,则会被要求确认是否放弃修改的内容,此指令可与: w 配合使用。 
  Vi 的操作模式 
  Vi 提供两种操作模式: 
  输入模式(insert mode) 
  指令模式(command mode) 
  当使用者进入vi后,既处于指令模式下,此刻键入任何字元皆被视为指令。
              
输入模式:a(append) 游标之后加入资料。 
  A 该行之末加入资料 
  i (insert) 游标之前加入资料 
  I 该行之首加入资料 
  o (open) 新增一行与该行之下供输入资料 
  O 新增一行与该行之上供输入资料
              
指令模式:B      移至该行第一个字符,若光标在该行第一字符则光标移至上一行第一字符。 
     b    由游标所在位置之前一个字串的第一个字元 
        cc 删除整行,修改整行的内容。 
        D      以行为单位,删除游标在内后面的所有字符。 
  db 删除该行光标前字符 
        dd 删除该行 
        de 删除自光标开始后面的字符 
        d加字符   删除光标所在位置至字符之间的单 
        E      移至该行最后字符,若光标在该行最后字符则光标移至下一行最后字符 
    e      由游标所在位置至该字串的最后一个字元 
        G 移至该档案的最后一行  
        h 向前移一个字元 
  j 向下移一个字元 
  k 向上移一个字元 
  0 移至该行之首 
  M 移至视窗的中间那行 
  L 移至视窗的最后一行 
        l 向后移一个字符 
  0 由游标所在位置该行的第一个字元 
  nG 移至该档案的第n行 
  n+ 自游标所在位置向后移n行至该行的第一字符 
  n- 自游标所在位置向前移n行至该行的第一字符 
  R 进入取代状态,直到《ESC》为止 
  s 删除游标所在字元,并进入取代模式直到《ESC》 
  S 删除游标所在之该行资料,并进入输入模式直到《ESC》 
  w 由游标所在位置之下一个字串的第一个字元 
  x 删除游标所在该字元。 
  X 删除游标所在之前一字元。 
  r 用接于此指令之后的字元取代(replace)游标所在字元 
  yy yank整行,使游标所在该行复制到记忆体缓冲区 
<ctrl><g> 显示该行之行号、档案名称、档案中最末之行号、游标所在行号占 
  总行号之百分比 
  $ 由游标所在位置至该行的最后一个字元。 
  ) 由游标所在位置至下一个句子的第一个字元。 
  ( 由游标所在位置至该句子的第一个字元。 
  { 由游标所在位置至该段落的最后一个字元。 
  } 由游标所在位置至该段落的第一个字元
              
 yank和delete可将指定的资料复制到记忆体缓冲区,而藉有put指令可将缓冲区内的资料复制到荧幕上 
  例如:搬移一行 :在该行执行dd 
  游标移至目的地 
  执行p 
  复制一行 :在该行执行yy 
  游标移至目的地 
  执行p 
  视窗移动: 
<ctrl><f> 视窗往下卷一页 
<ctrl><b> 视窗往上卷一页 
<ctrl><d> 视窗往下卷半页 
<ctrl><u> 视窗往上卷半页 
<ctrl><e> 视窗往下卷一行 
<ctrl><y> 视窗往上卷一行 
  删除、复制及修改指令介绍: 
  d(delete)、c(change)和y(yank)这一类的指令在vi 中的指令格式为: 
  operation+scope=command 
  (运算子)(范围) 
  运算子: 
  d 删除指令。删除资料,但会将删除资料复制到记忆体缓冲区。 
  y 将资料(字组、行列、句子或段落)复制到缓冲区。 
  p 放置(put)指令,与d和y配合使用。可将最后delete或yank的资料放置于 
  游标所在位置之行列下。 
  c 修改(change)指令,类似delete于insert的组合。删除一个字组、句子等 
  资料,并插入新键入的资料。
              
指令重复:在指令模式中,可在指令前加入一数字n,则此指令动作会重复执行n次。 
  例如: 删除10行 :10dd 
  复制10行 :10yy 
  取消前一动作(undo):即复原执行上一指令前的结果。 
  u 恢复最后一个指令之前的结果。 
  U 恢复游标该行之所有改变。 
  搜寻:在vi中可搜寻某一字串,使游标移至该处。 
  /字串 往游标之后寻找该字串。 
  ?字串 往游标之前寻找该字串。 
  n 往下继续寻找下一个相同的字串。 
  N 往上继续寻找下一个相同的字串。 
  资料的连接: 
  J 句子的连接。将游标所在之下一行连接至游标该行的后面。 
  若某行资料太长亦可将其分成两行,只要将游标移至分开点,进入输入模式(可利用a、i等指令)在按《ENTER》即可。
              
  使用vi 
              
作为Unix最重要的编辑工具,熟练的掌握vi对于开发人员和系统管理员同样的重要。下面是我的vi的使用经验,希望能够对大家有所帮助。 
  一.我们先看一下vi的设置项。 
  ignorecase/noignorcase 忽略/不忽略大小写 
  tabstop=n 设置tab相当于n个空格 
  list/nolist 显示/不显示制表符 
  number/nonumber 显示/不显示行号 
  二.vi的编辑命令 
  ndd或nD 删除n行 
  nyy 拷贝n行 
  ma 定义宏,使用'a调用 
  “a 定义缓冲区 
  /string 查找string字符串 
  s/old_str/new_str/g 用new_str串替换old_str 
  . 重复上一次操作/光标所在行 
  ctrl+g 在屏幕底显示文件信息 
  shift+g 到文件尾 
  shift+a 到行尾 
  shift+i 到行首(最先面的字符) 
  ctrl+f/ctrl+d 向下翻一屏/半屏 
  ctrl+b/ctrl+u 向上翻一屏/半屏 
  h/l/j/k 向前/后/下/上移动 
  u 恢复上一个操作 
  e filename 编辑另一个文件 
  e# 切换会上一个文件 
  n 当一次编辑多个文件时,编辑下一个文件;也可以 
  是重复上一个查找 
  r filename 从filename中读内容到光标的下一行 
  w filename 将当前文件的内容写到filename中 
  sh 暂退出编辑文件,但此文件仍处于编辑状态, 
  用exit或ctrl+d回到编辑文件 
  ! 在编辑状态下,执行shell命令 
  !! 重复执行上一个shell命令 
  ^ 表示行首 
  $ 表示行尾 
  g line_no 到line_no行 
  shift+5 扩号的匹配(包括小扩号,大扩号,中扩号) 
  n<</ n>> 将n行向左/右移动一个tab键的距离的位置 
  cw 替换一个词 
  三.举例 
  1.删除文件中的几行 
  到删除的开始处 ma 
  到删除的结束处 d'a 
  2.拷贝文件中的几行 
  到拷贝的开始处 ma 
  到拷贝的结束处 y'a 
  3.替换文件中所有匹配的字符 
  替换文件中的 lesson为course 
  s/lesson/course/g 
  注意:可能替换含有lesson的其他词 
  4.替换文件中一个区域的字符 
  start_line, end_line %s/lesson/course/g 或者 
  采用宏的方式 
  ‘a,. %s/lesson/course/g #需要定义宏;'.'是指光标所在行 
  5.替换一个文件中某些词 
  比如替换none为nothing 
  查找 /none 
  替换 cw,输入nothing,按键盘Esc 
  继续查找 n 
  替换 . 
  6.重复执行一个shell命令 
  编译一个程序 
  保存编辑后的文件 :w 
  编译文件 :!make 
  修改文件后,在保存 :w 
  再编译 :!! 
  7.在两个文件互拷贝 
  第一种方法: 
  编辑源文件 vi source_file 
  到拷贝的部分开始处 ma 
  到拷贝的部分结束处 :.,'a w tempfile 
  退出当前文件 :q 
  编辑目的文件 vi dest_file 
  到拷贝的地方 :r tempfile 
  第二种方法: 
  编辑源文件 vi source_file 
  到拷贝的部分开始处 ma 
  到拷贝的部分结束处 “ay'a 
  不退出源文件编辑目的文件 :e dest_file 
  到拷贝的地方 “ap
              
标签:


