文本编辑器


什么是vim?

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

vim 三种工作模式

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

image-20240408144649064


命令模式

# 进行快捷键的操作
## 光标的移动
Shift + g | G 			 // 将光标跳转到文件最后一行
gg 						// 将光标跳转到文件的第一行
Ngg 					// 将光标跳转到指定的行(N为阿拉伯数字)
Shift + 4 | $ 			// 将光标跳转到当前所在行的行末
Shift + 6 | ^ | 0 		// 将光标跳转到当前所在行的行首

## 复制粘贴
yy                      	---复制光标所在行的整行内容
p(小写) 		     	  ---将复制的内容粘贴到光标所在行的下一行
P(大写)		   		  ---将复制的内容粘贴到光标所在行的上一行
nyy|yny                    ---将光标所在整行内容及下面n-1行内容复制(n内容为阿拉伯数字)

## 剪切删除
dd                     ---- 将光表所在行一整行内容,剪切
ndd|dyd                ----将光标所在行及其下面n-1行的内容剪切
shift +d|D             ----将光标的所在字符及后面整行内容剪切
x                      ----删除当前光标所在字符
shift+x|X              ----将光标前面一个字符删除
d + shift + g | dG     ----将光标所在行及其后面的内容全部都删除

## 撤销回滚替换
u                    -----撤销上一次操作
ctrl +r              -----恢复上一次撤销的操作
r                    -----替换光标当前所在的一个字符
shift +r |R          -----从光标所在字符开始进行替换直到按esc  

编辑模式

像正常的Windows文本编辑器一样,可以随意写入内容
## 从命令模式如何进入编辑模式
i                     // 在光标所在位置进入编辑模式(输入内容在光标之前)
I                    // 将光标跳转到光标所在行的行首并进入编辑模式(输入内容在光标之前)
a                    // 将光标跳转到光标所在行的后一个字符并进入编辑模式(输入内容在光标
之前)
A 					// 将光标跳转到光标所在行的行末并进入编辑模式(输入内容在光标之前)
s 					// 将光标所在字符删除并进入编辑模式(输入内容在光标之前)
S 					// 将光标所在行的整行内容删除并进入编辑模式
o 					// 将光标移动到当前所在行的下一行并进入编辑模式
O 					// 将光标移动到光标所在行的上一行并进入编辑模式

# 退出编辑模式
ESC

末行模式

## 保存退出
w:write写入(保存)
q:quit退出
:w // 只保存但是不退出
:q // 退出但不保存 (没有改内容)
:wq // 保存退出 快捷键 Shift + zz | ZZ
:x // 保存退出 和:wq相等
:q! // 强制退出
:w! // 强制保存
:wq! // 强制保存并退出

## 搜索
1)在命令模式下,输入冒号:
2)在命令模式下,输入/
  /想要搜索的内容
n ----- 将光标查找下个一
N ----- 将光标查找上一个


## 替换
:%s#要被替换的内容#替换的内容#g      ------# 是可以代替的
%:所有行
s:search 搜索
g:全局替换
:%s###gc   一个个询问是否替换
:


##光标跳转及命令
## 显示行号
:set number 简写 :set nu
## 取消显示行号
:set nonumber 简写 :set nonu
## 光标跳转到指定行
:N (N为阿拉伯数字)
## 忽略大小写
:set ic
## 取消忽略大小写
:set noic
## 自动缩进
:set ai
## 取消自动缩进
:set noai
## 显示制表符,结束符...
:set list
## 取消
:set nolist

视图模式

在命令模式中 CTRL + v  进去块模式   -- VISUAL BLOCK --
# 批量删除   ------x
# 批量注释
1)Ctrl + v 进入块视图模式
2)按键盘的上下左右,选中想要的内容
3)如果是在行前加入内容,Shift + i  (将光标跳转到光标所在行的行首并进入编辑模式)
4)如果是在行后加入内容,Shift + a  (将光标跳转到光标所在行的后一个字符并进入编辑模式)
5)输入想要的内容后,返回命令模式(ESC)

报错

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 				  // 文件无法写入,文件写入到一个不存在的目录中

vim编辑器写入流程

264f2ef8f2fa19cd9253a7a628d922d

当我们在使用vim编辑文件时
1)首先会在源文件目录下生成一个.swp的临时文件
2)如果vim非正常退出的情况下,该临时文件一直存在
3)下一次编辑则会提示
E325: ATTENTION
Found a swap file by the name "/etc/sysconfig/network-scripts/.ifcfg-ens33.swp"
owned by: root dated: Tue Apr 9 17:08:59 2024
file name: /etc/sysconfig/network-scripts/ifcfg-ens33
modified: no
user name: root host name: localhost.localdomain
process ID: 7334 (still running)
While opening file "/etc/sysconfig/network-scripts/ifcfg-ens33"
dated: Tue Mar 26 17:08:45 2024
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r /etc/sysconfig/networkscripts/ifcfg-ens33"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file "/etc/sysconfig/networkscripts/.ifcfg-ens33.swp"
to avoid this message.
Swap file "/etc/sysconfig/network-scripts/.ifcfg-ens33.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
只读模式打开         继续编辑           覆盖         退出




## 解锁方法  
1.vim -r 进行覆盖操作
2.或者按r 进行覆盖
3.rm -fr .临时文件.swp

vim拓展 diff

## 对比文件不同之处
[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             // 垂直拆分



## 编辑文件直接跳转到指定行
[root@localhost ~]# vim +N 1.txt                  // N为阿拉伯数字
[root@localhost ~]# vim +3 1.txt