Linux 版 (精华区)

发信人: jun (☆子夜☆), 信区: Linux
标  题: [转载] vi-faq中文版(2) (转载)
发信站: 紫 丁 香 (Mon Jan 11 21:48:38 1999), 站内信件

发信人: Elale (虎子), 信区: Linux
发信站: BBS 水木清华站 (Sun Sep 20 09:48:00 1998)

4.0 - vi档案的在线帮助在哪儿?
  有一个vi的FAQ,其中列出了vi档案的所有在线文件. 同时它还列出了这些文档
的镜象站点. 最主要的一个地址是alf.uib.no,但是这些文档在很多很多地地方
都保存着. vi-archive faq把它们都给列出来了.你在下载这些文件之前一定要
核对一下这个FAQ.因为很有可能有一个站点比去挪威的站点更近更快些.
  一个镜象站点是cs.uwp.edu/pub/vi, 另一个是monu6.cc.monash.edu.au/pub/Vi,
  这些站点上有很多有关vi的文件,还有一些vi的变种版本;当然,UCB版本的vi是
肯定有的, 还有许多的宏.

5.0 - 好玩的vi诀窍,好玩的宏
  这一节主要讲述一些无聊的诀窍和一些无聊的宏.事实上,任何vi的诀窍和宏我们
都欢迎,只要它们不是过分冗长. 如果有人向我建议而我也认为确实值得加的话,
我会考虑加进去的.
 
5.1 - 好玩的vi诀窍
  xp    删除光标下的字符,再把粘贴到后面去.换句话说,它交换了当前两个字符
        的位置.
  ddp   和xp类似,不过是交换两行的位置.
  uu    撤消和重复上次所做的修改.(这可以使你不改变什么东西就可以到你上次所
        做的修改处)

5.2 - 好玩的宏
  和垂直上方的字符交换位置
  map * kxjphxkP

  折行
  map g $80|F r
  (译注,我对这条宏表示疑问!)
 
  改变大多数单词的大小写
  map v ywmno:s/./\~/g
  (译注,这条好象也不大对!)

  在当前的单词周围加上`和'
  map *` i`'
  在当前的单词周围加上'和'
  map *' i''
  在当前的单词周围加上"和"
  map *" i""
  (这几条也太无聊了吧--译注)
  在当前的单词周围加上``和``
  map! `` `'
  (咦,好象又有问题?--译注)

  从光标处把当前行分开,在下一行开头加上一个>号(例如,引用USENET).如果加上了单词的折行
功能那么最后一个单词可能被折在第一行.
  map g may0O`ay$:s/./ /g
  (不对吧--译注)

  插入一个字符
  map g i$^[r

6.0 - 依字母顺序的vi快速参考
  ...           是指有些东西需要在命令之前或之后指明.这通常是说光标的移动键
                (h,j,k,l,w,b等等)或者是指行号.
  #             (这里#代表一个数字) 执行n次后面的命令...
  :             进入ex模式
  )             下一句
  (             上一句
  }             下一段
  {             上一段
  ]]            下一节
  [[            上一节
  0             行的开头
  $             行的末尾
  ^             行的第一个非空白字符
  +             下一行的开头
  -             上一行的开头
  (空格)        下一个字符
  (回车)        下一行
  /             向前搜索
  ?             向后搜索
  %             查找当前小(中,大)括号的匹配字符
  ,             逆向重复上一个f,F,t或T操作
  ;             重复上一个f,F,t或T操作
  .             重复上一个操作
  `             转到标记处
  '             转到标记所在行的开头
  ``            查找前回到上一个做标记的地方
  ''            查找前回到上一个做标记所在行的开头
  ~             切换字符的大小写
  "             保存到寄存器中
  !!            重复上一次SHELL命令
  !             把后面的文本送给命令, 取代输出(例如, !}fmt把当前的段落
                送给命令fmt处理,然后用fmt返回的东西替换输出.)
  >>            右移当前段落一个移动宽度(shiftwidth)
  <<            左移当前段落一个移动宽度(shiftwidth)
  >%            从当前到匹配小(中,大)括号之间的文本右移
  <%            从当前到匹配小(中,大)括号之间的文本左移
  (似乎漏了一个符号|, 移动到某一列----译注)
  a             在当前位置之后添加
  A             在当前行的末尾添加
  ^a            没有使用
  b             上一个单词的开头
  B             上一个单词的开头,忽略标点符号
  ^b            上移一屏
  c             覆盖...
  C             覆盖到行末尾
  ^c            终止插入模式,在命令模式没有用
  d             删除...
  D             删除到行末尾
  ^d            下移半屏,如果在插入模式下则移到上一个移动宽度(ShiftTab)处
  e             单词的末尾
  E             单词的末尾,忽略标点符号
  ^e            屏幕下卷一行
  f             查找...
  F             向后查找...
  ^f            下移一屏
  g             未用
  G             ...跳至[缺省是到文件末尾]
  ^g            显示状态栏
  h             左移
  H             屏幕上的第一行
  ^h            在插入模式下是退格,命令模式下是左移
  i             在当前的位置前面插入
  I             在本行的第一个非空白字符前面插入
  ^i            插入模式下是制表键,命令模式下未用
  j             下移
  J             把下一行合并到本行
  ^j            命令模式下是下移,插入模式下是建一个新行
  k             上移
  K             未用
  ^k            未用
  l             右移
  L             屏幕中的最后一行
  ^l            重绘屏幕
  m             把当前位置标记到寄存器中
  M             屏幕的中间行
  ^m            回车
  n             重复上次查找
  N             逆向重复上次查找
  ^n            命令模式下是下移
  o             在当前行的下面建一个新行
  O             在当前行的上面建一个新行
  ^o            未用
  p             在当前行的下面粘贴
                (译注--应为在当前位置的后面粘贴)
  P             在当前行的上面粘贴
                (译注--应为在当前位置的前面粘贴)
  ^p            命令模式下是上移
  q             未用
  Q             退出并且启动ex
  ^q            未用
  r             覆盖当前的字符
  R             在插入模式下一直覆盖字符
  ^r            在命令模式下面重绘屏幕
  s             替换
  S             替换整行
  t             到...
  T             向后到...
  ^t            移到下一个移动宽度(shifttab)处
  u             撤消上一次操作
  U             撤消对本行的所有修改
  ^u            上移半屏
  v             未用
  V             未用
  ^v            未用
  w             下一个单词的开头
  W             下一个单词的开头,忽略标点符号
  ^w            命令模式下未用,在插入模式下是到上一个单词的开头处
  x             删除当前字符
  X             删除前一个字符
  ^x            未用
  y             复制...
  Y             复制整行
  ^y            屏幕上卷一行
  z             重新配置当前行周围的屏幕
  ZZ            保存之后退出
  ^z            未用
                (译注--在命令模式下,^z执行了UNIX暂停操作)
  
6.1 - 命令模式的输入选项(:命令)
  (注: 这不是一个规范的列表,, 我只是列出了一些最重要的命令)
  :r <文件>     把<文件>读入到当前文档
  :r !<命令>    把<命令>的输出插入到当前文本中
  :nr <文件>    把<文件>插入到第n行
  :!<命令>      运行<命令>,然后返回
  :sh           转到SHELL 
  :so <文件>    读取<文件>,再执行文件里面的命令
                (译注--文件中的命令应该都是一些ex命令)
  :x            保存之后退出
  :wq           保存之后退出
  :l1,l2w <文件>把第l1和第l2行之间的文本写到<文件>中去,如果没有指定<文件>,
                vi就假定是当前文件,如果没有指定l1,l2,就假定是整个文件(就成了:w)
  :w >> <文件>  添加到<文件>末尾. 也可以使用行号
  :w!           覆盖当前文件
  :q            退出
  :q!           不存盘就退出
  :e <文件>     不离开vi编辑<文件>
  :e!           重新编辑当前文件,忽略所有的修改
  :n            编辑下一个文件
  :e +n <文件>  从第n行开始编辑<文件>,如果超过了末尾,就从末尾开始编辑
  :e#           编辑替换文件(如果使用了命令:e<文件>,替换文件就指的是原始文件)
  :args         显示所有要编辑的文件
  :rew          重新回到第一个编辑的文档
  :map m n      创建一个宏(使 m 做 n) 
  :map! m n     创建一个插入模式的宏(使 m 做 n) 
  :unmap m      删除宏m
  :unmap! m     删除插入模式的宏m
  :ab <1> <2>   缩写,敲<1>的时候用<2>取代
  :unab <1>     取消缩写<1> 
  :set <选项>   设置<选项>...

6.2 - 设置选项(set)
  可以使用括号中的缩写形式.  语法:
  :set <选项> <参数>  (如果需要参数的话)
  也可以在一行中指定多个选项
  :set <选项>? 显示出当前这个选项的参数值
  :set all 则显示所有的选项值
  对那些无须参数的选项来说,使用:set no<选项>就可以把它给关了


  选项:                 缺省值:         含义:
  autoindent (ai)       noai            使新行自动缩进,和上(下)行的位置对齐
  autoprint (ap)        ap              每条命令之后都显示出修改之处
  autowrite (aw)        noaw            在:n,:!命令之前都自动保存文件
  beautify (bf)         nobf            在输入的时候忽略所有的控制字符
                                        (除了制表键(tab),换行(newline),进纸(formfeed))
  directory= (dir=)     /tmp            存放缓冲区的目录名
  edcompatible          noedcompatible  在替换的时候使用类ed的用法
  errorbells (eb)       errorbells      出错的时候响铃
  exrc (ex)             noexrc          允许在主目录(home)外面之外放.exrc文件
  hardtabs= (ht=)       8               设置硬制表的边界
  ignore case (ic)      noic            正规式里忽略大小写
  lisp                  nolisp          打开lisp模式
  list                  nolist          显示所有的制表键和行的结尾
  magic                 magic           可以使用更多的正规表达式
  mesg                  mesg            允许向终端发送消息
  number (nu)           nonumber        显示行号
  open                  open            允许开放和可视化
  optimize (opt)        optimize        优化吞吐量,打印时不发回车
  paragraphs= (para=)   IPLPPPQPPLIbp   设置{ & }的分界符
  prompt                prompt          命令模式下的输入给出:的提示符
  readonly (ro)         noro            除非用!号否则不准保存文件
  redraw                noredraw        当编辑的时候重绘屏幕
  remap                 remap           允许宏指向其他的宏
  report=               5               如果影响的行数>这个数的话就报告
  scroll                1/2 window      下卷屏幕时滚动屏幕的数目,
                                        同样这也是z命令输出的行数(z 输出2倍滚屏的大小)
  sections=             SHNHH HU        定义节的末尾(当使用命令[[ 和 ]] 时)
  shell= (sh=)          /bin/sh         缺省的SHELL,如果设置了环境变量SHELL的话,就使用变量
  shiftwidth= (sw=)     8               当使用移动(shift)命令时移动的字符数
  showmatch (sm)        nosm            显示{, }, (, ), [, 或者 ] 的匹配情况
  showmode              noshowmode      显示你处在什么模式下面
  slowopen (slow)                       插入之后不要立刻更新显示
  tabstop= (ts=)        8               设置制表停止位(tabstop)的长度
  taglength= (tl=)      0                重要标记的字符个数(0表示所有的字符)
  tags=                 tag, /usr/lib/tags 定义包含标记的文件路径
  term=                                 设置终端类型
  terse                 noterse         显示简短的错误信息
  timeout (to)          timeout         一秒钟后键盘映射超时
  ttytype=                              设置终端类型
  warn                  warn            显示"No write since last change"信息
  window= (w=)                          可视模式下窗口的行数
  wrapmargin= (wm=)     0               右边距,大于0的话最右边的单词将折行,留出n个空白位置
  wrapscan (ws)         ws              查找到文件尾后再重头开始
  writeany (wa)         nowa            可以保存到任意一个文件去

  (译注--这些选项在各种vi版本中都基本上大同小异,以SunOS带的vi为例,它没有这里列出来的open选项,
         scroll的参数值也不同,还多出来一些选项,如flash,modelines,novice,tagstack等等)

7.0 - 建立 .exrc文件
  所有命令输入模式下的命令(即 :命令)都可以在.exrc文件中使用,在.exrc中的命令在启动vi的时候自动
加载.尤其是源命令(so),缩写(ab)和宏定义都可以用.在.exrc中不允许有空行.以"开头的一行vi将把它当成
注释.

7.1 - .exrc文件的样本
  以下的.exrc文件是一个实际的例子, 我自己的. 因此,它就没有有些人想象的那样设置很多的选项.即便
如此,它还是给出一些基本的概念,而且它也相当易懂.

  首先,记住你无须在命令前面加:号,因为它是缺省就添加了的.

"译注--以下是.exrc文件中的内容,为真实起见,而且事实上也相当浅显,我没有翻译其中的注释
" set wordwrap 9 characters from the right
set wm=9
" show matching parenthesis.  When },), or ] is hit, show the opening
" {,(, or [ that matches it.
set sm
" set the shell to be /usr/local/bin/tcsh
set sh=/usr/local/bin/tcsh
" a few abbreviations
" this makes -l automatically become -Larry, and zidlle to be my
" name and email address.
ab zidlle E. Larry Lidz - ellidz@midway.uchicago.edu
ab -l -Larry
" uppercase V will run ispell -x (-x tells it not to save backups) on current
" file
map V :w
" K will center the line...  (this doesn't work on SunOS -- ??)
map K :s/^[     ]*//
" v will reformat the current paragraph
map v {0!}fmt
" q runs a program to lock my terminal
map q :!lock2
" Splits a line in two at current cursor location, puts a > at the
"beginning of the line - useful for Usenet/email
map g may0O`ay$:s/./ /g
  
8.0 - vi的bug
  我很想说vi中没有bug,但很不幸,它不是这样的. 这些bug都是初始版本vi中的,
它其他的一些变种就不一定有.
  例如 _宏有时就运行的有问题.
  
9.0 - 术语表
  如果有人提议说某个术语他不明白,我们将更新这个术语表.如果你有什么建议,
请一定要告诉我.

  命令模式 command mode 
    
  命令模式是说我们在此模式下面可以向vi发命令(包括光标移动,编辑命令等等)
  
  ed 
    UNIX里面一个非可视化的编辑器

  <Esc> 
    escape键. 键盘上标记为escape(ESC)的一个键.有时候^[可以起到相同的作用.
    如果没有escape键,你可以试试Meta键
  ex 
    UNIX下的一个编辑器.所有vi中的:命令都是送给它处理的

  插入模式 insert mode 
    插入模式是指我们可以在此模式下面键入文本.

  宏 macro 
    宏是一些键的组合起来的快捷方式.例如,某个宏允许我们只敲一个键就可以执行
    好几个不同的命令.

  开放模式 open mode 
    开始模式是说vi启动的时候不能确定你的终端类型,或者它肯定你的是一个硬的或
    电子管的终端

  正规表达式 regular expressions (RegEx) 
    正规表达式,通常缩写为"RegEx",是一些关键字的集合,它允许用户在查找的时候有更大的
    控制力度. RegEx是在UNIX下面用的,但是在很多程序中也用到了它.

  sed 
    流-行式的编辑器.它没有界面,所有命令都是通过命令行的形式给出的.

  vi 
    就是这个FAQ讨论的编辑器

10.0 - 关于vi的参考书目
  The ULTIMATE GUIDE to the VI and EX Text Editors
  Hewlett Packard Company (authors)
  The Benjamin/Cummings Publishing Company, Inc.
  ISBN 0-8053-4460-8

  A PRACTICAL GUIDE TO THE UNIX SYSTEM
  Mark G. Sobell
  Benjamin Cummings Publisher

  LEARNING THE VI EDITOR
  Linda Lamb
  O'Reilly & Associates
  ISBN 0-937175-67-6

  如果你知道哪些书籍对学习vi很有好处,别忘了给我个建议, 我会把这些书目也加到
这一节来的.

-----------------------------------------------

  E. Larry Lidz, 1994, 1995.  版权所有
  
-----------------------------------------------
Elale@163.net
  

※ 修改:.jun 于 Jan 11 21:52:28 修改本文.[FROM: PR_AI.hit.edu.cn]
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: PR_AI.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:205.308毫秒