vim是vi编辑器的增强版,三种模式:普通模式、插入模式、命令模式
用法:vim 文件名 (文件存在,则显示相关文件内容;文件不存在,则新建,如果未键入内容,退出后不会新建新文件)
普通模式
vim 直接打开一个文件后默认进入普通模式
- 普通模式可操作相关按键进入插入模式:
按键 | 说明 |
---|---|
a | 光标后面插入后续输入的内容 |
A | 光标所在段落的段尾插入后续输入的内容 |
i | 光标前面插入后续输入的内容 |
I | 光标所在段落的段首插入后续输入的内容 |
o | 光标所在行的后面创建新的空白行,插入后续输入的内容 |
O | 光标所在行的前面创建新的空白行,插入后续输入的内容 |
- 普通模式下的光标操作:
方向键(上下左右、hjkl)是最基本的光标操作
快捷键 | 说明 |
---|---|
gg | 光标至文件首 |
G | 光标至文件尾 |
nG | 光标至第n行 |
^ | 光标至行首 |
$ | 光标至行尾 |
fx | 光标至行的下一个x字符处 |
Fx | 光标至行的上一个x字符处 |
W | 光标向右移动一个单词 |
nw | 光标向右移动n个单词 |
b | 光标向左移动一个单词 |
nb | 光标向左移动n个单词 |
- 普通模式下编辑文件操作
快捷键 | 说明 |
---|---|
x | 删除光标当前字符 |
dd | 删除当前行 |
ndd | 向下删除当前n行 |
d$ | 删除光标至行尾的内容 |
J | 删除换行符,合并上下文 |
u | 撤销上一步操作,可多次使用 |
rx | 光标所在字符替换为x,x为单个字符 |
yy | 复制光标当前行 |
p(小写) | 粘贴至光标当前行之后 |
P(大写) | 粘贴至光标当前行之前 |
ZZ | 保存并退出 |
- 普通模式下的查找
普通模式下键入"/"关键词进入查找
小写n跳转下一个匹配的关键词处;大写N跳转至上一个匹配的关键词处。
插入模式
若不知自己当前处于什么模式时,可通过Esc返回普通模式,再由普通模式键入相关快捷键进入插入模式,进行后续的输入
命令模式
在普通模式下,键入冒号":"进入命令模式
- 替换功能
instructions | describe |
---|---|
: s/vm01/vm02/ | 光标当前行第一个出现的vm01替换成vm02,没有则不替换 |
: s/vm01/vm02/g | 光标当前行所有出现的vm01替换成vm02,没有则不替换 |
: 3,5 s/vm01/vm02/g | 3到5行所有出现的vm01替换成vm02,没有则不替换 |
: % s/vm01/vm02/g | 将所有行的vm01都替换成vm02 |
- 保存与退出
instructions | describe |
---|---|
:q! | 不保存并强制退出 |
:wq | 保存并退出 |
:x | 保存并退出 |
:w | 保存 |
:w test.txt | 另存为test.txt |
vim常见设置
instructions | describe |
---|---|
:set nu | 显示行号 |
:set nonu | 取消显示行号 |
:set ignorecase | 查询忽略大小写 |
:split test.txt | 另起窗口编辑test.txt文件:水平分割 |
:vsplit test.txt | 另起窗口编辑test.txt文件:垂直分割 |
:close | 关闭当前编辑的窗口 |
:shell | 进入shell命令行进行操作,命令行键入exit可返回编辑窗口 |
:nohl | 取消高亮显示 |
区块模式及其他实践
区块模式的进入方法:vim 普通模式下,键入 Ctrl+v 进入块选择模式
多行注释
- 进入区块模式后,选中需要注释的多行(左右上下调整行的宽度和行数)
- 大写状态下键入“i”:进入插入模式
- 输入注释符号:“#”
- 输入后键入“Esc”,即可实现多行注释:会自动将“#”添加到其他选中的行
取消多行注释(删除)
- 进入区块模式后,选中需要取消注释的行(左右上下调整行的宽度和行数)
在这里插入图片描述
- 键入小写的“d”即可删除选中的“#”号,完成取消注释
多行复制
如何将一个文本的其他内容复制到其他地方区,比如:我要将 nginx 的配置文件里面的 server 块再复制一份出来,鼠标操作也不好操作,只能通过键盘操作,应该如何实现呢
- 先设置显示行号:set nu,就是要将38行到54行的内容复制到55行即可
- 命令模式下:
38,54 copy 55
(见是直接复制在55行的下一行)
- 也可以使用
move
进行移动操作