Linux编辑器之Vi、Vim的使用及技巧篇

转载请注明出处:http://blog.csdn.net/yiliumu/article/details/20870921

我们如何在Linux这样的一个命令行界面下,来编写一些脚本,web页面,等等

早期就是叫vi,后来推出了一个增强版,叫vim
所有的Linux系统都会默认安装这个vi,vim/vi是一个功能强大的全屏幕文本编辑器,是Linux/Unix最常用的文本编辑器,它的作用是建立,编辑,显示文本文件,
vim/vi没有菜单,只有命令

其实使用vi就是用来:编辑一个配置文件,还有就是来编写一些shell脚本

学习vi之前,必须知道,vi有三种工作模式:
(1)命令模式
(2)插入模式
(3)编辑模式
我们使用vi filename进入vi的命令模式,输入"i"或者"a"或者"o"其中一个,进入插入模式,插入完敲打Esc键,返回到命令模式,可以通过“:”从命令模式到达编辑模式,回车后结束编辑模式,回到命令模式,输入":wq"("write quit"保存并退出)可以退出vi

以下命令都是在命令模式下输入的:
在命令模式下,我们还有很多的命令可以用到,比如我们要让编辑器显示行号,就可以使用":set number"(或者使用简写":set nu")
接下来是高效的使用vi,我们在命令模式下,使用下面的命令:
a      在光标后附加文本
A      在本行行末附加文本
i      在光标前插入文本
I      在本行开始处插入文本         0零也可以移动到行首,但不执行插入操作
o      在光标下一行插入新的一行
O      在光标上一行插入新的一行

定位命令:
h                方向左键     
l                方向右键     
k                方向上键     
j                方向右键     
$                移至行尾
0(零)            移至行首,但不执行插入操作
H                移至屏幕上端
M             移至屏幕中央
L             移至屏幕下端
 
:set nu          设置行号
:set nonu        取消行号
gg               到第一行
G                都最后一行
ng(n为数值)     到第n行
:n(n为数值)     到第n行

删除命令:
x             删除光标所在处的字符
nx             删除光标所在处后n个字符
dd             删除光标所在行,ndd删除n行
dG             删除光标所在行到文件末尾的内容
D             删除从光标所在处到行尾
:n1,n2d         删除指定范围的行

复制和剪切命令:
yy或者Y 复制当前行
nyy或者nY 复制当前行以下n行
dd         剪切当前行(其实就是删除)
ndd         剪切当前行以下n行
p、P     将内容粘贴在当前光标所在行下或行上

替换和取消命令:
r             取代光标所在处的一个字符,操作:按下r,然后再按你要替换的新的字符
R             从光标所在处开始替换字符,直到按Esc结束
u             取消上一步操作,撤销,在你没有保存退出之前都可以撤销

搜索和替换命令:
/关键字          敲完“/关键字”之后,按下回车,以后向前搜索指定的字符串n(next),向前搜索按N键
注意:Linux是严格区分大小写的,在搜索的时候,比如"/ftp",此时只能搜索到小写的ftp,不能搜索到大写的ftp关键字,所以此时我们在使用/ftp前,可以使用":set ic",将搜索设置为忽略大小写,再使用"/ftp"来搜索。同时,我们也可以将忽略大小写关闭掉,忽略大小写,输入":set noic"

s表示替换
":%s/old/new/g"(命令的最后一个指令:g表示不询问确认,如果是c则表示询问确认,询问中a:all,q:quit),其中%s表示全文替换,即将全文中的所有old都替换为new,比如,将所有的ftp替换为lamp,":%s/ftp/lamp/c"

":n1,n2s/old/new/g"表示将第n1行到第n2行的old用new来替换,比如将10行到20行中的The替换为this,就可以使用":10/20s/The/this/g"

那如何退出vi编辑器呢,我们可以使用“:wq”来保存退出,同时我们也可以使用“shift+zz”,表示两个大写的“ZZ”,也就等同于“:wq”,保存退出

我们可以此时可以将/test/services的所有者的写权限去掉,chmod u-r /test/services 或者chmod 444 /test/services ,此时再进入vi /test/services ,此时写入一些东西,按Esc键,再编辑模式下输入":wq",保存退出,此时会有一个警告,说这个文件是只读文件,但是由于你是root管理员,所以你可以增加一个“!”来强制保存,我们可以使用":wq!"来强制保存退出,但是,并不是说所有人来编写这个文件,加上"!"就可以强制保存退出的,所以只有这个文件的所有者,或者你是root超级管理员才可以强制保存该文件
还要注意一点,Linux中的root是最大的,所有东西都是它说了算,任何文件,即便他没有写权限,它也可以对任何一个文件进行写,所以他是一个特权用户

那么有时候我们使用vi /test/service按错的时候,vi会自动给你创建一个文件,那么此时如果你不想保存这个文件,并要退出,那么你就可以使用":q!",表示不保存退出

有时候当你在用一个编辑器写一个脚本文件的时候,需要定时的"ctrl+s"来定时保存文件,但是不退出,那么在vi下,我们可以使用“:w”来保存,再继续往下写,如果还是提示没有写的权限,那么“文件所有者”可以使用“:w!”来强制写入
我们还可以使用“:w /root/services.bak”,将文件另存为(备份)到另外一个目录

到目前为止,我们如果是想在vi下做一些应用,那么这些已经差不多了,要对以上的所有vi命令非常熟练,因为到时要配置一些apache文件,我们可以快速的定位到要修改的地方

vi中有趣的用法:
(1):我们可以在操作中的vi导入文件:比如:
使用vi打开一个文件,在编辑模式下,输入":r /etc/services",就能在操作中的文件中导入/etc/services
(2):有时候我们在写一些shell脚本的时候,在vi环境内,我们需要查看一些系统的东西,比如"ls -l /"等等的命令,这时候我们又不想退出这个vi环境,那么我们就可以使用":! ls -l /"来查看系统的东西
(3):我们在有时候写一些脚本的时候,需要在文件中写入当前时间,以作为标记,那么此时我们可以使用“:r !date”,其中":r"表示导入文件,但是我们要导入命令执行的结果,此时我们可以使用“!”加上命令,其实这个命令就是上面两个命令的结合,此时他就会在你“光标高亮”的地方,帮你加上date执行的结果

这里有几点需要注意的,在Linux配置文件和shell脚本中,“#”表示注释
(1)有时候,我们在配置文件中,我们需要将#号去掉,即去掉注释,那我们直接可将光标移动到要删除的#号上,再按下“x”删除,这个过程是很啰嗦的。所以怎样来提高我们的效率,就是“定义快捷键”
vi中定义快捷键:
比如我们要定义一个快捷键的作用是:无论我们的光标在一行中的任何一个位置,我们只要按下一个快捷键,就可以将行前加入#号以起到注释的效果
我们现在定义一个"ctrl+p",就可以使用如下命令:
":map ^P I#<ESC>"  (注意,在vi环境下^符号是使用ctrl+v联合ctrl+p或者ctrl+v+p按出来的) 
大写"I"表示回到行首,并进入插入模式,#表示插入一个#号,<ESC>表示插入后回到命令模式

我们可以使用大写的I和0零将光标移动到行首,但是我们使用0零只是将光标移动到行首,此时并不能插入,是在命令模式下,所以我们还是使用大写的I

(2)有时候在写完一些自动化得shell脚本后,需要在末尾将自己的邮箱留下,别人才知道这个是你写的,那么我们就可以定义一个快捷键,就不用每次都敲入了,比如定义一个ctrl+e
此时我们可以使用:
":map ^E(ctrl+v以及ctrl+e或者ctrl+v+e)i(E与i之间不需要空格)test@qq.com":表示在光标的前面插入test@qq.com,并在插入模式下,E可以理解为email

(3)比如我们有时候要将行首的#号干掉,此时我们也可以定义一个快捷键,方便我们操作
":map ^B (ctrl+v ctrl+b或者ctrl+v+e) 0x"
0表示回到行首,还是在命令模式,x表示在命令模式下删除光标所在处的字符,此时我们就可以将光标移动到要删除#号的行中,就可以将#删除了

连续行注释,其实就是我们前面学过的替换
(4)比如有时候我们需要将一个函数都注释掉,那么此时我们如果还是使用快捷键的方式来实现注释功能,那就太麻烦了,你需要将光标一次一次的移动到每一行上面,然后再注释。那么我们可以使用:

":10,20s/^/#/g"   其中"10,20s"表示10行至20行,s表示全文,^表示行首,#表示我们要替换的字符,g表示不询问确认,其实就是我们上面讲的替换,^表示将行首替换为"#"
假如我们要将#号去掉,那么我们可以使用:
":10,20s/#//g" 将10行到20行中的#号替换为""空就行了,其实我们在论坛中经常看到会有过滤敏感词的功能,那我们也可以在vi中写一些过滤敏感词的脚本,然后来实现敏感词的过滤成"***"等等特殊字符。
那有时候我们会看到一些语句中,有两个#号,比如:#this is#a test,那么这个时候我们该怎么来删除行首的#号呢,我们可以
":1,19s/^#//g"       ^表示行首,^#表示行首的#替换为“”空,这时候中间的#不会被替换

(5)那有时候我们的注释不是#号,而是//呢,那我们可以使用
":1,10/^/\/\//g",其中^表示行首,"\/\/"表示将两个/分别转义,此时就表示将行首替换为//了

(6)如果我们在vi中有经常需要输入比较长的信息,我们又不想将其定义为快捷键,那么我们就可以使用:
":ab mymail test@qq.com"
可以理解为当输入a时,就会显示b,此时我们在vi中,将光标移动到我们要输入邮箱的位置上,输入mymail,然后回车,就可以自动输入这个邮箱了

那么我们怎样取消上面定义的快捷键和ab等按钮呢
我们可以使用":unmap ^P"将ctrl+p的快捷键取消,(注意其中的^符号是使用:ctrl+v+p按出来的)
还可以将上面的mymail取消:unab mymail

有时候,我们在使用":set nu"时,会有行号的出现,但是,但我们使用":q"退出的时候,再vi进入的时候,就没有了行号了,上面也是一样,我们将快捷键取消了,那么只是在当前的vi文件中取消,那如果我们要将其全部取消呢,这时候我们就需要编辑vi的配置文件
那么vi的配置文件存放在什么位置呢?存放在每个用户的宿主目录下,每个用户的宿主目录(也称为家目录)用“~”波浪线表示,home directory,在Linux中,每个用户都需要有一个宿主目录,也就是每个用户登录过来后,都需要有一个存储管理自己东西的位,如果这个用户没有宿主目录(home directory家目录),很多Linux和UNX是不允许该用户登录的,所以在Linux里,添加一个用户,缺省就会给该用户创建一个数组目录,这个宿主目录理论上可以任意指定,但是如果你没有为该用户指定数组目录的位置,则上面的“~”号就表示用户的宿主目录。
管理员root     默认就是/root    管理员比较特殊,宿主目录不在/home目录下,而是在根目录下,用root命令的目录,其他普通用户的宿主目录都是在/home下
普通用户users  默认都是/home下面,用用户名来给他命名,比如普通用户的用户名是zhangsan,那么该用户的数组目录就是/home/zhangsan,lisi           --->/home/lisi如果你没有指定,默认是这样

再删除一个用户的时候,可以使用userdel -r zhangsan (-r,remove表示将该用户的宿主目录,计划任务等等有关的信息都删除)

每个用户都可以定义自己vi的使用方法,vi的配置文件存放在该用户的宿主目录中(~/.vimrc),那也就是每个用户都有自己的vi配置文件,都可以定义vi的使用方法,那如果你想改变vi的使用方法(设置快捷键,ab等),就可以改变你的配置文件,上面已经说过,不同的用户“~”号(即宿主目录)表示不同
那么我们要编辑该vi配置文件,就可以
vi ~/.vimrc或者vi /root/.vimrc,缺省这个文件是什么都没有写的
那么我们就可以在这里面设置一些快捷键,等等,比如:
set nu 表示打开一个vi就设置行号
map ^P I#<esc>
ab mymail test@qq.com
这样,你在使用vi打开所有的文件都会有效,而不像我们刚才,只对某一个vi有效。

最后,这里给大家推荐一个关于Vim热键设计的游戏:http://bbs.chinaunix.net/thread-3729133-1-1.html

本章节学习了Linux的文本编辑器Vi/Vim的使用技巧,下一章节将会学习Linux中用户管理使用到的配置文件。
--------------------- 
作者:一流木 
来源:CSDN 
原文:https://blog.csdn.net/yiliumu/article/details/20870921 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值