VIM编辑器
在Linux中一切皆文件,Linux一般自带的编辑器是vi,vim相当于vi的一个增强版,支持颜色显示,相比于vi增加了一些功能。默认vim没有安装,需要通过yum install -y vim安装。
常用选项
-o file1 file2... | 同时编辑多个文件(上下排列) |
---|---|
-O file1 file2... | 同时编辑多个文件(左右排列) |
-p file1 file2... | 同时编辑多个文件(每个文件一个标签) |
- 使用Ctrl+ww:切换不同的文件
vim的三种模式
命令模式:使用vim打开一个文件即进入命令模式
快捷命令 | 功能 |
---|---|
h,j,k,l | 对应左下上右键 |
数字0 | 光标移到行首 |
$ | 光标移动到行尾 |
x | 删除/剪切光标所在字符 |
dd | 删除/剪切光标所在行 |
ndd | 删除/剪切n行,包括光标所在行 |
yy | 复制光标所在行 |
nyy | 复制n行,包括光标所在行 |
p | 将复制的内容粘贴到光标所在行的下一行 |
P | 将复制的内容粘贴到光标所在行的上一行 |
np/nP | 粘贴n次 |
gg | 光标移动到文件首行 |
G | 光标移动到文件尾行 |
nG | 光标移动到第n行 |
H | 光标移动到当前屏幕首行 |
M | 光标移动到当前屏幕中间行 |
L | 光标移动到当前屏幕尾行 |
u | 撤销 |
Ctrl+r | 撤销撤销 |
Ctrl+v | 可视块,常用来批量添加/删除注释 |
- 批量删除注释,光标移动到要删除的多行注释首行的注释符号#上,按Ctrl+v,按下键选择要删除行的#号,按d删除。
- 批量添加注释,光标移动到要添加的多行注释首行第一位上,按Ctrl+v,按下键选择要添加#号的行,按I(大写i)进入插入模式,输入#号,按两次ESC即可批量添加注释。
末行模式:命令模式按:进入末行模式
命令 | 功能 |
---|---|
w | 保存 |
q | 不保存退出 |
wq | 保存并退出 |
! | 表示强制 |
set nu | 显示行号 |
set nonu | 取消行号 |
set ic | 不区分大小写 |
set ai | 自动缩进 |
set list | 显示行结束符 |
% s/regexp/new/ | 将所有行的第一个regexp替换为new字符串 |
% s/regexp/new/g | 将所有行的所有regexp替换为new字符串 |
% n s/regexp/new/g | 将第n行的所有regexp替换为new字符串 |
% m,n s/regexp/new/g | 将m行至第n行的所有regexp替换为new字符串 |
% n,$ s/regexp/new/g | 将第n行至尾行的所有regexp替换为new字符串 |
n,m w /PATH/file_name | 将第n至m行写入/PATH/file_name这个文件 |
r /PATH/file_name | 将/PATH/file_name文件内容写入光标下一行 |
/字符串 | 查找字符串(高亮显示),按n(向下)/N(向上)移动光标 |
上述显示行号与行结束符等设置是临时设置,若要永久生效要写入配置文件:
作用域 | 文件路径 |
---|---|
全局生效 | /etc/vimrc |
单用户生效 | ~/.vimrc(默认不存在,需手动创建) |
vi工作流程图
插入模式:
- 命令模式按a,i,o进入插入模式,插入模式可输入字符编辑文件。
vimdiff命令
以vim的方式打开多个文件对比,高亮显示不同的区域。
比较两个文件的差异
diff file1 file2 # 比价file1和file2的不同,<表示左边文件的不同,>表示右边文件的不同
给旧文件打补丁(update)
# 首先创建补丁文件
[chirou@duorou demo]$ diff -u f3.txt f4.txt > bak.patch
[chirou@duorou demo]$ cat bak.patch
--- f3.txt 2020-10-22 20:05:19.613940026 +0800
+++ f4.txt 2020-10-22 20:05:20.268935888 +0800
@@ -1,3 +1,3 @@
-this is f3.txt
+this is f4.txt
hahahaha
-
+hehehehe
在数学上来说,diff类似于对两个集合的差运算,patch类似于对两个集合的和运算。diff比较两个文件或文件集合的差异,并记录下来,生成一个diff文件,这也是我们常说的patch文件,即补丁文件。 patch能将diff文件运用于原来的两个集合之一,从而得到另一个集合。举个例子来说文件A和文件B,经过diff之后生成了补丁文件C,那么这个过程相当于 |A –B| = C ,那么patch的过程就是B + C = A 或A - C = B(A + C = B或者B – C = A)。因此我们只要能得到A, B, C三个文件中的任何两个,就能用diff和patch这对工具生成另外一个文件。这就是diff和patch的妙处。