本节给大家介绍vi编辑器。
1、总述
vi编辑器是一种纯文本编辑器。纯文本就是文件内容没有任何修饰,只有文本字符(没有加粗、斜体、下划线等格式,没有首行缩进,没有分页分节。比如word就不是纯文本编辑器)。
听起来似乎很简陋,但是这是对于日常使用来说必不可少的一款工具,因为我们更改配置文件的时候vi编辑器是一个极佳的选择。甚至许多linux命令都会调用vi编辑器的接口(也就是说不懂vi你就对这些命令毫无办法)。此外,vi是所有类UNIX系统都会内置的一款编辑器,其技术通用性不用多说。
linux中的全屏编辑器有多种,如nano、vi、vim,今天我们介绍vi。
注:nano后续不会介绍,感兴趣的朋友可以自学一下,vim的用法与vi基本一致,是vi的强化版本。我们今天讲到的所有内容都适用于vim。讲完程序包管理之后会再进行增量介绍。因为最小安装没有内置该编辑器,初学者不会装。
vi是模式化的编辑器(像迪迦奥特曼一样有三种变身),它有三种模式:
基本模式:可对文本进行复制、粘贴、删除、查找等操作
输入模式:可输入、修改文本
末行模式:vim编辑器内置的命令行接口,用于保存、退出、设置环境等等
vi的使用(当你使用man vi的时候可能会发现说明是针对vim的,可见vi与vim间的通用之程度):
vi [options] [file ..]
为了方便学习与演示,我们拷贝一份文本文件至/tmp目录下。
[root@localhost ~]# cp /etc/fstab /tmp/
[root@localhost ~]# cat /tmp/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 2418:32:49 2018
#
# Accessible filesystems, by reference, aremaintained under '/dev/disk'
# See man pages fstab(5), findfs(8),mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=d36d93ea-2551-4c6a-a3c9-df98d458b5bc/boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
[root@localhost ~]#
2、基本模式
当我们使用vi命令打开文件时,默认就进入了基本模式
vi /tmp/fstab
基本模式以全屏的方式将文件内容展示出来,基本模式下依然有一个光标,上下左右键可移动光标的位置。
基本模式下的模式切换:
基本模式进入输入模式:
切换方式有多种,首先将光标移动至你想输入或者修改的位置,然后可以通过以下按键进入输入模式。
i:insert, 在光标所在处输入;
a: append,在光标在处后方输入;
o:在光标所在处的下方打开一个新行;
I:在光标所在行的行首输入;
A:在光标所在行的行尾输入;
O:在光标所在处的上方打开一个新行;
切换以上任意一个按键后,可以看到左下角有insert提示符,说明已经进入输入模式。
这几个字母确实很难记,最常用的是i、o、A,不过如果你熟悉其他项,可以帮助你提高效率。
输入模式转换为基本模式:ESC键,按下后,左下角的insert标识即消失
基本模式下的常用技巧:
保存与关闭文件(:为切换到末行模式):
ZZ:保存并退出;
:q 退出(前提是没有对文件进行任何修改)
:q! 强制退出,不保存此前的编辑操作
:wq 保存并退出;
:w 保存,保存后回到基本模式;
:w /PATH/TO/SOMEFILE 保存到指定路径,执行后回到基本模式
行首行尾跳转
^ 跳转至行首的第一个非空白字符;
0 跳转至行首;
$ 跳转至行尾;
行间跳转
#G 跳转至由#指定的行;
1G或者gg 第一行;(文件顶部)
G 最后一行;(文件底部)
句间跳转:
) 上一句
( 下一句
段间跳转(在部分配置文件及shell脚本中常见)
} 上一段
{ 下一段
翻屏:
Ctrl+f 向文件尾翻一屏
Ctrl+b 向文件首部翻一屏
Ctrl+d 向文件尾部翻半屏
Ctrl+u 向文件首部翻半屏
删除:
d$ 删除从光标所在处到行尾的内容
d^ 删除从光标所在处到行首的内容
dd 删除光标所在处的行;(删除的内容保存在缓冲区,可以用于粘贴,类似剪切功能)
#dd 删除光标所处的行起始的向下共#行;(删除的内容保存在缓冲区,可以用于粘贴,类似剪切功能)
dG 删除光标所在行至文末的全部行
d1G 复制光标所在行至文首的全部行
复制(yank, y):
y$ 复制光标处至行尾
y^ 复制光标处至行首第一个非空字符
y0 复制光标处至行首
yy 复制一整行
#yy 复制#行
yG 复制光标所在行至文末的全部行
y1G 复制光标所在行至行首的全部行
粘贴(p, put, paste):
p(小写p):缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方;
P(大写P):缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方;
可视化选定:
v:按字符选定;
V:按行选定;
选定后可执行复制、删除等操作
撤销、还原、重复:
u:撤销此前的操作;
Ctrl+r:还原撤销
. 重复上次的指令,如上次按下了dd,那么此时.(句点符号)就等同于dd指令,以此类推。
查找(方法与more类型相似)
/keyword:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串;
?keyword:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串;
n:下一个,与命令方向相同;
N:上一个,与命令方向相反;
3、输入模式
再次模式下可以对文件内容进行输入、删除、改动,不必多说
从输入模式退回基本模式:ESC键
4、末行模式
在基本模式下,按:可进入末行模式
内置的命令行接口,具有一些增强功能,如:
:set number 显示行号,可简写为set nu
:set nonu 取消显示行号
:# 光标跳转至第#行
定界查找替换:
:n1,n2/keyword 从第n1行到n2行查找keyword(可以用n和N进行上下关键词跳转)
:n1,n2s/word1/word2/g 从第n1行到n2行查找word1,替换为word2
%s/word1/word2/g 全文查找word1,替换为word2
注:此处的分隔符/可以换为其他的不常用字符,如@等
关注本公众号获取每日更新