Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1455676
  • 博文数量: 704
  • 博客积分: 10140
  • 博客等级: 上将
  • 技术积分: 6230
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-15 20:41
文章分类

全部博文(704)

文章存档

2013年(1)

2012年(16)

2011年(536)

2010年(151)

分类: C/C++

2011-01-16 18:10:30

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命令)

  保存之后退出

  :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里面一个非可视化的编辑器

  

  escape键. 键盘上标记为escape(ESC)的一个键.有时候^[可以起到相同的作用.

  如果没有escape键,你可以试试Meta键

  ex

  UNIX下的一个编辑器.所有vi中的:命令都是送给它处理的

  插入模式 insert mode

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

  宏 macro

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

  好几个不同的命令.

  开放模式 open mode

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

  电子管的终端

  正规表达式 regular expressions (RegEx)

  正规表达式,通常缩写为"RegEx",是一些关键字的集合,它允许用户在查找的时候有更大的

  控制力度. RegEx是在UNIX下面用的,但是在很多程序中也用到了它.

  sed

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

  vi

  就是这个FAQ讨论的编辑器
阅读(473) | 评论(1) | 转发(0) |
0

上一篇:vim 高级应用实例

下一篇:VI替换操作经典

给主人留下些什么吧!~~

chinaunix网友2011-03-08 16:03:17

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com