[原创]vi 命令_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3500 | 回复: 0   主题: [原创]vi 命令        下一篇 
panpan.nie
注册用户
等级:大校
经验:4754
发帖:217
精华:2
注册:1970-1-1
状态:离线
发送短消息息给panpan.nie 加好友    发送短消息息给panpan.nie 发消息
发表于: IP:您无权察看 2014-10-9 18:30:15 | [全部帖] [楼主帖] 楼主

vi有三种模式
 直接输入vi 进入vi编辑器的命令模式,该模式保存、删除和替换文件,以及退出vi编辑
 不管在什么模式下,按 ESC 键可进入命令模式
 在命令模式下,插入命令 i,附加命令 a,打开命令 o 、 修改命令c 、 取代命令r 或 替换命令s 可进入插入模式,进行文档编辑
 命令模式下,v进入可视模式,可进行复制y,剪切d

 直接输入 vi ,进入vi编辑模式,相当于打开word还没有保存,没有给文件取名字。
  在退出vi之前,应保存文档,并给文档取名 :w filename,在退出 :q。若是不保存可以选择 :q!
 vi filename ,则是打开或新建一个名字叫filename的文档,并将光标置于第一行首,对文档进行操作后退出前也要保存。
 vi file1 file2 file3 新建或者打开多个文件,当所有文件都编辑和保存后可退出
  问:如何切换其他文件进行编辑? :e filename,n 编辑下一个文档

    vi +n filename 打开文件,并将光标置于第n行首
 vi + filename 打开文件,并将光标置于最后一行首

 . 重复命令,重复之前操作过的命令
 u 、U 恢复命令

 在命令模式下  末行模式
  :w 当前文件存盘
  :q 退出vi
  :q! 不保存文件退出vi
  :x 保存当前文件并退出
  :e filename 打开文件filename进行编辑
  :e! 重新编辑文件,放弃任何改变
  :! 执行命令后回到编辑
  :n 编辑下一个文件
  :n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
  :n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
  :n1,n2 d :将n1行到n2行之间的内容删除

  选项设置
  :set ai 自动缩进
  :set nu 每行显示行号
  :set nonu 每行前不显示行号
  :set ic 查找字符串时不区分大小写

  移动光标
  h,backspace,左方向键   光标左移一个字符,在字符前加n,可移动n个字符
  l,space,右方向键       光标右移一个字符
  k,Ctrl+p,上方向键      光标上移一个字符
  j,ctrl+n,下方向键      光标下移一个字符
  Enter                    光标下移一行,在该行行首
  w或W  光标右移一个字至字首
  b或B  光标左移一个字至字首
  e或E  光标右移一个字至字尾
  H  光标移至屏幕第一行行首
  L  光标移至屏幕最后一行行首
  M  光标移至屏幕中间行
  $  光标移至当前行行尾 
  0, ^  光标移至当前行行首
  )  光标移至句尾

 (  光标移至句首
  }  光标移至段落开头
  {  光标移至段落结尾
  :0 光标移至文件开头
  nG,:n 光标移至第n行首
  n+ ,[n]k 光标下移n行
  n- ,[n]j 光标上移n行
  n$ 光标下移n行尾
  :n 光标移到文件的第n行
  G,:$ 光标移到文件的最后一行(文件结尾)

 屏幕翻滚类命令
  Ctrl+u:向文件首翻半屏
  Ctrl+d:向文件尾翻半屏
  Ctrl+f:向文件尾翻一屏
  Ctrl+b;向文件首翻一屏
  nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。 未实现???

    从命令模式进入插入模式
  i 在当前光标所在字符的前面插入,如theday,光标在d上,插入new 就是thenewday
  a 在当前光标所在字符的后面插入,如theday,光标在e上,插入new就是thenewday
  o 在当前光标所在行的下一行插入
  O 在当前行的上一行 
  I 在当前光标所在行的行首插入
  A 在当前光标所在行的行尾插入
  R 替换当前光标所在字符及其之后的
  r 替换当前光标所在字符,再一次输入替换字符
  s:删除当前光标所在字符,从此处插入文本
  S:删除当前光标所在行,从该行行首开始插入文本
  ncc 、ncw、 nC 删除当前光标所在行开始 n 行,并在此行开始插入

 复制操作
 yy  复制当前行的内容
 [n]yy 复制包括当前行的n行内容
 p   将复制的文本放入光标后
 P   将复制的文本放入光标前
 :n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下

 删除操作
 d$:删至行尾
 d0: 删除光标前一个字符至行首
 [n]dd:删除当前行及其后n-1行
 [n]x或X:删除一个字符,x删除光标后的,而X删除光标前的
 [n]dw或ndW:删除光标处开始及其后的n-1个字   
 :n1,n2 d :将n1行到n2行之间的内容删除
 :%d  删除整个编辑缓冲区。
 [n]p 将删除的内容恢复n次  类似于windows中常用的剪切、粘贴!

    问:在编辑文件的过程中,我发现,退格键只能删除当前行的文本,要删除多行怎么办?
 一般移动光标使用上下左右键可以一个字符一个字符的移动,但若是文本很多的情况下,怎么做更快?

 搜索及替换命令 :
  /pattern:从光标开始处向文件尾搜索pattern
  ?pattern:从光标开始处向文件首搜索pattern
  n:在同一方向重复上一次搜索命令
  N:在反方向上重复上一次搜索命令

    s(substitute)  指令可查找某行列范围。
  g(global)指令则可查找整个编辑缓冲区的资料。
  s指令以第一个满足该条件的字符串为其取代的对象,若该行有数个满足该条件的字符串,也仅能取代第一个,若想取代所有的字符串则需加上g参数。
  :1,$s/old/new/g           将文件中所有的“old”改成“new”。
  :10,20s/^/   /        将第10行至第20行资料的最前面插入5个空白。
  :%s/old/new/g            将编辑缓冲区中所有的“old”改成“new”。

    :%s/regexp/replacement/g:将文件中所有p1均用p2替换(%可能代表全文)


  :%s/regexp/replacement/gc - (c代表confirm)每次替换要求确认

 :g/regexp/s//replacement/g:将文件中所有p1均用p2替换


  :s/text1/text2 用于将光标所在段落搜索到的第一个 text1 替换为text2
  :s/text1/text2/g 用于将光标所在段落的所有 text1 替换为text2
  :m,ns/text1/text2/g 用于将从 m行开始至n 行结束的所有搜索到的text1
  替换为text2 其中可以使用$表示末行即1,$ 表示替换文档中的所
  有符合条件的字符  

 例:/the  搜索的内容可以是一个字符,一个字或者一个句子,将从光标开始处向文件尾搜索,显示第一个搜索到的首字符上
 按 n 、 N 正向或反向搜索下一个,循环重复

 可视化模式?

后记:我常用的命令有:

vi filename  编辑文件

x  命令模式下,退出且保存

q! 退出不保存

0,$  当前行行首、行尾

d0,d$  删除光标所在位置直至行首(行尾)

nh,nl 光标向左、向右移动n个字符

nG 跳到第几行




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论