前言
最近想转 vim,高效是建立在对命令烂熟于心的基础上的。自己总结了一些方便记忆 vim 命令的点。(以 vscode 的 vim 插件为例)
vim 特点
我感觉 vim 的最大的特点就在于它的命令组合,比如说:
20dd
数字“20”就代表执行次数,“dd”是删除当前行,这个命令就代表着删除光标所在处开始的后三行。
又比如:
dG
字符“d”代表删除,字符“G”代表文末,这个命令就代表着删除光标所在行到最后一行的所有数据。
据此我们可以明白 vim 一般模式下的大致语法:
[执行次数][执行命令][执行范围]
据此,我们只需要记住常用按键的基本的功能,就能举一反三,推出各种复杂的命令。
按键基础功能
光标移动
| 按键 | 功能 |
|---|---|
| h | 光标向左移动一个字符 |
| j | 光标向下移动一个字符 |
| k | 光标向上移动一个字符 |
| l | 光标向左移动一个字符 |
| H | 屏幕顶行 |
| L | 屏幕底行 |
| J | 合并两行 |
| f | 行内字符查找 |
| G | 移动到文档最后一行 |
| W,w | 下一单词 |
| E,e | 词尾 |
| B,b | 前一个单词 |
| 0 | 移动到这一行的最前面字符处 |
| $ | 移动到这一行的最后面字符处 |
| + | 移动到非空格符的上一行 |
| - | 移动到非空格符的下一行 |
增删改查
| 按键 | 功能 |
|---|---|
| / | 向前搜索 |
| ? | 向后搜索 |
| N | 查找上一处 |
| n | 查找下一处 |
| x | 向前删除一个字符 |
| X | 向后删除一个字符 |
| d | 删除 |
| D | 删除行 |
| Y | 拷贝行 |
| y | 拷贝 |
| p | 将复制的数据在光标下一层贴上 |
| P | 将复制的数据在光标上一层贴上 |
| c | 修改 |
| C | 修改至行末 |
| f | 行内字符查找 |
| F | 行内字符反向查找 |
| s | 删除字符并插入 |
| S | 删除行并插入 |
一般模式切换到编辑模式
| 按键 | 功能 |
|---|---|
| i,I | i 为从目前光标所在处输入;I 为在目前所在行的第一个非空格符处开始输入。 |
| a,A | a 为从目前光标所在的下一个字符开始输入;A 为从光标所在行的最后一个字符开始输入。 |
| o,O | o 为在目前光标所在的下一行处输入新的一行;O 为在目前光标所在的上一行处输入新的一行。 |
| r,R | r 只会取代光标所在的那个字符一次;R 会一直取代光标所在的文字。 |
特殊功能
| 按键 | 功能 |
|---|---|
| ~ | 大小写转换 |
| u | 复原上一操作 |
| . | 重复上一操作 |