vi编辑器之问答

12 篇文章 0 订阅
8 篇文章 0 订阅

本文以问答的形式对vi编辑器进行认识、熟悉和使用。适合vi初学者、入门者阅读。更多vi深入的东西请参考其它文档。

1.vi是个什么东东?

VI 编辑器是Visual interface的简称,是Linux和Unix上最基本的文本编辑器。能对文本进行输出、删除、查找、替换、块操作等多种操作,类似与windows上的notepad(但是vi是终端上的程序,没有图形界面)。它没有菜单,只有命令,且命令繁多(这也是很多初学者觉得很难的地方)。同时也注意的是它并不像Word或WPS那样能对字体、格式、段落等其他属性进行编排。

centos6.5上的vi编辑器

上图是centos6.5上的vi(m)编辑器(直接在终端上输入命令vi即可打开)

2.为什么使用vi

为什么我们要使用vi进行文本编辑,换句话说vi编辑器为什么受大家欢迎。我总结了下,有几个原因:1.如上面所说:它是unix/linux上面基本的编辑器,安装完系统后就可以直接使用它,不用单独安装;2.它是非图形界面的编辑器(这哪能说是它的优点呢),就正是因为它是终端型的编辑器,它才能在unix/linux服务器(没有图形界面的操作系统,或者远程连接到linux/unix)上发挥作用,其它图形界面的编辑器如gedit、kate等此时都是渣渣;3.vi编辑器本身的强大,全键盘命令操作、有很多快捷键对文本进行操作、支持自定义设置;4.使用熟练后,你会发现它比其它编辑器gedit等更便捷、高效;5.因为很多牛人大神都用它(扯远老)。

上面我们对vi编辑器有了一个初步的认识,接下来我们将对如何使用vi进行提问。

3.怎么编辑文件

很多朋友在使用vi file.txt打开文件后,不知道怎么输入或修改内容。这是因为vi编辑器有两种工作模式:Command(命令)模式和Insert(插入)模式),vim还多一种Visual(可视)模式。而我们首次打开文件时,默认的是command模式,因此无法进行编辑修改增加内容。
通过下面的输入即可进入insert模式:
i    在光标之前插入;  
a    在光标之后插入;  
I    在光标所在行的行首插入;  
A    在光标所在行的行末插入;
o    在光标所在的行的上面插入一行;  
O    在光标所在的行的下面插入一行;  
s    删除光标后的一个字符,然后进入插入模式;  
S    删除光标所在的行,然后进入插入模式;
上面的命令大家可以打开一个文本文档分别尝试,体会之间的不同。

4.如何关闭文件

很多时候打开了文件后,不知道怎么退出vi编辑器返回到终端上。

退出文件 需要在命令模式中输入命令才可进行相应的保存、退出相关操作。

Esc 键 进入命令模式,然后输入下面的命令可以分别达到不同的效果:

:w    保存;
:w    filename 另存为filename; 
:wq!    保存退出;  
:wq!    filename 注:以filename为文件名保存后退出; 
:q!    不保存退出; 
:x    应该是保存并退出 ,功能和:wq!相同

上面的w表示write,q表示quit。!表示强制的意思,比如:wq!表示强制保存退出。

5.不同模式的区别和切换

通过上面的学习,我们知道vi有三种模式,他们分别是:

Command(命令)模式,用于输入命令(默认是该模式,键入 Esc 也可进入该模式);

Insert(插入)模式,用于插入编辑文本(参考标题3.怎么编辑文件);  

Visual(可视)模式,用于视化的的高亮并选定正文(这个是vim独有的模式,在命令模式下,输入 v 即可进入该模式);

6.方便的光标移动

我们常用方向键来上下左右移动光标,要是你知道了下面的方法来控制光标,这是一件多么快乐的事情。

首先习惯性的 按一下  Esc 进入命令模式

j 向下移动一行;  

k 向上移动一行;  

h 向左移动一个字符;  

l 向右移动一个字符;

(backspace 也可以向前移动一个字符)

上面的几个命令,大家觉得不能体现出什么优势 就和 方向键的功能一样,其实当你使用习惯时,会发现在输入文本时,右手不用怎么移动(不需要移动到遥远的方向键的位置)就可以移动光标了。下面的技巧,你会更喜欢..

在h、j、k、l动作命令的前面加上数字可以叠加操作,比如 3j,表示向下移动3行。
 

7.强大的删除操作

在插入模式中,可以使用backspace来删除字符。但是这样删除很慢,习惯性的 按 Esc进入命令模式,然后通过命令(h、j、k、l)迅速的移动到你需要操作的地方,使用下面的命令进行删除内容:

x 一个字符;  

#x 删除几个字符,#表示数字,比如3x;  
dw 删除一个单词;  

#dw 删除几个单词,#用数字表示,比如3dw表示删除三个单词;  
dd 删除一行; 

#dd 删除多个行,#代表数字,比如3dd 表示删除光标行及光标的下两行;  
d$ 删除光标到行尾的内容;  

J 清除光标所处的行与上一行之间的空格,把光标行和上一行接在一起;

8.怎么撤销修改、删除

往往在对文本编辑时,总有犯错的时候,这是我们如果使用 ctrl+z是不能撤销操作的,正确的方法是:按Esc键(进入命令模式),再按 u 键 即可撤销一次,多按几次 u 就多撤销几次。

记住是在命令模式下输入小写 u 哦...

9.复制和粘贴

说到复制粘贴,我们也会想到剪贴,上面7说的删除操作其实就是剪贴的功能。比如dd后当前行被删除了并放入了vi的剪贴区中,然后移动光标到相应的地方,输入p即可把刚删除的内容粘贴到光标处。

p 在光标之后粘帖;  

shift p 在光标之前粘帖;

下面举个例,

比如我们想把一个文档的第3行复制下来,然后帖到第5行的后面,我们应该怎么做呢?  、

有两种方法;  

第一种方法:  
先把第3行删除,把光标移动到第3行处,然后用dd动作,接着再按一下shift p键。这样就把刚才删除的第3行帖在原处了。--复制
接着我们再用k键移动光标到第5行,然后再按一下p键,这样就把第3行的内容又帖到第5行的后面了;--粘贴

第二种方法:  
进入命令模式移动光标到第3行,在进入可视模式(按Esc键,然后按v键),移动光标选中第3行的内容,然后按y键复制;再移动指针到第5行,最后按p键; 

所以复制和粘贴操作,是命令模式、插入模式及可视模式的综合运用,我们要学会各种模式之间的切换,要常用Esc键,更为重要的学会在命令模式下移动光标。

10.怎么显示行号

很多编辑器都有显示行号的功能,当然vi也有这个功能。

在命令模式下输入:

:set number

即可显示行号

11.查找功能

命令模式

/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找

字符串匹配
 
pattern是需要匹配的字符串,例如:

/abc<Enter>      #查找abc
/ abc <Enter>    #查找abc单词(注意前后的空格)

除此之外,pattern还可以使用一些特殊字符,包括(/、^、$、*、.),其中前三个这两个是vi与vim通用的,“/”为转义字符。

/^abc<Enter>    #查找以abc开始的行
/test$<Enter>    #查找以abc结束的行
//^test<Enter>    #查找^tabc字符串

12.替换功能

命令模式

:s/str1/str2/          #用字符串 str2 替换行中首次出现的字符串 str1

:s/str1/str2/g         #用字符串 str2 替换行中所有出现的字符串 str1

:.,$ s/str1/str2/g     #用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

:1,$ s/str1/str2/g     #用字符串 str2 替换正文中所有出现的字符串 str1

:g/str1/s//str2/g      #功能同上

例如:

:s/vivian/sky/         #替换当前行第一个 vivian 为 sky
:s/vivian/sky/g     #替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/     #替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g     #替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
:%s/vivian/sky/        #(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g    #(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

同时:可以使用 #或+ 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/#         替换当前行第一个 vivian/ 为 sky/
:%s+/oradata/apras/+/user01/apras1/+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
 

13.vim中的正则表达式

请参考:http://blog.charlee.li/vim-regexp/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IccBoY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值