vim使用技巧

1、vi编辑

vi编辑文本有三种常用模式:命令模式,编辑模式,末行模式

命令模式移动光标方式
# 纵向移动
G			#快速移动到文本行尾
gg			#快速移动到文本行首
2gg			#快速移动第二行
2G			#快速移动第二行
            
# 横向移动  
$			#快速移动到一行的行尾
0 或 ^		        #快速移动到一行的行首
命令模式复制内容方式
dd			# 默认剪切一行内容
2dd			# 从当前光标往下剪切2行内容
yy			# 默认复制一行内容  copy
2yy			# 从当前光标往下复制2行内容
p			# 从当前光标下黏贴一遍内容
2p			# 从当前光标下黏贴2遍内容
u			# 撤销文本的操作
ctrl+r		        # 撤回文本的操作
dG			# 表示从光标位置到文本末尾内容删除
r			# 表示替换单个字符
命令模式进入编辑模式
i			# 表示当前光标位置前插入,进入编辑模式
a			# 表示当前光标位置后插入,进入编辑模式
o			# 表示当前光标位置另起下一行插入,进入编辑模式
O			# 表示当前光标位置另起上一行插入,进入编辑模式
I			# 表示当前光标位置所在行的行首,进入编辑模式
A			# 表示当前光标位置所在行的行尾,进入编辑模式
C(大写)		        # 表示从光标所在位置到行尾内容剪切,进入编辑模式
cc			# 表示剪切光标所在行,进入编辑模式
末行模式命令操作
:			# 从命令模式进入末行模式
:q			# 未编辑时,退出
:q!			# 强制退出vim
:wq			# w 保存内容
:set nu		        # 显示行号
:set nonu	        # 取消显示行号
/xxx		        # /表示从当前光标下搜索内容		按n 向下继续搜索 
?xxx		        # ?表示从当前光标下搜索内容		按n 向下继续搜索 
/xxxc		        # 搜索内容后加c 表示搜索忽略大小写
:set ic		        # 表示在此次编辑,搜索忽略大小写
:set noic	        # 表示在此次编辑,取消忽略大小写

2、vim的特殊用法

​ vim特点:对编辑文本内容不同的高亮显示

如何取消搜索后高亮?
使用/搜索内容时,会对搜索到内容进行高亮,永久保存

# 取消搜索后高亮
/ 搜索文本内容没有的内容
vim快速移动或复制数据
:2,4move9	—— # 将第2行到第4行的内容移动到第9行的下一行
:2,4copy9	—— # 将第2行到第4行的内容复制到第9行的下一行
对文本内容进行批量替换
:%s#oldboy#oldgirl#g	# 表示文本内容oldboy替换为oldgirl
符号说明:               
%			# 表示文本的全部内容
s		        # 表示替换 substitute
g			# 表示把每一行匹配到内容替换
                         
                      
替换内容说明:          
:2,4s#oldboy#odgirl#g	# 表示只替换第2行到第4行的oldboy
:%s#oldboy#oldgirl#		# 表示替换全部行首个oldboy
如何批量修改内容
# a、批量编辑注释内容
第一个步骤:进入批量编辑状态(视图模式)
	ctrl+v    --- 进入试图模式
	-- VISUAL BLOCK --		 
第二个步骤:批量选中要编辑的行
	方向键上下选择要编辑的行
第三个步骤:进行编辑修改
	shift+i--进行单行编辑
第四个步骤:实现批量修改
	按esc

# b、批量删除注释内容
第一个步骤:进入批量编辑状态(视图模式)
	ctrl+v    --- 进入试图模式
	-- VISUAL BLOCK --		 
第二个步骤:批量选中要编辑的行
	方向键上下选择要删除的行
第三个步骤:批量删除内容
	按键盘字母d 或者 按键盘字母x

3、vim编辑原理

vim编辑错误解决(重点)
# 1). vim命令后面一定要接文件
# 2). vim只能编辑存在的目录中的文件,可以创建文件
# 3). 编辑文件突然非正常状态退出
	编辑一个文件,在没有退出前,直接断开远程连接
	再次打开文件编辑会有警告提示	—— 产生了一个临时文件
	Swap file ".text.swp" already exists!
	[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
	O		(大写)进入vim模式,只能读文件内容,不能修改文件	—— "text" [readonly] 19L, 132C 
	E		(大写)强行进入编辑模式
	R		(大写)恢复关闭之前对文件的操作内容
	D		(大写)删除临时文件
	Q/A		(大写)退出			
vim编辑文本内容原理

# 1).使用vim编辑一个文件  —— vim text
# 2).判断文件所在目录下是否有文件相关的临时文件
    拥有:会有报错信息提示
    没有:正常进入命令模式
# 3).打开文件,产生临时文件
# 4).正常编辑文件
# 5).编辑完成,是否正常保存文件退出
    正常:编辑模式——ESC——末行模式—— :wq 保存退出
    异常:临时文件将会永久保留
如何处理vim异常的流程
# 1).查看文件信息  —— 按大写O查看
# 2).确认文件内容是否需要恢复
    需要:按大写R恢复数据
    不要:按大写E进入编辑
# 3).删除临时文件
    a、按大写D删除临时文件
    b、rm -rf .text.swp

4、如何直接对文件内容编辑

1).文件中添加一行信息
echo 'oldboy'  >> text		# 文件内容末行追加内容

echo命令说明
# a.向屏幕上输出内容
	echo 'hello word'
# b.输出连续的内容1,2,3......10
	echo {1..10}		# {} 表示输出的内容  .. 表示输出从哪到哪
	1 2 3 4 5 6 7 8 9 10
	
	echo {01..10}		# 可以显示同位数
	01 02 03 04 05 06 07 08 09 10
# c.输出显示不连续的内容
	输出奇数
	echo {01..10..2}  # 01 03 05 07 09
	输出偶数
	echo {02..10..2}  # 02 04 06 08 10

       
# 2).文件中添加多行信息	—— cat命令
	cat >>text << EOF	# EOF表示开始结束标志(任意)
	> oldboy
	> EOF
{} 的使用技巧
# 1.输出连续的字符
 echo {1..10}
# 2.在目录下创建多个文件
touch oldboy{01..5}

# 3.在同一个目录下创建多个目录
mkdir -p oldboy01/oldgirl{01..5}
mkdir oldboy/oldgirl{1..5}/olddog

5、过滤筛选文件内容命令

​ 四剑客命令初步认识

老大:awk		—— 对数据内容统计分析
老二: sed		 —— 对数据内容进行替换
老三:grep		—— 对数据内容进行过滤
老四:find		—— 查找文件

grep 命令过滤信息操作

# 测试文件信息
[root @matter ~ ]# cat text
oldboy01
oldgirl01
olddog01
oldboy02
oldgirl02
olddog02

1).过滤文件中的oldboy
    [root @matter ~ ]# grep oldboy text
    oldboy01
    oldboy02

2).过滤文件中的oldgirl的一行和他上一行的内容
    [root @matter ~ ]# grep oldgirl text -B 1		—— B before 在....之前
    oldboy01
    oldgirl01
    --
    oldboy02
    oldgirl02

3).过滤文件中的oldgirl的一行和他下一行的内容
    [root @matter ~ ]# grep oldgirl text -A 1		—— A after 在...之后
    oldgirl01
    olddog01
    --
    oldgirl02
    olddog02

4).过滤文件中的oldgirl信息的下一行和下一行信息也显示
    [root @matter ~ ]# grep oldgirl text -C 1		-C center 居中
    oldboy01
    oldgirl01
    olddog01
    oldboy02
    oldgirl02
    olddog02

5).统计过滤内容出现的次数
    [root @matter ~ ]# grep oldgirl text -c		-c count 计数

# sed 命令过滤信息操作
    [root @matter ~ ]# sed -n '/oldgirl/p' text
    oldgirl01
    oldgirl02
# sed过滤格式: sed -n '/过滤内容/p' 文件
    p	将过滤的内容信息输出
    -n	取消对文件内容的输出,只显示过滤匹配的内容

# awk 命令过滤信息操作
    [root @matter ~ ]# awk '/oldgirl/' text
    oldgirl01
    oldgirl02

6、文件内容直接替换

sed 命令替换文件信息

# 需求文件中oldboy替换为olddog
vim命令替换:%s#oldboy#olddog#g
sed命令替换:'s#oldboy#olddog#g'

# sed默认显示替换内容,对文件内容并不替换
[root @matter ~ ]# sed 's#oldboy#oldgirl#g' text	
oldgirl01
oldgirl01
olddog01
oldgirl02
oldgirl02
olddog02

# 参数 -i sed真正的替换文件内容
[root @matter ~ ]# sed 's#oldboy#oldgirl#g' text -i
[root @matter ~ ]# cat text
oldgirl01
oldgirl01
olddog01
oldgirl02
oldgirl02
olddog02

# sed命令默认是假装替换内容信息并显示
# sed -i	真正文件内容替换

tr 命令 —— 只能假装替换,除非使用重定向

# tr 命令格式:tr 要替换的内容 	替换的内容  < 文件

echo 'python123'|tr 'python' 'linux'   # linuxx123
	
echo 'python123'|tr "a-z" "A-Z"   # PYTHON123

tr替换原理

[root @matter ~ ]# cat text 
oldboy01
oldgirl02
[root @matter ~ ]# tr 'oldboy' 'oldgirl' < text
ldgir01
ildgirl02	
# 为什么替换内容乱了?
o —— o
l —— l
d —— d
b —— g
o —— i 
y —— r
# 替换信息的情况: tr命令替换信息是1对1的替换
01. 替换的内容字符数 > 修改后的内容字符数   abcd > 123
echo abcd|tr "abcd" "123"    # 1233

02. 替换的内容字符数 < 修改后的内容字符数   abc  < 1234
echo abcd|tr "abc" "1234"    # 123d

03. 替换的内容字符数 = 修改后的内容字符数   abcd = 1234
echo abcd|tr "abcd" "1234"   # 1234

04. 极特殊情况 
abcba 12345  54345
c - 3
b - 4
a - 5
原文地址:https://www.cnblogs.com/xuanxuan360/p/12803936.html