第六章 Vim编辑器
1 简介
Vim是一个高度可配置的文本编辑器,旨在高效的创建和更改任何类型的文本。运维必须掌握vim编辑器的操作。
Vim非常稳定,并且正在不断开发以变得更好。
它的特点包括:
- 持久的、多级撤消树
- 广泛的插件系统
- 支持数百种编程语言和文件格式
- 强大的搜索和替换
- 与许多工具集成
2 安装vim
在Centos7环境下,安装vim命令如下:
root@localhost-110:~# yum install vim -y
3 Vim初体验
3.1 Vim的三种常见模式
VIM常用的有三个模式:
- 编辑模式:默认模式,可以实现移动光标,剪切/黏贴文本
- 插入模式:用于修改文本
- 末行模式:保存、退出等
3.1.1 末行模式
默认模式一般用于浏览文件,也包括一些复制、粘贴、删除等操作。这时击键时,一些组合键就是 vim 的功能键,而不会在文本中键入对应的字符。
在这个模式下,我们可以通过键盘在文本中快速移动光标,光标范围从小到大是字符、单词、行、句子、段落和屏幕。启动 VIM 后默认位于默认模式。不论是什么模式,按一下 <Esc>
键 ( 有时可能需要按两下,插入模式按一下 Esc
,就会切换到默认模式,末行模式或者可视模式下执行完操作以后,就会自动进入默认模式,如果进入末行模式或者可视模式没有执行任何操作,按两下 Esc
即可 )都会进入默认模式。
下面的三个模式都是过键盘上相应的键位去触发的。
3.1.2 插入模式
在默认模式中按下个别字母键(后面会详细介绍),会进入插入模式。
例如按 i
键会进行插入模式。该模式启动以后,就会进入编辑状态,通过键盘输入内容。
3.1.3 末行模式
在模式模式中,按下:
(冒号)键或者/
(斜杠),会进入末行模式。在末行模式中可以执行一些输入并执行一些 VIM 或插件提供的指令,就像在shell里一样。这些指令包括设置环境、文件操作、调用某个功能等等。
3.1.4 可视模式
在默认模式按下v, V, <Ctrl>+v
,可以进入可视模式。可视模式中的操作有点像拿鼠标进行操作,选择文本的时候有一种鼠标选择的即视感,有时候会很方便。
以上是关于 VIM 四种模式的解读,我们在使用 VIM 操作文本的时候,编辑区底部一般都会显示当前处于什么模式下(插入模式会有 INSERT 提示,可视模式会有 VISUAL 或者 VISUAL LINE 的提示)。
当对 VIM 有了感觉之后 ,个人认为 VIM 只有两个模式,便于理解(纯个人见解,用熟 VIM 以后,应该会赞同这个理解):
- 操作模式
- 编辑模式
一个好的编辑器我们无非就使用它的两个功能:
1、通过一些快捷键操作编辑器实现我们的功能:复制,黏贴,删除,查询。。。等
2、我们用来编辑,输入内容进入编辑器。
VIM 有一个很重要的按键需要一开始就做出说明,那就是键盘中的 ,这个按键用来切换模式,该按键可以快速切换到末行模式。
3.2 用Vim打开文件
#1、打开一个文件
vim file1
#2、打开多个文件
vim file1 file2
#该方式打开文件,显示屏默认显示第一个文件也就是 file1,如何进行文件间的切换呢?VIM 的模式模式下(参考上文关于模式模式的描述)按下键盘上的冒号 :这时会在显示屏底部出现冒号 :(进入了 VIM 的末行模式),然后在输入 ls ,屏幕上会出现打开的所有文件的序号和文件名,我们继续输入冒号 : ,然后输入 bn (这里的 n需要做一个解释并不是键盘上的 n ,而是文件序号的代指,如 b1 代表显示屏上切换到第一个文件,b2 代表显示屏上切换到第二个文件)。
:ls #这个命令会列出VIM打开的所有文件
:b2 #上面的这个命令将会在显示屏上显示第二个文件
#3、如何在显示屏上一次性显示多个文件呢
VIM 可以实现分屏操作,一个屏幕被多个文件给分占,有左右和上下两种分屏的方式。
左右分屏如下操作:
vim -on file1 file2...filen
这里的n表示具体文件的数目,表示有几个文件需要分屏,从左至右依次显示n个文件
3.3 分屏操作
3.3.1 Vim如何分屏
#请记住一个重要的组合键 Ctrl + w ,操作分屏离不开这个组合键(这里的组合键可没有 + ,只是 Ctrl 和 w 组合实现一个动能,下文谈到的组合健都这样描述 )。
1、按住组合键 Ctrl + w ,然后在按下 s
Ctrl + w s
上面这个命令将会上下分割当前打开的文件。
2、按住冒号:,紧接着输入 sp ,在键入文件名,如下:
:sp file
上面的这个命令将会上下分割当前文件和新打开的 file 。
3、按住组合键 Ctrl + w ,然后在按下 v
Ctrl +w v
上面的这个命令将会左右分割当前的文件
4、按住冒号 :,紧接着输入 vsp ,在键入文件名称,如下:
:vsp file
上面的这个命令将会左右分割当前打开的文件和新打开的文件 file 。
3.3.2 分屏以后如何在文件间切换光标和移动分屏
1.切换左右分屏的光标 :
Ctrl + w h
将当前光标定位到左边的屏幕
Ctrl + w l
将当前的光标定位到右边的屏幕
2.移动左右分屏 :
Ctrl + w H
将当前的分屏移动到左边
Ctrl + w L
将当前的分屏移动到右边
3.切换上下分屏的光标 :
Ctrl + w j
将当前的光标移动到下面的分屏
Ctrl + w k
将当前光标移动到上面的分屏
4.移动上下分屏:
Ctrl + w J
将当前的分屏移动到下面的分屏
Ctrl + w K
将当前的分屏移动到上面的分屏
#其实以上切换分屏按键,用Ctrl+w就可以进行上下切换和左右切换
3.3.3 关闭分屏
1、Ctrl + w c
上面这个命令是关闭当前的分屏
2、Ctrl + w q
上面的这个命令也是关闭当前的分屏,如果是最后一个分屏将会退出 VIM 。
3.4 Vim的输入模式
编辑器的主要功能就是输入文本,编辑文本,很多编辑器在打开文件的时候就可以通过键盘录入文字,但是 VIM 有稍许的不同,刚刚接触 VIM 的时候是很难对 VIM 进行编辑操作的,记得我在刚接触它的时候是很崩溃的(千万个草泥马在内心奔腾),但是你接触久了,了解的多了,也就理解如此设计的美妙之处。
3.4.1 使用Vim编辑文本
这里有必要再强调一下,在使用 VIM 打开文件的时候,这时候的状态是默认模式(Normal-mode),请务必记住这个模式,如果你不确定当前是否处在模式模式,请按一下键盘上的 ESC
,VIM 处理编辑文本需要从模式模式(Normal)切换到插入模式(Insert-mode),进入插入模式的时候你应该会在屏幕底部看到 INSERT 的提示,这时候就可以编辑文本了。
3.4.2 如何从默认模式进入插入模式
i是在光标所在的字符之前插入需要录入的文本。
I 是在光标所在行的行首插入需要录入的文本。
a 是在光标所在的字符之后插入需要录入的文本。
A 是在光标所在行的行尾插入需要录入的文本。
o 是光标所在行的下一行行首插入需要录入的文本。
O 是光标所在行的上一行行首插入需要录入的文本。
s 删除光标所在处的字符然后插入需要录入的文本。
S 删除光标所在行,在当前行的行首开始插入需要录入的文本。
3.5 Vim的末行模式
3.5.1 末行模式基本命令
1、:w
保存当前对文件的修改,但是不退出文件。
2、:w!
强制保存但是不退出文件。
3、:w file
保存当前的文件修改到 file 文件当中。
4、:q!
退出文件,对文件的修改不做保存。
5、:qa!
退出所有的文件,对所有的文件修改都不做保存。
6、:wq
退出文件并保存对文件的修改。
7、:x
退出文件并保存对文件的修改。
8、:X
加密文件
9、:r file
读文件内容到当前文件中
10、:!command
执行命令
11、:r!command
读入当前目录的结果,写入到vim打开的文件中
以上的命令都是在命令行模式下的操作(也就是输入冒号 :紧接着输入相应的字符命令如 :q! 就会执行退出操作)。 zempty 在这里要推荐一个常用的操作就是 ZZ , 当你对文件进行了修改,需要保存退出,那么可以在键盘上快速的键入两个大写的 Z (ZZ),这样文件就会快速的保存退出了 。
3.5.2 关键字的查找
/{目标字符串}
如:/zempty 会在文本中匹配 zempty 的地方高亮。
查找文本中匹配的目标字符串,查到以后,输入键盘上的 n 会去寻找下一个匹配,N 会去寻找上一个匹配。
3.5.3 处理大小写的区分
:set ic
编辑器将不会区分大小写,如果你进行该设置之后,进行关键字查询如 /zempty 如果文本中有 Zempty ,zEmpty,....,只要是字符相同不会区分大小写都会进行匹配。
:set noic
该命令用来区分大小写的查询。
3.5.4 删除多行文本
:n1,n2d
n1 和 n2 指的是起始行号和结束行号,d 是删除关键字
3.5.5 处理文本的替换
:{作用范围}s/{目标}/{替换}/{替换的标志}
作用范围分为当前行、全文、选区等等。
:s/zempty/handsome/g
将会把当前光标所在行的 zempty 替换成 handsome
:%s/zempty/handsome/g
将会把全文中的 zempty 替换成 handsome
下面来谈谈替换的标志。
上文中命令结尾的 g 即是替换标志之一,表示全局 global 替换(即替换目标的所有出现)。 还有很多其他有用的替换标志:
空替换标志表示只替换从光标位置开始,目标的第一次出现
:s/zempty/handsome
作用于当前行,从光标处开始查找替换,仅仅替换第一次匹配 zempty 的地方为handsome 。
:%s/zempty/handsome
替换掉文件中所有行第一次出现 zempty 的地方为 handsome 。
i 表示大小写不敏感查找,I 表示大小写敏感:
:%s/zempty/handsome/i
替换掉所有行第一个出现 zempty (不区分大小写) 为 handsome 。
:%s/zempty/handsome/gi
替换掉所有行出现 zempty (不区分大小写) 为 handsome 。
gc 表示需要确认,例如全局查找"zempty"替换为"handsome"并且需要确认:
:%s/zempty/handsome/gc
3.5.6 定制Vim的工作特性
末行模式的配置只是对当前vim进程有效,可将配置存放在文件中持久保存
#配置文件:
/etc/vimrc #全局
~/.vimrc #个人
#行号
显示:set number 简写:set nu
取消显示:set nonumber 简写:set nonu
#忽略字符的大小写
启用:set ignorecase 简写:set ic
不忽略:set noic
#自动缩进
启用:set autoindent 简写set ai
禁用:set noai
#复制保留格式
启用:set paste
禁用:set nopaste
#显示tab和换行符
启用:set list
禁用:set nolist
#高亮搜索
启用:set hlsearch
禁用:set nohlsearch 简写:nohl
#语法高亮
启用:syntax on
禁用:syntax off
#文件格式
启用windows格式:set ff=dos
启用unix格式:set ff=unix
3.6 Vim的默认模式
VIM 默认模式下,主要进行的操作有光标的移动,复制文本,删除文本,黏贴文本等。
3.6.1 快速移动光标
请记住这几个快捷键 h,j,k,l
这几个按键主要是用来快速移动光标的,h
是向左移动光标,l
是向右移动光标,j
是向下移动光标,k
是向上移动光标,h , j , k ,l
在主键盘区完全可以取代键盘上的 ↑ ,↓ ,← , →
的功能。
3.6.2 在当前行上移动光标
0 移动到行头
^ 移动到本行的第一个不是 blank 字符
$ 移动到行尾
g_ 移动到本行最后一个不是 blank 字符的位置
w 光标移动到下一个单词的开头
e 光标移动到下一个单词的结尾
fa 移动到本行下一个为 a 的字符处,fb 移动到下一个为 b 的字符处
nfa 移动到本行光标处开始的第 n 个 字符为 a 的地方(n 是 1,2,3,4 ... 数字)
Fa 同 fa 一样,光标移动方向同 fa 相反
nFa 同 nfa 类似,光标移动方向同 nfa相反
ta 移动光标至 a 字符的前一个字符
nta 移动到第二个 a 字符的前一个字符处
Ta 同 ta 移动光标方向相反
nTa 同 nta 移动光标方向相反
; 和, 当使用 f, F, t ,T, 关键字指定字符跳转的时候,使用 ;可以快速跳转到写一个指定的字符,, 是跳到前一个指定的字符
3.6.3 跨行移动光标
nG 光标定位到第 n 行的行首
gg 光标定位到第一行的行首
G 光标定位到最后一行的行首
H 光标定位到当前屏幕的第一行行首
M 光标移动到当前屏幕的中间
L 光标移动到当前屏幕的尾部
zt 把当前行移动到当前屏幕的最上方,也就是第一行
zz 把当前行移动到当前屏幕的中间
zb 把当前行移动到当前屏幕的尾部
% 匹配括号移动,包括 ( , { , [ 需要把光标先移动到括号上
* 和 # 匹配光标当前所在的单词,移动光标到下一个(或者上一个)匹配的单词( * 是下一个,# 是上一个)
3.6.4 翻页操作
ctrl+f 查看下一页内容
ctrl+b 查看上一页内容
3.6.5 复制、黏贴、删除
#删除
d 是删除的意思,通常搭配一个字符 ( 删除范围 ) 实现删除功能,常用的如下:
dw 删除一个单词
dnw 删除 n 个单词,
dfa 删除光标处到下一个 a 的字符处( fa 定位光标到 a 处 )
dnfa 删除光标处到第 n 个 a 的字符处
dd 删除一整行
ndd 删除光标处开始的 n 行
d$ 删除光标到本行的结尾
dH 删除屏幕显示的第一行文本到光标所在的行
dG 删除光标所在行到文本的结束
#复制
y 是复制的意思,通常搭配一个字符(复制范围)实现复制的功能,常用的如下:
yw 复制一个单词,还有 ynw
yfa 复制光标到下一个 a 的字符处,还有ynfa
yy 复制一行,还有 nyy
y$ 复制光标到本号的结尾
yH 复制屏幕显示的第一行文本到光标所在的行
yG 复制光标所在行到文本的结束
#黏贴
p ,P是黏贴的意思,当执行完复制或者黏贴的命令以后,VIM 会把文本寄存起来。
p 在光标后开始黏贴
P 大写的 P 光标前开始粘贴
3.6.6 撤销操作和恢复
u 撤销刚才的操作
ctrl + r 恢复撤销操作
3.6.7 删除字符操作和替换
x 删除光标当前所在的字符
r 替换掉光标当前所在的字符
R 替换掉从光标开始以后的所有字符,除非 <ESC > 退出
3.6.8 大小写转换
~ 将光标下的字母改变大小写
3~ 将光标位置开始的3个字母改变其大小写
g~~ 改变当前行字母的大小写
gUU 将当前行的字母改成大写
guu 将当前行的字母全改成小写
3gUU 将从光标开始到下面3行字母改成大写
gUw 将光标下的单词改成大写。
guw 将光标下的单词改成小写
3.7 可视化模式
在末行有”— VISUAL —“提示,表示在可视化模式下。
如何进入可视化模式呢?
- v:面向字符 — VISUAL —
- V:面向整行 — VISUAL LINE —
- ctrl+v 面向块,— VISUAL BLOCK —