整体介绍
Vim编辑器创造者是Bram Moolenaar。Vim是一个类似于Vi的高度可定制的文本编辑器,在Vi的基础上改进和增强了许多新特性。Vim是自由软件(赋予用户运行、复制、分发、学习、修改并改进软件的这些自由的软件)。
Vim的优点:1. 高效率移动;2. 高效的输入。
Vim的模式分可以分为:基本模式 和派生模式两大类。
六种基本模式:
- 普通模式(Normal mode)
- 插入模式(Insert mode)
- 可视模式(Visual mode)
- 选择模式(Select mode)
- 命令行模式(Command line mode)
- Ex模式(Ex mode)
五种派生模式:
- 操作符等待模式
- 插入普通模式
- 插入可视模式
- 插入选择模式
- 替换模式
Vim的基本常用用法将从以下内容展开:
- 光标移动
- 插入模式
- 普通模式
- 退出编辑器
- motion操作范围的指令
- 删除命令
- 数字的使用
- 撤销和恢复命令
- 粘贴命令
- 拷贝命令
- 替换命令
- 修改命令
- 文件信息
- 行号跳转
- 定位括号
- 内容缩进
- 内容搜索
- 执行shell命令
- 文件另存为
- 文件内容合并
- 打开多个文件
1. 光标移动
使用hjkl来移动光标,为了保持和Vi的通用性。
在早期计算机键盘没有方向键。
减少箭头键和字母键之间的来回切换
hjkl所对应的移动方向:
按键 | 含义 |
---|---|
h | 光标向左移动 |
j | 光标向下移动 |
k | 光标向上移动 |
l | 光标向右移动 |
2. 插入模式
进入插入模式的各种方式及其含义:
按键 | 含义 |
---|---|
i | 在光标前边进入插入模式 |
I | 在光标所在行的行首进入插入模式 |
a | 在光标所的后边进入插入模式 |
A | 在光标的所在行的行尾进入插入模式 |
o | 在光标所在行的下方插入空行并进入插入模式 |
O | 在光标所在行的上方插入空行并进入插入模式 |
s | 删除光标指定的字符并进入插入模式 |
S | 将光标所在行清除并进入插入模式 |
注意:
- S 是清除而非删除,是将本行字符删除,但保留该行所占据的位置。
3. 普通模式
文本编辑器的初始化是进入命令模式。
在插入模式下,可通过按ESC键,退出插入模式,进入普通模式。
4. 退出编辑器
方式一 :在命令行模式下
输入:进入命令行模式
命令 | 含义 |
---|---|
q! | 退出但不保存 |
wq | 退出并保存 |
方式二 :在普通模式下
按住shift之后,按下z键两次,即可保存并退出。
5. motion操作范围的指令
按键 | 含义 |
---|---|
0 | 将光标定位到行首的位置 |
0 | 将光标定位到行首的位置,与0功能相同 |
$ | 将光标定位到行尾的位置 |
b | 将光标定位到光标所在单词的起始处 |
e | 将光标定位到光标所在单词的结尾处 |
w | 将光标定位到下一个单词的起初处,从当前位置所在的单词跳至下一个单词 |
gg | 将光标定位到文件的开头 |
G | 将光标定位到文件的末尾 |
注意:
- 单词:在英文中,特殊符号、空格和特殊符号来区分为一个单词;而在中文中,标签符号和空格来区分一个单词
6. 删除命令
方式一 :在插入模式下
可以使用方向键,移动至要删除的位置,然后按下Backspace或者Delete键进行删除。
方式二 :在普通模式下
删除单一字符可以使用 x 命令,先通过hjkl进行定位到对应位置,按下x进行删除当前光标选中的字符。
删除更多字符可以使用 d 命令,格式: d<motion>
按键 | 含义 |
---|---|
d0 | 删除从光标当前位置(不包含)到该行行首的所有字符 |
d^ | 删除从光标当前位置(不包含)到该行行首的所有字符,与d0功能相同 |
d$ | 删除从光标当前位置(包含)到该行行尾的所有字符 |
db | 删除从光标当前位置(不包含)到单词的起始处的所有字符 |
de | 删除从光标当前位置(包含)到单词的结尾处的所有字符 |
dw | 删除从光标当前位置(包含)到下个单词起始处的所有字符 |
dh | 删除光标前边的一个字符 |
dl | 删除光标指定的字符,与x命令相同 |
dj | 删除光标所在行以及下一行的所有字符 |
dk | 删除光标所在行以及上一行的所有字符 |
dd | 删除光标所在行的字符 |
dgg | 删除光标所在行到文件开头的所有字符 |
dG | 删除光标所在行到文件末尾的所有字符 |
注意:
- 所有删除操作,并非真正的删除,它会将该内容放在一个Vim的缓冲区中,相当于Windows的剪贴板的功能。
7. 数字的使用
数字 + motion = 重复多个motion操作
例如: d + 数字 + motion = 删除多个motion范围
8. 撤销和恢复命令
撤销命令:在普通模式下
按键 | 含义 |
---|---|
u | 表示撤销最后一次修改 |
U | 表示撤销对整行的修改 |
恢复命令:在普通模式下
- Ctrl + r 快捷键可以恢复撤销的内容
9. 粘贴命令
由于Vim下使用的删除命令,是会将删除的东西放到Vim寄存器中。所以可以将最后一次改内容粘贴到新的光标位置。
粘贴命令:在普通模式下
按键 | 含义 |
---|---|
p | 表示将最后一次删除的内容粘贴到光标位置之后 |
P | 表示将最后一次删除的内容粘贴到光标位置之前 |
注意:
- 如果粘贴的是整行单位,那么p命令是在光标的下一行开始粘贴。
- 如果拷贝的是非整行的局部字符串,那么p命令将在光标后开始粘贴。
10. 拷贝命令
Vim 用 y 命令实现拷贝,格式:y [数字] motion。
11. 替换命令
Vim 用 r 命令用于替换光标所在的字符。
用法:先将光标移动到需要替换的字符处,按下 r 键,然后输入新的字符。
注意:
- 在键入 r 命令之前输入数字,表示从光标处开始,将多个字符统一替换为新字符。
通过 R 可以进入替换模式,在替换模式中可以覆盖当前已经光标停留位置的内容。但不会进入插入模式。
12. 修改命令
修改命令跟替换命令是不一样的,修改会进入插入模式,替换不会进入插入模式。
Vim 用 c 命令实现修改:c [数字] motion。
按键 | 含义 |
---|---|
c0 | 删除从光标当前位置(不包含)到该行行首的所有字符,并进入插入模式 |
c^ | 删除从光标当前位置(不包含)到该行行首的所有字符,并进入插入模式,与d0功能相同 |
c$ | 删除从光标当前位置(包含)到该行行尾的所有字符,并进入插入模式 |
cb | 删除从光标当前位置(不包含)到单词的起始处的所有字符,并进入插入模式 |
ce | 删除从光标当前位置(包含)到单词的结尾处的所有字符,并进入插入模式 |
cw | 删除从光标当前位置(包含)到下个单词起始处的所有字符,并进入插入模式 |
ch | 删除光标前边的一个字,并进入插入模式符 |
cl | 删除光标指定的字符,并进入插入模式 |
cj | 删除光标所在行以及下一行的所有字符,并进入插入模式 |
ck | 删除光标所在行以及上一行的所有字符,并进入插入模式 |
cc | 删除光标所在行的字符,并进入插入模式 |
注意:修改 != 删除 + 插入,有细微变化。
txt
# 源字符串:
test 1234
# 光标在1上执行d$,test后没有空格:
test
# 光标在1上执行c$,test有空格:
test
13. 文件信息
Vim 通过 Ctrl + g 快捷键,查看文件信息。
14. 行号跳转
方式一 : 在普通模式下
行号 + G
方式二 :在命令行模式下
:行号
15. 定位括号
按下 % 键,快速定位另一个括号,主要定位的()、[]、{}三种。
16. 内容缩进
方式一 :在编辑模式下
使用 Tab 键
方式二 :在普通模式下
按键 | 含义 |
---|---|
>> | 表示缩进 |
<< | 表示反缩进 |
使用 数字 + 缩进符,表示当前光标之后的数字行进行对应的缩进/反缩进。
方式三 :在可视模式下
通过 v 键进入可视模式下。
通过hjkl选中对应的行,再输入缩进符,即可对选中内容进行缩进/反缩进操作。
17. 内容搜索
在普通模式下
按键 | 含义 |
---|---|
/[字符串] | 从当前光标开始,向后进行搜索 |
?[字符串] | 从当前光标开始,向前进行搜索 |
通过 n 命令进行跳转到搜索结果的下一个。 通过 N 命令进行跳转到搜索结果的上一个。
注意:
- 搜索的结果如果一直向后跳转,当从最后一个跳转到起始位置时,会提示:search hit BOTTOM, continuing at TOP。
- 搜索的结果如果一直向前跳转,当从第一个跳转到最后一个时,会提示:search hit TOP, continuing at BOTTOM。
取消搜索结果的高亮显示:在命令行模式下,输入 nohl 回车,即可。
注意:
- .、*、[、]、^、%、/、?、~和$,这10个符号,在搜索时需要加上\进行转义处理。
通过命令行,进行查找并替换:在命令行模式下
- 通过 s/搜索的字符/被替换的字符。光标的所在行的一个搜索的字符内容改为被替换的字符。
- 通过 s/搜索的字符/被替换的字符/g。光标的所在行的所有搜索的字符内容改为被替换的字符。
- 通过 %s/搜索的字符/被替换的字符/g。文件内的所有搜索的字符内容改为被替换的字符。
- 通过 %s/搜索的字符/被替换的字符/gc。文件内的所有搜索的字符内容通过一一问询的方式判断是否被替换的字符替换。
- 通过 起始位置,结束位置s/搜索的字符/被替换的字符/gc。文件内从起始行到结束行搜索的字符内容全部改为被替换的字符。
18. 执行shell命令
:!shell命令,通过Enter键进行返回当前正在编辑的文件。
19. 文件另存为
整个文件进行另存为,在命令行模式下,通过 :w 新的文件名 命令保存
局部内容另存为,在可视模式下,先通过hjkl进行选中另存为的内容,再通过 :w 新的文件名 保存。
文件另存为的新文件已经存在,则在w后加入!即可。
20. 文件内容合并
在命令行模式下,通过 :r 文件名,将文件名的内容添加至光标下方内容。
21. 打开多个文件
Vim 通过 -o 或者 -O 参数,可以打开多个文件,并进行水平或者垂直排列。
注意:
- 可以通过 Ctrl + w + w 将光标切换到下一个文件。
- 对于垂直并排的文件:使用 Ctrl + w + 上、下方向,表示上、下切换文件。
- 对于水平并排的文件:使用 Ctrl + w + 左、右方向,表示左、右切换文件。
针对多个打开的文件,同时关闭。通过在命令行模式输入 :wqa 或 :qa!
命令 | 含义 |
---|---|
qa! | 全部退出但不保存 |
wqa | 全部退出并保存 |