vim是Linux中的一款功能强大的文本编辑器,基本可以满足我们在Linux中对文本处理的全部需求
一.用vim打开文件
一般情况下,我们用vim打开一个已有文件时都是用vim+文件名直接打开一个文件,若文件不存在则保存时在当前目录下新建这个文件,并在底行提示“[New File]”,但vim打开的功能不止于此
格式:vim [option] [file]
vim [file] 直接打开(新建)文件,如果是已有文件,则光标
处于上次退出时的位置
vim +# [file] 打开文件后,让光标处于第#行的行首,+默认光标
处于末行行首
vim -b [file] 以二进制的方式打开文件
vim -d [file1] [file2] 比较多个文件(若是两个文件则在屏幕上同
时显示两个文件)
vim -m [file] 以只读的方式打开文件
二.vim的三种主要模式简介
三种模式的简介:
vim主要有Normal(命令),Insert(插入或编辑),extended command(扩展命令)三种模式,这三种模式各有各的功能
命令模式:我们打卡一个文件时直接进入vim的命令模式,也就是vim的默认模式,由于vim是个基于命令行的编辑器,所以没有鼠标,所有的光标移动操作都通过键盘执行,而这些操作都是在命令模式中执行,除了移动光标,命令模式中还主要进行复制,剪切,粘贴,搜索等操作。
编辑模式:这个模式主要提供文本的具体编辑功能
扩展命令模式:多用于查找,读取,显示行号等功能
除了这三种常用的模式,vim还有:选择(visual)模式,不过功能相较单一,主要用于vim中文本的选择
替换(replace)模式,用于字符的替换
模式图示:
模式间的转换:
命令模式 --> 插入模式
i: 在光标所在处输入
I:在当前光标所在行的行首输入
a: 在光标所在处后面输入
A:在当前光标所在行的行尾输入
o: 在当前光标所在行的下方打开一个新行
O:在当前光标所在行的上方打开一个新行
插入模式 --> 命令模式
ESC
命令模式 --> 扩展命令模式
:
扩展命令模式--> 命令模式
ESC, enter
命令模式 --> 替换模式
R/r
替换模式-->命令模式
ESC
命令模式 --> 选择模式
V/v
选择模式-->命令模式
ESC
V/v
替换模式<-->编辑模式
Insert
三.命令模式
在命令模式下输入的命令是在屏幕显示的,下面是常用的命令模式的命令:
ZZ: 保存并退出
ZQ: 不保存直接退出
光标的移动指令:
字符间移动 h: 向左移动光标(等同键盘的上下左右键但上下左右键可以在任意模式下使用,但在扩展命令模式下 使用上下
键,分别表示上一条命令和下一条命令,hjkl只能在命令模式和选择模式使用)
l: 向右移动光标
j: 向下移动光标
k: 向上移动光标
#h/j/k/l 一次性移动指定行 #表示数字(例如输入3 h则表示向左
移动三个字节)
单词间移动w: 光标移到下一个单词的词首
e: 光标移到下一个单词的词尾
b: 光标移到当前或上一个单词的词首
#w|e|b 一次性移动指定个单词 #表示数字
页间移动H: 光标移到当前页的页首
L: 光标移到当前页的页尾
M: 光标移到当前页的页中
整个文件间移动 G: 光标移到整个文件的尾行
#G: 光标跳到指定行
gg: 光标移到整个文件的首行
^: 光标跳转至行首的第一个非空白字符
行内移动0: 光标跳转至行首
$: 光标跳转至行尾
句段间移动):光标跳转至下一句句首
(:光标跳转至上一句句首
}:光标跳转至下一段段首
{
:光标跳转至上一段段首
当前页面的翻页操作:
Ctrl+f: 向文件尾部翻一屏
Ctrl+b: 向文件首部翻一屏
Ctrl+d: 向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
对文本的删除复制等操作:
删除 x: 删除光标处的字符
#x: 删除光标处起始的#个字符
xp: 交换光标所在处的字符及其后面字符的位置
c$: 删除到行尾,同时进入插入模式
c^:删除到行首,同时进入插入模式
c0:删除到行首,包含带空格的行首,同时进入插入模式
cw: 删除到当前单词的词尾,同时进入插入模式
cc: 删除当前行,同时进入插入模式
#cc:多行删除,同时进入插入模式
替换 J:删除当前行后的换行符
~:转换大小写
r: 替换光标所在处的字符
R:切换成REPLACE模式 此模式下输入的字符将替换当前字符,退格键也由删除变为还原之前的字符,按ESC退出
剪切d$: 剪切到行尾
d^:剪切到非空行首
d0:剪切到行首
dw: 剪切当前单词
dd: 剪切光标所在的行
#dd:多行剪切
复制y$: 复制到行尾
y^:复制到非空行首
y0:复制到行首
yw: 复制当前单词
yy: 复制光标所在的行
#yy:多行复制,#表示复制的行数
"[a-z]d|y 复制或剪切到指定的寄存器
粘贴 p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
"[a-z]p|P 粘贴到光标所在位置
撤销重做u撤销最近的更改
#u撤销之前多次更改
U 撤消光标落在这行后所有此行的更改
按Ctrl - r重做最后的“撤消”更改
. 重复前一个操作
n.重复前一个操作n次
四.扩展命令模式
按“:”进入扩展命令模式并创建一个命令提示符: 处于底部的屏幕左侧
命令:
基础命令:
w 写(存)磁盘文件
wq 写入并退出
x 写入并退出
q 退出
q! 不存盘退出,即使更改都将丢失
r [filename] 读文件内容到当前文件中
w [filename] 将当前文件内容写入另一个文件
! [command] 执行命令
r! [command] 读入命令的输出
扩展命令模式中的地址定界功能
地址定界第一步:
在扩展命令模式的“:”后面输入数据来表示范围
下面是输入数据的格式:
# 具体第#行,例如2表示第2行
#,# 从左侧#表示起始行,到右侧#表示结尾行
#,+# 从左侧#表示的起始行,加上右侧#表示的行数例如2,+3 表示2到5行
. 当前行
$ 最后一行
% 全文, 相当于1,$
/pat1/,/pat2/表示从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
例如/asd/,/zxc/表示从第一个有“asd”的行到其后面第一个有“zxc”的行
#,/pat/从第#行到其后面第一个有pat的行
/pat/,$从第一个有pat的行到最后
第二部在输入的数据后跟一个编辑命令
d删除前面所选择的范围
y复制前面所选择的范围
w file: 将范围内的行另存至指定文件中
r file:在指定位置插入指定文件中的所有内容
扩展命令模式的查找功能
/PATTERN:从当前光标所在处向文件尾部查找,PATTERN为要搜索的词条
?PATTERN:从当前光标所在处向文件首部查找,PATTERN为要搜索的词条
n:与命令同方向
N:与命令反方向
扩展命令模式的替换功能
s: 在扩展模式下完成查找替换操作
格式:s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”
引用前面查找时查找到的整个内容
修饰符:
i: 忽略大小写
g: 全局替换;默认情况下,每一行只替换第一次出现
gc:全局替换,每次替换前询问
• 查找替换中的分隔符/可替换为其它字符,例如
s@/etc@/var@g
s#/boot#/#i
举例讲解一:
替换/etc/rc.d/init.d/functions文件中的/etc/sysconfig/init为/var/log
1.vim进入/etc/rc.d/init.d/functions,由于文件过长,在此只选取一部分展示
[root@centos7 ~]# vim /etc/rc.d/init.d/functions# Read in our configurationif [ -z "${BOOTUP:-}" ]; then if [ -f /etc/sysconfig/init ]; then . /etc/sysconfig/init else # This all seem confusing? Look in /etc/sysconfig/init, # or in /usr/share/doc/initscripts-*/sysconfig.txt BOOTUP=color RES_COL=60 MOVE_TO_COL="echo -en \\033[${RES_COL}G" SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m"
2.在命令模式下(默认模式)输入“:”进入扩展命令模式
3.在“:”后输入%s@/etc/sysconfig/init@/var/log@gi
[root@centos7 ~]# vim /etc/rc.d/init.d/functions# Read in our configurationif [ -z "${BOOTUP:-}" ]; then if [ -f /etc/sysconfig/init ]; then . /etc/sysconfig/init else # This all seem confusing? Look in /etc/sysconfig/init, # or in /usr/share/doc/initscripts-*/sysconfig.txt BOOTUP=color RES_COL=60 MOVE_TO_COL="echo -en \\033[${RES_COL}G" SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m":%s@/etc/sysconfig/init@/var/log@gi
解释:“%”表示整个文本
s表示进行查找替换操作(本质上是表示引用“sed”命令)
@用来分界,三个@将命令分成四部分,第二部分为在文本中搜索的词条
第三部分是要替换的词条,第四部分是命令的参数
/etc/sysconfig/init要搜索的词条
/var/log要替换的词条
g表示替换
i表示忽略大小写
结果:替换后部分用蓝色背景显示
[root@centos7 ~]# vim /etc/rc.d/init.d/functions# Read in our configurationif [ -z "${BOOTUP:-}" ]; then if [ -f /var/log ]; then . /var/logelse # This all seem confusing? Look in /var/log, # or in /usr/share/doc/initscripts-*/sysconfig.txt BOOTUP=color RES_COL=60 MOVE_TO_COL="echo -en \\033[${RES_COL}G" SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m"
五.编辑模式
编辑模式在vim中用来输入,修改,删除文本,是编辑文本的模式
编辑模式下的常用命令:ENTE 换行
BACK SPACE 退格键,删除光标前一个字符
DELETE 删除键,删除光标后的一个字符
方向键 在文本中移动光标(在编辑模式下因为要输入,
所以无法使用hjkl来移动光标)
HOME/END 移动光标到行首/行尾
Page Up/Page Down 上/下翻页
Insert 切换光标为输入/替换模式,光标将变成竖线/下划线
ESC 退出输入模式,切换到命令模式