vim 笔记
这篇文档主要记录使用 VIM 的一些命令,要想真正用好 VIM 还需要进行大量的练习,使其成为肌肉记忆,道理和用键盘打字是一样的。
1. 移动光标
在学习移动光标之前,要了解 VIM 有三种工作模式:普通模式、插入模式、视图模式。移动光标的操作是在普通模式下进行的。
怎样移动光标呢?一种很简单的方法,是用方向键移动。但是我们在写代码的时候,双手放在键盘的字母区,要移动光标的使用,还要把手挪到方向键上,然后来回的按上下左右,移动光标,这样是不是很麻烦?VIM 用什么方法移动光标呢? h
j
k
l
就这四个键,就能实现光标在左、下、上、右四个方向上移动。而且,我们能注意到,这四个键就在你右手的食指、中指、无名指下方,操作起来很方便。
2. 插入模式
2.1. 进入插入模式和退出
打开一个文件后,我们需要输入内容,这时候怎么办呢?这就用到 VIM 的插入模式。进入插入模式的方法很简单,按一下键盘上的 i
键就可以输入内容了,输完内容需要退出的时候,按一下 Esc
键。
2.2. 多种进入插入模式方法
如果只是按 i
进入插入模式的话,你会发现每次插入的位置都在光标前面,如果需要在后面插入,还得把光标向后移,如果需要在一行末尾插入内容的话,这时候你就会发现,按 i
根本定位不到那里,还得按方向键,怎么办呢?其实 VIM 还有很多种插入方法。
按键 | 含义 |
---|---|
i | 在光标前进入插入模式 |
I | 在光标所在行行首进入插入模式 |
a | 在光标后进入插入模式 |
A | 在光标所在行行尾进入插入模式 |
o | 在光标所在行下方插入空行进入插入模式 |
O | 在光标所在行上方插入空行进入插入模式 |
s | 删除光标指定的字符并进入插入模式 |
S | 将光标所在行清除并进入插入模式 |
2.3. 退出 VIM
在退出 VIM 前,按 Esc
键使其回到普通模式。
a. 保存修改并退出
Shift
+z
+z
:
+w
+q
b. 直接退出不修改
- 未做改动,
:
+q
- 放弃改动,
:
+q
+!
3. 删除、撤销、恢复命令及数字用法
3.1. 删除命令
在普通模式下,用 x
命令删除单一字符,作用同插入模式下的 Delete
键。删除更多字符用 d
命令。
3.2. 组合删除命令
在使用组合删除命令前,先要了解一些更高级的光标操作动作。除了上面的 h
、j
、k
、l
之外,还有一些移动光标动作命令,值得掌握,因为这些命令能够实现快速的将光标定位到我们需要的位置。
按键 | 含义 |
---|---|
0 | 将光标定位到行首 |
^ | 同上 |
$ | 将光标定位到行尾 |
b | 将光标定位到光标所在单词的起始处 |
e | 将光标定位到光标所在单词的结尾处 |
w | 讲标定位到下一个单词的起始处 |
gg | 将光标定位到文件开头 |
G | 将光标定位到文件末尾 |
然后在这些命令前加上 d
键,就能实现多种删除功能。
按键 | 含义 |
---|---|
d0 | 删除光标从当前位置(不包含)到该行行首的所有字符 |
d^ | 同上 |
d$ | 删除从光标当前位置(包含)到该行行尾的所有字符 |
db | 删除从光标当前位置(不包含)到单词起始处的所有字符 |
de | 删除从光标当前位置(包含)到单词结尾处的所有字符 |
dw | 删除从光标当前位置(包含)到下个单词起始处的所有字符 |
dd | 删除光标所在行的所有字符 |
dgg | 删除光标所在行(包含)到文件开头的所有字符 |
dG | 删除光标所在行(包含)到文件末尾的所有字符 |
dh | 删除光标前面一个字符 |
dl | 删除光标指定的字符 |
dj | 删除光标所在行以及下一行的所有字符 |
dk | 删除光标所在行以及上一行的所有字符 |
记忆规律可以简单的归纳为**向前删除不包含光标指定字符本身,向后删除包含光标指定字符本身。**使用中要学会举一反三,熟练运用 h
、j
、k
、l
和删除命令,通过不同的组合方式,达到快速删除目的。
3.3. 数字的应用
利用数字可以更高效的运用 VIM。在 h
、j
、k
、l
前加上数字,就表示向某个方向移动多少个字符或多少行。同样,在删除命令中,也可以在 d
命令后加数字再加动作命令,就能实现按照指定字符或行数进行删除。
3.4. 撤销和恢复
a. 撤销
u
,撤销最后一次修改U
,撤销对整行的修改
b. 恢复
Ctrl
+r
,恢复撤销的内容
4. 粘贴、拷贝、替换、修改
重点:VIM 中使用删除命令,并不会直接删除,而是放在 VIM 寄存器中,类似于剪贴板。
注意:这些命令都是在普通模式下进行。
4.1. 粘贴命令
通过删除命令删除一段内容后,这段内容放在了寄存器中,需要把这段内容放入其他地方时,只需要把光标定位到要放入的位置,然后按下 p
键将删除的内容放入光标之后,或按 Shift
+ p
将内容放入光标之前。
注意:删除的内容是整段时,会另起一行粘贴;删除的内容是非整段时,会粘贴在光标之后的同一段。
4.2. 拷贝命令
拷贝的命令是 y
,用法和删除命令 d
一样,也可以使用数字。
4.3. 替换命令
替换命令是 r
,将光标移动到要替换的字符上,按下 r
再输出新字符即可替换光标所在的字符。
使用 数字
+ r
表示从光标开始替换 数字 个字符。
4.4. 替换模式
按下 Shift
+ r
进入替换模式,可以连续替换光标处及其后内容,按 Backspace
则恢复被替换字符之前的内容。
4.5. 修改命令
注意:修改会进入插入模式,替换不会进入插入模式。
修改命令是 c
,后可跟 数字
+ 动作命令
,用法同删除命令 d
。
按键 | 含义 |
---|---|
c0 | 删除光标从当前位置(不包含)到该行行首的所有字符,并进入插入模式 |
c^ | 同上 |
c$ | 删除从光标当前位置(包含)到该行行尾的所有字符,并进入插入模式 |
cb | 删除从光标当前位置(不包含)到单词起始处的所有字符,并进入插入模式 |
ce | 删除从光标当前位置(包含)到单词结尾处的所有字符,并进入插入模式 |
cw | 删除从光标当前位置(包含)到下个单词起始处的所有字符,并进入插入模式 |
ch | 删除光标前边一个字符,并进入插入模式 |
cl | 删除光标指定的字符,并进入插入模式 |
cj | 删除光标所在行以及下一行的所有字符,并在光标下一行进入插入模式 |
ck | 删除光标所在行以及上一行的所有字符,并在光标下一行进入插入模式 |
cc | 删除光标所在行的字符,并进入插入模式 |
重点:修改命令 = 删除 + 进入插入模式
注意:修改命令进入插入模式时的光标就在要修改的位置上。
5. 文件信息、跳转、定位括号和缩进
5.1. 文件信息
快捷键: Ctrl
+ g
5.2. 跳转
两种跳转方式
行号
+Shift
+g
:
+行号
5.3. 定位括号
将光标放在括号的一边上,按下 %
即可定位另一边的括号所在位置。
5.4. 缩进
缩进一行用 >>
,反缩进一行用 <<
。
缩进多行用 可视模式
,按 v
进入。用 h
、j
、k
、l
或组合动作命令移动光标,光标移动到的地方被选中,之后按一下 >
或 <
完成缩进。
6. 搜索、替换
6.1. 搜索命令
在普通模式按下 /
进入命令行模式。/
后跟要搜索的内容。要查找下一个目标,按下 n
键,要查找上一个目标按下 N
键。
注意: 搜索是从光标处开始向后查找
使用 ?
也可进入命令行模式,使用方法和 /
一样,不过作用是相反的,包括 n
和 N
的作用也是相反的。
被搜索的内容会被标注高亮,取消高亮的方法是:
:nohl
6.2. 替换命令
-
替换一处内容,将光标定位到要替换的位置,输入
:s/old/new
。 -
替换光标所在行内容,输入
:s/old/new/g
。 -
替换整个文件匹配内容,输入
:%s/old/new/g
。 -
替换整个文件匹配内容并在替换前确认,输出
:%s/old/new/gc
,会看到如下信息:`replace with __ (y/n/a/q/l/^E/^Y)?
- y 表示替换
- n 表示不替换
- a 表示替换所有
- q 表示放弃替换
- l 表示替换第一个并进入插入模式
- ^E 表示用 Ctrl+e 来滚动屏幕
- ^Y 表示用 Ctrl+y 来滚动屏幕
也可以使用 :m,ns/old/new/g
替换从 m 行到 n 行的内容。
7. 执行 shell 命令,文件另存为,合并文件和打开多个文件
7.1. 执行 shell 命令
使用 :!
+ shell
命令执行 shell 命令。
7.2. 文件另存为
a. 另存文件
使用 :w
+ 新文件名
另存文件。
b. 另存局部内容
按下 v
键进入可视模式。选中要另存为的内容。按下 :
,在屏幕出现的提示信息后输入 w + 文件名
另存文件。
7.3. 合并文件
输入 :
+ r
+ 文件名
将指定文件内容读取到光标所在位置下一行。
7.4. 打开多个文件
a. 命令
在命令行中使用 -o
或 -O
选项打开多个命令。
vim -o test1.txt text2.txt text3.txt
-o
表示垂直并排打开-O
表示水平并排打开
b. 在不同文件间切换
Ctrl
+w
+w
切换到下个文件Ctrl
+w
+方向键或 h, j, k, l
c. 退出
- 退出单个文件用
:q
、:q!
、:wq
、Shift + z + z
- 退出所有文件用
:qa
、:qa!
、:wqa