VIM文本编辑器

1
2
3
4
vi 和 vim 命令是linux中强大的文本编辑器, 由于Linux系统一切皆文件,而配置一个服务就是在修改其
配置文件的参数。
vim 编辑器是运维工程师必须掌握的一个工具, 没有它很多工作都无法完成。
vim 其实是 vi 的升级版

vim三种工作模式

1
Vim编辑器中设置了三种模式: 命令模式、编辑模式、末行模式,每种模式分别又支持多种不同的命令快捷键,大大提高了工作效率,而且用户在习惯之后也会觉得相当顺手。要想高效率地操作文本,就必须先搞清这三种模式的操作区别以及模式之间的切换方法。

命令模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#进行快捷键操作
##光标的跳转
Shift + g |G //将光标跳转到文件最后一行
gg //将光标跳转到文件的第一行
Ngg //将光标跳转到指定行(N为阿拉伯数字)
Shift +4 |$ //将光标跳转到当前所在行的行末
Shift +6 |^ |0 // 将光标跳转到当前所在行的行首
## 复制粘贴
yy //复制光标所在行的整行内容
p(小写p) //将复制的内容粘贴到光标所在行的下一行
P(大写P) //将复制的内容粘贴到光标所在行的上一行
Nyy | yNy //将光标所在行整行内容及下面N-1行内容复制(N为阿拉伯数字)
## 剪切删除
dd // 将光标所在行一整行内容,剪切(删除)
Ndd | dNd //将光标所在行及下面N-1行内容剪切(N为阿拉伯数字)
Shift + d|D // 将光标所在字符及后面整行内容剪切(删除)
x // 删除当前光标所在字符
Shift +x|X //将光标所在当前字符的前一个字符删除
d+shift +g|dG //将光标所在行及后面所有行内容删除
## 撤销回滚替换
U // 撤销上一次操作
Ctrl + r //恢复上一次撤销的操作
r // 替换光标当前所在的一个字符
Shift +r |R //从光标所在字符开始进行替换直到按ESC结束


## 翻页
Ctrl + b // 向前翻页
Ctrl + f // 向后翻页

编辑模式

1
2
3
4
5
6
7
8
9
10
11
12
13
-- INSERT --
像正常的Windows文本编辑器一样,可以随意写入内容
## 从命令模式如何进入编辑模式
i // 在光标所在位置进入编辑模式(输入内容在光标之前)
I // 将光标跳转到光标所在行的行首并进入编辑模式(输入内容在光标之前)
a // 将光标跳转到光标所在字符的后一个字符并进入编辑模式(输入内容在光标之前)
A // 将光标跳转到光标所在行的行末并进入编辑模式(输入内容在光标之前)
s // 将光标所在字符删除并进入编辑模式(输入内容在光标之前)
S // 将光标所在行的整行内容删除并进入编辑模式
o // 将光标移动到当前所在行的下一行并进入编辑模式
O // 将光标移动到光标所在行的上一行并进入编辑模式
## 从编辑模式返回命令模式
ESC

末行模式(底行模式)–保持退出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 在编辑器的左下角进行操作
显示行号、搜索、替换、保存、退出 ...
# 进入末行模式的方法
1)在命令模式下,输入冒号
2)在命令模式下,输入/
## 保存退出
w:write写入(保存
q:quit退出
:w // 只保存但是不退出
:q // 退出但不保存 (没有改内容)
:wq // 保存退出 快捷键 Shift + zz | ZZ
:x // 保存退出 和:wq相等
:q! // 强制退出
:w! // 强制保存
:wq! // 强制保存并退出
########### 错误 ###########
:qw // 错误写法,先退出后保存
E37: No write since last change (add ! to override) // 文件写入内容,没有保存,无法直接退出,除非强制退出
E45: 'readonly' option is set (add ! to override) // 只读文件,无法保存退出,只有root用户可以强制保存退出
E212: Unable to open and write files // 文件无法写入
E212: Can't open file for writing // 文件无法写入,出现原因:1.没有写入权限2.文件写入到一个不存在的目录中

末行模式—搜索

1
2
3
/想要搜索的内容
n:下翻,查找下一个
N:上翻,查找上一个

末行模式—替换

1
2
3
4
:%s#要被替换的内容#替换的内容#g
%:所有行
s:search 搜索
g:全局替换

末行模式—光标跳转及命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
## 显示行号
:set number 简写 :set nu
## 取消显示行号
:set nonumber 简写 :set nonu
## 光标跳转到指定行
:N (N为阿拉伯数字)
## 忽略大小写
:set ic
## 取消忽略大小写
:set noic
## 自动缩进
:set ai
## 取消自动缩进
:set noai
## 显示制表符,结束符...
:set list
## 取消
:set nolist
## 设置环境变量 在当前登录用户的家目录下 创建一个 .vimrc
set fenc=utf-8
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
set number
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set ruler
set incsearch
set showmatch
set matchtime=10
set ignorecase
set cursorline
set t_Co=256
#设定默认解码
set?fenc=utf-8?
set?fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
#显示行号
set number
#vim使用自动对齐,也就是把当前行的对齐格式应用到下一行
set autoindent
#依据上面的对齐格式,智能的选择对齐方式
set smartindent
#设置tab键为4个空格
set tabstop=4
#设置当行之间交错时使用4个空格
set shiftwidth=4
#设置在编辑过程中,于右下角显示光标位置的状态行
set ruler
#设置增量搜索,这样的查询比较smart
set incsearch
#高亮显示匹配的括号
set showmatch
#匹配括号高亮时间(单位为 1/10 s)
set matchtime=10
#在搜索的时候忽略大小写
set ignorecase
#禁止生成临时
#set nobackup
#当前行高亮
set cursorline
#支持256色
set t_Co=256

vim编辑器写入流程

aaa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
当我们在使用vim编辑文件时
1)首先会在源文件目录下生成一个.swp的临时文件
2)如果vim非正常退出的情况下,该临时文件一直存在
3)下一次编辑则会提示
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
只读模式打开 继续编辑 覆盖 退出
解决方案:
1)查看modified状态 如果是yes,则需要覆盖源文件
- vim -r /etc/sysconfig/network-scripts/ifcfg-ens33
- vim /etc/sysconfig/network-scripts/ifcfg-ens3
(R)ecover 按 r
2)删除.swp临时文件即可
rm -f /etc/sysconfig/network-scripts/.ifcfg-ens33.swp
1)查看modified状态 如果是no,则需要覆盖源文件
(Q)uit 按q退出
2)直接删除.swp临时文件
rm -f /etc/sysconfig/network-scripts/.ifcfg-ens33.swp

视图模式(命令模式)

1
2
3
4
5
6
7
8
块视图模式 -- VISUAL BLOCK -- Ctrl + v
# 批量注释
1)Ctrl + v 进入块视图模式
2)按键盘的上下左右,选中想要的内容
3)如果是在行前加入内容,Shift + i
4)如果是在行后加入内容,Shift + a
5)输入想要的内容后,返回命令模式(ESC)
行视图模式 -- VISUAL LINE -- Shit + v

vim扩展知识

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
## 编辑文件直接跳转到指定行
[root@localhost ~]# vim +N 1.txt // N为阿拉伯数字
[root@localhost ~]# vim +3 1.txt
## 对比文件不同之处
[root@localhost ~]# vimdiff 1.txt 2.txt
[root@localhost ~]# diff 1.txt 3.txt
3,6c3,6
< http://pxost.baidu.com/index.html
< http://mp3.baiadu.com/index.html
< http://www.baidu.com/3.html
< http://post.baidxu.com/2.html
---
> http:aaaaa//pxost.baidu.com/index.html
> http://mp3xxx.baiadu.com/index.html
> http://www.baxxidu.com/3.html
> http://post.baixxdxu.com/2.html
## 同时编辑多个文件 (使用Ctrl + ww 进行切换)
[root@localhost ~]# vim -o 1.txt 2.txt // 水平拆分
[root@localhost ~]# vim -O 1.txt 2.txt // 垂直拆分