“
在平时运维工作中,vim是最常用的文本编辑工具之一,类似于windows中的nodepadd++ 非常的小巧且灵活,使用起来简单,便于查找,大大增加使用效率 ”
vim的三种模式
🎢命令行模式
打开文件之后 就是命令行模式 需要通过快捷键 进入编辑模式
在命令行模式中 可以通过快捷键对文件进行 复制 粘贴 删除 查看等操作
一般常用的命令 如下:
yy | 复制光标所在的当前行 |
数字yy | 从光标所在行,向下复制数字的行 |
p | 在光标所在的行下一行yy粘贴复制的数据 |
np | 在光标处复制几行 |
dd | 删除光标所在的当前行 |
数字dd | 从光标所行,向下删除数字指定的行 |
u | 撤销上一步 |
G | 移动到末尾行 |
gg | 移动到第一行 也可以是1G |
x | 向后删除一个字符 |
X | 向前删除一个字符 |
关于移动
h | 向左移动 |
l | 向右移动 |
j | 向下移动 |
k | 向上移动 |
gg | 移动到首行 |
G | 移动到尾行 |
nG | 移动到指定的行 |
$ | 移动到行尾 |
0 | 移动到行首 |
可以配合使用
例
向左删除两个字母 d2h
向左复制两个字母 y2h
🎢编辑模式
打开文件后,进入命令模式 通过 i、a、o、O 进入编辑模式
i | 在光标前插入数据 |
a | 在光标后插入数据 |
o | 在当前行下一行插入空白行,并在当前行写数据 |
O | 在当前行上一行插入空白行,并在当前行写数据 |
🎢末行模式(我认为最重要的一个模式)
在命令行输入 : , / , ? 进入该模式
: | 进入末行模式,查找数据 |
/ | 进入末行模式,向后查找数据 |
? | 进入末行模式,向前查找数据 |
关于 " : "
显示行号:
:set nu
取消行号:
:set nonu
切换行号:
:15 #跳转到第15行
10gg #跳转到第10行
10G #跳转到第10行
批量更改相同数据:
一般我用在批量更改域名 或者将http更改为https
:%s/http/https/g #批量将文本中所有http更改为https
:%s/http/https/ #将每一行的第一个http更改为https
:s/http/https/ #将光标所在行的第一个http更换为https
:s/http/https/g #将光标所在行中所有http更换为https
# 注意如果更换路径的话 记得将路径中的/转译
如:
将文本中/root/cr 替换为 /root/nginx/conf.d/cr
:%s/\/root\/cr/\/root/\/nginx\/conf.d\/cr
就是在路径中/之前添加一个\
范围性的更改字符:
:10,20s/http/https/ 将10行到20行之间每一行的第一个http换成https
:10,20s/http/https/g 将10行到20行之间所有的http更换为https
在每行的行首 添加相同的字符
:%s/^/#/
在某个范围内所有的行首添加字符
:%1.10s/^/!!!/
在每行的行尾 添加相同的字符
:%s/$/\&/g
在某个范围内所有的行尾添加字符
:10,40s/$/\&/g
显示文本中高亮
一般编辑配置文件的时候,会有不同的颜色显示 可以通过这个打开或者关闭
:syntax off 关闭高亮
:syntax on 开启高亮
vim的寄存器
使用vim 编辑某个文件时,对这个文件进行的操作都会被记录到寄存器中,当执行保存的指令时(w,x),会将寄存器的信息 写到文件中。
可以通过 :reg 查看所有寄存器
寄存器的分类
🎊 无名寄存器 : "" 最后一次操作的内容(删除,复制 我测试的 就只保存这两种) 注意 这里只保存最后一次操作哦
🎊 数字寄存器:"0 ~ "9 :缓存最近操作的删除,复制等操作内容。"0寄存器缓存最近一次复制的内容,"1 ~"9 缓存最近9次删除的内容,最早被删除的数据,排名越靠后 "0是最新,"9是最老的数据。
如果要复制这里的文本,在命令行模式 输入"2p 复制 "2寄存器的数据
🎊 行内删除寄存器:"- 如果删除的文本不含换行符(不是一整行),会存放到这个寄存器中,如 执行了x,X,d2n 只要不包含换行符 就会保存到行内删除寄存器中。
🎊 只读寄存器:vim寄存器中 有四个只读寄存器,
". : 最后一次被写入的数据,在命令行模式 复制 粘贴的不算 ,如果需要多次复制 ”. 里面的数据,可以输入".p 进行复制
"% : 当前文件的名称
": : 最近一次在寄存器中执行的命令。如果执行了保存命令 :w ,把当前缓冲区的数据保存到文件中,w 就会存在这个寄存器里,如果需要再执行一遍寄存器的命令 可以通过 @: 再执行一次
"# : 当 同时编辑多个文件的时候,编辑完a文件 通过 :bn 切换到下一个文件后 执行 :reg 可以查看到“# 这个缓冲区数据 目前还不知道有什么用
🎊 具名寄存器(字母寄存器):单个字母为一个缓存器,有26个字母缓存器( a - z )
在执行yy 或者dd前面加上寄存器的名字 注意 名字是"a - "z 粘贴的时候 p的全面加上寄存器的名字
🎊 黑洞寄存器 :在数字寄存器中 每添加一条新的数据, 之前"9的内容 都会被丢弃,会导1-9寄存器里面的数据被改变,如果不想数字寄存器里面的信息被改变的话 可以在进行删除或者复制操作的时候,使用这个寄存器 使用方法 "_dd 在执行删除命令的时候 前面加上寄存器的名字
🎊 搜索样式寄存器: "/ 保存上一次搜索使用的命令 比如 在末行模式 通过/ 搜索http
还有表达式寄存器,选择及拖拽寄存器 不过 这两个我工作中 用不到 (主要是 表达式寄存器 看文档 感觉 太!难!了! 我看不懂,也记不住)
vim设置位置标记
在编辑文件的时候 通过按某个组合的按键,光标快速移动到某一行, 可以通过位置标记(mark)来实现
创建位置标记
将光标移动到你要跳转的某一行,使用mn命令进行标记,m是标记命令,n是所作标记的名称,执行完之后 什么效果都看不到 但是 vim已经记录了当前光标所在的行,将光标移动到其他位置,想快速回到刚刚这个位置 按 'n 或者 `n ,同一行可以拥有多个寄存器
'n : 移动到标记行的开头 (注意:这个字符单引号)
`n : 移动到标记的确切位置 (注意:这个字符反撇号 1旁边的按键)
位置标记可用名称
可以使用小写字母 a - z 或者大写字母 A - Z 中的任意一个字母作为标记名称
注意哦 大小写字母是有区别的
小写字母的标记 只能在当前缓冲区内使用(即当前文件中使用)
大写字母的标记可以跨越不同的缓冲区 (即在不同的文件中使用)
列出位置标记
通过 :marks 命令,列出所有的位置标记。里面还包含了一些系统内置的特殊标记
' | 上一次跳转前的位置 |
0-9 | 最近使用的文件 |
" | 上一次退出文件时的位置 |
[ | 上一次修改的开始处 |
] | 上一次修改的结尾处 |
^ | 最近插入的位置 |
. | 最近编辑的位置 |
删除标记
标记也可以像寄存器一样使用,删除标记对应的行 可以使用 d'c ,删除标记c对应的行,删除行之后 相对应的标签也就被删除了,删除和复制 都可以配合标记操作
注意:在当前行执行删除命令 如果不在当标记行执行删除 他会把 当前行和标记行之间所有数据全部删除
:delmarks c x 命令 删除一个或多个标记
:delmarks ! 删除所有标记
vim其他的妙用
🎈 删除每行 开头的注释
光标移动到需要注释文本的首行 首字母
ctrl + v (块选择)
按下箭头选中需要删除的文字 按x 删除
🎈 在每行的开头添加注释
有两种方法 一种是上面说的 使用 :%s/^/#/g 这个组合键
还有一种是通过ctrl + v进行操作
光标移动到需要注释文本的首行 首字母
ctrl + v 通过移动光标,向下选中
选中后 按大写的 i
你会看到光标返回到了刚刚选中的第一行 不用管 直接输入要添加的注释
添加好后 按两次esc键 (在左上角)
🎞未完待续....
最后 一个vim的小游戏:
https://vim-adventures.com/
有兴趣的话 可以关注下我的公众号 也有一写有无趣的内容