当前位置:  技术问答>linux和unix

如何使用VI?

    来源: 互联网  发布时间:2015-01-10

    本文导语:  如何使用VI? 说详细点 高分给 | http://263.aka.org.cn/Lectures/002/Lecture-2.2.1/510.html 这个易看点!!!     vi 有三种方式,分别是编辑方式、插入方式和命令方式。其功能键参看下表:      编辑方式:...

如何使用VI?
说详细点
高分给

|
http://263.aka.org.cn/Lectures/002/Lecture-2.2.1/510.html

这个易看点!!!

    vi 有三种方式,分别是编辑方式、插入方式和命令方式。其功能键参看下表: 

    编辑方式: 功能键
 功能
 
ctrl-f
 前翻一页
 
ctrl-b
 后翻一页
 
H
 将光标移动到屏幕最上面一行
 
M
 将光标移动到屏幕中间
 
L
 将光标移动到屏幕最下面一行
 
w
 右移光标到下一个字的开头
 
e
 右移光标到一个字的末尾
 
b
 左移光标到前一个字的开头
 
0
 左移光标到到本行的开始
 
^
 移动光标到行中第一个非空字符
 
$
 右移光标到本行末尾
 
    
/string
 向前搜索指定的字符串
 
? string
 向后搜索指定的字符串
 
n
 搜索下一个字符串
 
    
rc
 用 c 替换当前光标处的字符
 
x
 删除当前光标处的字符
 
dw
 删除光标右面的字
 
db
 删除光标左面的字
 
dd
 删除光标所在行
 
  在上面的命令前加上数字,表示重复操作的次数
 
d$
 删除当前光标到行末尾之间的字符
 
d0
 从当前光标起删除字符直到行的开始
 
J
 删除本行的回车,并和下一行合并
 
    
p
 将缓冲区内的内容粘贴到当前光标的后面
 
P
 将缓冲区内的内容粘贴到当前光标的前面
 
yy
 将当前行复制到剪切缓冲区
 
nyy
 将n行复制到剪切缓冲区
 
    
u
 撤消前一命令的结果
 
.
 重复最后一条修改正文的命令
 



    插入方式: 功能键
 功能
 
i
 在光标左面插入正文
 
a
 在光标右面插入正文
 
o
 在光标所在行下面增加行
 
O
 在光标所在行上面增加行
 
I
 在光标行的开头插入
 
A
 在光标行的末尾插入
 
    
s
 用新的正文替换光标所指字符
 
cw
 用新的正文替换光标右边的字
 
cb
 用新的正文替换光标前边的字
 
cd
 用新的正文替换光标所在的行
 
  前面加上数字,表示该命令重复 n 次
 
    
c$
 用新正文替换从光标开始到本行末尾的所有字符
 
c0
 用新正文替换从光标开始到本行开头的所有字符
 



    命令方式: 功能键
 功能
 
:q
 在未做修改的情况下退出
 
:q!
 将任何修改作废,退出
 
:w
 存盘
 
:wq
 存盘并退出
 
:w file
 将编辑的内容写到 file 文件中去
 
:r file
 将 file 文件读入,并放在当前光标行的后面
 
:e file
 编辑新文件 file 代替旧内容
 
:f file
 将当前正文的名称改未 file
 
:f
 打印当前正文的名称和状态
 
    
:n
 移动光标到第 n 行
 
    
:/str/
 将光标移动到下一个包含 str 字符串的行
 
:?str?
 将光标移动到最近的一个包含 str 字符串的行
 
:/str/w file
 将第一个包含 str 字符串的行写到文件 file 中
 
:/str1/,/str2/w file
 将从包含 str1 到 包含 str2 之间的行写入 file 文件
 
    
:s/str1/str2
 用 str2 替换掉首次出现的 str1
 
:s/str1/str2/g
 用 str2 替换掉每次出现的 str1
 
    
:d
 删除当前光标行
 



|
VI的常见使用技巧 
本文出自:http://www.linuxforum.net 作者:吴阿亭 Jephe wu (2001-09-05 07:00:00) 
一:简介:  

      Vi命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,很多人不喜欢VI因为它 
      的众多的命令集,但是我们只需要掌握基本的命令然后灵活地加以运用,相信你会象我一 
      样喜欢它的。  
      本文旨在更有条理有归纳性地介绍VI的一些最常用命令和一些高级的应用。  

      二:基本命令介绍:  

      1) 光标命令  
      k,j,h,l---上下左右光标移动命令,虽然你可以在Linux中使用键盘右边的四个光标键, 
      但是记住这四个命令还有非常有用的,也就是右手在键盘上放置的位置部分  
      nG ----n为行数,该命令立即使光标跳到指定行。  
      Ctrl+G-----光标所在位置的行数和列数报告  
      w,b------使光标向前或向后跳过一个单词  

      2) 编辑命令  
      i,a,r -------在光标的前,后,上方插入字符命令(i=insert,a=append,r=replace)  
      cw,dw------ 改变(置换)/删除光标所在处的单词的命令 (c=change,d=delete)  
      x,d$,dd -----删除一个字符,光标所在处到行尾的所有字符,和整行的命令  

      3) 查找命令  
      /string, ?string-----从光标所在处向后/向前查找相应的字符串的命令  

      4)拷贝复制命令  
      yy,p -----拷贝一行到剪贴板/取出剪贴板中内容的命令  

      三:常见问题及应用技巧  

      1) 在一个新文件中读/etc/passwd中的内容,取出用户名部分  
      vi file  
      :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd  
      :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分  
      :3r /etc/passwd 这是在指定的行号后面读入文件内容  

      另外一种方法删掉文件中所有的空行及以#开始的注释行  
      #cat squid.conf.default | grep -v '^$' | grep -v '^#'  


      2) 在打开一个文件编辑后才知道登录的用户对该文件没有写权,不能存盘  
      vi file  
      :w /tmp/1 既然没法存盘,不想放弃所做的所有修改,先临时存到/tmp/1  
      :20,59w /tmp/1 或者仅仅把第20到59行之间的内容存盘成文件/tmp/1  

      3) 用VI编辑一个文件,但需要删除大段大段的内容  
      vi file  
      Ctrl+G 把光标移到需要删除的行的处按ctrl+G显示行号,再到结尾处再按Ctrl+G.  
      :23,1045d 假定两次行号为23和1045,则把这几间的内容全删除  

      也可以在开始和结束两行中用ma,mb命令标记后用:'a,'bd删除.  

      4) 在整个文件或某几行中在行首或行尾加一些字符串  
      vi file  
      :3,$s/^/some string / 在文件的第一行至最后一行的行首前插入some string  
      :%s/$/ some string/g 在整个文件每一行的行尾添加 some string  

      :%s/string1/string2/g 在整个文件中替换string1成string2  
      :3,7s/string1/string2/ 仅替换文件中的第三到七行中的string1成string2  


      Note: s为substitute,%表示所有行,g表示global  

      5) 同时编辑两个文件,在两个文件中拷贝剪贴文本  
      vi file1 file2  
      yy 同时打开两个文件,在文件1的光标所在处拷贝所在行  
      :n 切换到文件2 (n=next)  
      p 在文件2的光标所在处粘贴所拷贝的行  
      :N 切换回文件1  


      6) 替换文件中的路径  

      :%s#/usr/bin#/bin#g 把文件中所有路径/usr/bin换成/bin  
      或者用  
      :%s//usr/bin//bin/g 在'/'前用符号指出'/'是真的单个字符'/'   
 

|
Vi 简介

Vi 是 Unix 世界里极为普遍的全萤幕文书编辑器,几乎可以说任何一台 Unix 机器都
会提供这套软体。Linux 当然也有,它的 vi 其实是 elvis(版权问题),不过它们都
差不多。熟悉 DOS 下的文书处理後,也许会感到 vi 并不好用;Unix 上也已经发展出
许多更新、更好用的文书编辑器,但是并不一定每一台 Unix 机器上都会安装这些额外
的软体。所以,学习 vi 的基本操作还是有好处,让你在各个不同的机器上得心应手。


Vi 基本观念

Unix 提供一系列的 ex 编辑器,包括 ex, edit 和 vi 。相对於全萤幕编辑器,现在
可能很难想像如何使用 ex, edit 这种行列编辑器(有人用过 DOS 3.3 版以前所附的
EDLIN 吗?)。 Vi 的原意是 "Visual",它是一个立即反应的编辑程式,也就是说可
以立刻看到操作结果。

也由於 vi 是全萤幕编辑器,所以它必须控制整个终端机萤幕哪里该显示些什麽。而终
端机的种类有许多种,特性又不尽相同,所以 vi 有必要知道现在所使用的是哪一种终
端机。这是藉由 TERM 这个环境变数来设定,设定环境变数方面请查看所使用 shell
的说明。(除非执行 vi 的时候回应 unknow terminal type ,否则可以不用设定。)

只要简单的执行 vi 就可以进入 vi 的编辑环境。在实际操作之前先对它有个概略的了
解会比较好。Vi 有两种模式,输入模式以及指令模式。输入模式即是用来输入文字资
料,而指令模式则是用来下达一些编排文件、存档、以及离开 vi 等等的操作指令。当
执行 vi 後,会先进入指令模式,此时输入的任何字元都视为指令。


进入与离开

要进入 vi 可以直接在系统提示字元下键入 vi <档案名称>,vi 可以自动帮你载入
所要编辑的档案或是开启一个新档。进入 vi 後萤幕左方会出现波浪符号,凡是列首有
该符号就代表此列目前是空的。要离开 vi 可以在指令模式下键入 :q, :wq 指令则是
存档後再离开(注意冒号)。要切换到指令模式下则是用 [ESC] 键,如果不晓得现在
是处於什麽模式, 可以多按几次 [ESC],系统会发出哔哔声以确定进入指令模式。


Vi 输入模式

要如何输入资料呢?有好几个指令可以进入输入模式:

新增 (append)
a 从游标所在位置後面开始新增资料,游标後的资料随新增资料向後移动。
A 从游标所在列最後面的地方开始新增资料。

插入 (insert)
i 从游标所在位置前面开始插入资料,游标後的资料随新增资料向後移动。
I 从游标所在列的第一个非空白字元前面开始插入资料。

开始 (open)
o 在游标所在列下新增一列并进入输入模式。
O 在游标所在列上方新增一列并进入输入模式。

也许文字叙述看起来有点繁杂,但是只要实际操作一下马上可以了解这些操作方式。实
务很重要,尤其是电脑方面的东西随时可以尝试及验证结果。极力建议实际去使用它而
不要只是猛 K 文件,才有事半功倍的效用。(注:此段为废话。)


Vi 基本编辑

配合一般键盘上的功能键,像是方向键、[Insert] 、[Delete] 等等,现在你应该已经
可以利用 vi 来处理文字资料了。当然 vi 还提供其他许许多多功能让文字的处理更形
方便,有兴趣的看倌请继续。

在继续下去之前先来点 BCC 吧。电脑有许多厂牌,不同的硬体及作业系统。PC 也不是
仅仅只有 IBM PC 及其相容品而已。事实上,包括键盘,终端机等等往往都有不同的规
格。这代表什麽?

在文书编辑软体上会遇这样的问题,某些电脑的键盘上没有特定的几个功能键!那麽不
就有某些功能不能用了?这个问题在 Unix 系统上也一样,几乎各大电脑厂商都有自己
的 Unix 系统,而 vi 的操作方法也会随之有点出入。我们固然可以用 PC 的键盘来说
明 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 进阶应用

相信现在对於 vi 应该已经有相当的认识。处理文字也不会有什麽麻烦才对。如果有兴
趣善用 vi 的其它功能进一步简化操作过程,不妨继续看下去。


移动游标

由於许多编辑工作是藉由游标来定位,所以 vi 提供许多移动游标的方式,这个我们列
几张简表来说明(这些当然是指令模式下的指令):

┌—————┬—————————————┬—————┐
│指令 │说明 │功能键 │
├—————┼—————————————┼—————┤
│0 │移动到游标所在列的最前面 │[Home] │
├—————┼—————————————┼—————┤
│$ │移动到游标所在列的最後面 │[End] │
├—————┼—————————————┼—————┤
│[CTRL][d] │向下半页 │ │
├—————┼—————————————┼—————┤
│[CTRL][f] │向下一页 │[PageDown]│
├—————┼—————————————┼—————┤
│[CTRL][u] │向上半页 │ │
├—————┼—————————————┼—————┤
│[CTRL][b] │向上一页 │[PageUp] │
└—————┴—————————————┴—————┘
┌——┬—————————————————┐
│指令│说明 │
├——┼—————————————————┤
│H │移动到视窗的第一列 │
├——┼—————————————————┤
│M │移动到视窗的中间列 │
├——┼—————————————————┤
│L │移动到视窗的最後列 │
├——┼—————————————————┤
│b │移动到下个字的第一个字母 │
├——┼—————————————————┤
│w │移动到上个字的第一个字母 │
├——┼—————————————————┤
│e │移动到下个字的最後一个字母 │
├——┼—————————————————┤
│^ │移动到游标所在列的第一个非空白字元│
└——┴—————————————————┘
┌——┬———————————————————┐
│指令│说明 │
├——┼———————————————————┤
│n- │减号移动到上一列的第一个非空白字元 │
│ │前面加上数字可以指定移动到以上 n 列 │
├——┼———————————————————┤
│n+ │加号移动到下一列的第一个非空白字元 │
│ │前面加上数字可以指定移动到以下 n 列 │
├——┼———————————————————┤
│nG │直接用数字 n 加上大写 G 移动到第 n 列 │
└——┴———————————————————┘
┌————┬———————————————┐
│指令 │说明 │
├————┼———————————————┤
│fx │往右移动到 x 字元上 │
│Fx │往左移动到 x 字元上 │
├————┼———————————————┤
│tx │往右移动到 x 字元前 │
│Tx │往左移动到 x 字元前 │
├————┼———————————————┤
│; │配合 f&t 使用,重复一次 │
│, │配合 f&t 使用,反方向重复一次 │
├————┼———————————————┤
│/string │往右移动到有 string 的地方 │
│?string │往左移动到有 string 的地方 │
├————┼———————————————┤
│n │配合 /&? 使用,重复一次 │
│N │配合 /&? 使用,反方向重复一次 │
└————┴———————————————┘
┌————┬———————————————————┬——————————┐
│指令 │说明 │备注 │
├————┼———————————————————┼——————————┤
│n( │左括号移动到句子的最前面 │句子是以 │
│ │前面加上数字可以指定往前移动 n 个句子 │! . ? 三种符号来界定│
│n) │右括号移动到下个句子的最前面 │ │
│ │前面加上数字可以指定往後移动 n 个句子 │ │
├————┼———————————————————┼——————————┤
│n{ │左括弧移动到段落的最前面 │段落是以 │
│ │前面加上数字可以指定往前移动 n 个段落 │段落间的空白列界定 │
│n} │右括弧移动到下个段落的最前面 │ │
│ │前面加上数字可以指定往後移动 n 个段落 │ │
└————┴———————————————————┴——————————┘

不要尝试背诵这些指令,否则後果自行负责。它们看起来又多又杂乱,事实上这是文字
叙述本身的障碍。再强调一次,实际去使用它只要几次就可以不经大脑直接下达这些奇
奇怪怪的指令,远比死记活背搞得模模糊糊强多了。(注:若真的不经大脑而误删资料
与我无关。另,此段为废话。)


进阶编辑指令


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 共享内存一般是怎么使用的,是同消息队列配合使用么
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • Jsp可否使用带有GUI的JavaBean,如何使用?
  • c/c++预处理命令预#,##使用介绍
  • asp程序使用的access在Linux下如何使用!
  • 在div中使用css让文字底部对齐的方法
  • 新装的Linux使用root用户不能使用FTP?
  • Python namedtuple(命名元组)使用实例
  • LINUX下使用Eclipse,如何使用交叉编译器?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3