文件编辑器vim

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的妙处。

原文地址:https://www.cnblogs.com/ChiRou/p/13865752.html