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