1. 基本指令
1.1 移动命令
1.1.1 光标的基本移动
| 命令 | 解释 |
|---|---|
| h,j,k,l | 左,下,上,右 |
| H | 把光标移到屏幕最顶端一行 |
| M | 把光标移到屏幕中间一行 |
| L | 把光标移到屏幕最底端一行 |
| +或Enter | 把光标移至下一行第一个非空白字符 |
| - | 把光标移至上一行第一个非空白字符 |
| w | 光标停在下一个单词开头 |
| W | 移动到下一个单词开头,但忽略一些标点 |
| e | 光标停在下一个单词末尾 |
| E | 移动到下一个单词末尾,如果词尾有标点,则移动到标点 |
| b | 光标停在上一个单词开头 |
| B | 移动到上一个单词开头,忽略一些标点 |
| ge | 光标停在上一个单词末尾 |
| ( | 前移1句 |
| ) | 后移1句 |
| { | 前移1段 |
| } | 后移1段 |
| 0 | 移动到行首 |
| $ | 移动到行尾 |
| gg | 到文件头部 |
| G | 到文件尾部 |
1.1.2 翻屏
| 命令 | 解释 |
|---|---|
| ctrl+f | 下翻一屏 |
| ctrl+b | 上翻一屏 |
| ctrl+d | 下翻半屏 |
| ctrl+u | 上翻半屏 |
| ctrl+e | 向下滚动一行 |
| ctrl+y | 向上滚动一行 |
| zz | 将当前行移动到屏幕中央 |
| zt | 将当前行移动到屏幕顶端 |
| zb | 将当前行移动到屏幕底端 |
1.2 复制粘贴
1.2.1 基本命令
| 命令 | 解释 |
|---|---|
| yy或Y | 复制游标所在行整行。 |
| 2yy或y2y | 复制两行。请举一反三 |
| y^ | 复制至行首,或y0。不含游标所在处字元。 |
| y$ | 复制至行尾。含游标所在处字元。 |
| yw | 复制一个word。 |
| y2w | 复制两个字(单词)。 |
| yG | 复制至档尾。 |
| y1G | 复制至档首。 |
| p | 小写p代表贴至游标后(下)。 |
| 20p | 粘贴20次 |
| P | 大写P代表贴至游标前(上)。 |
| yy+p | 复制当前行到下一行 |
| yy+P | 复制当前行到上一行 |
1.2.2 复制到系统剪贴板
-
选择全文
gg shift+V shift + G -
复制到系统剪贴板
"+y 复制到系统剪切板 "+p 把系统粘贴板里的内容粘贴到vim 解释:"+y是把选中内容复制到系统剪切板。要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按"Np,其中N为粘贴板号,如上所述,可以按"5p将5号粘贴板里的内容粘贴进来,也可以按"+p将系统全局粘贴板里的内容粘贴进来。
-
查看剪贴板
VIM具有多个剪切板,":reg"命令查看各剪切板。系统剪切板的编号就是"+
-
将Vim默认剪贴板设为系统剪贴板
set clipboard=unnamedplus
1.3 插入文本
| 命令 | 解释 |
|---|---|
| i | 在光标前插入 |
| I | 在当前行第一个非空字符前插入 |
| a | 在光标后插入 |
| A | 在当前行最后插入 |
| o | 在下面新建一行插入 |
| O | 在上面新建一行插入 |
2. 进阶指令
2.1 查找与替换
2.1.1 查找
-
在 normal 模式下按下
/即可进入查找模式,输入要查找的字符串并按下回车。 Vim 会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。 -
Vim 查找支持正则表达式,例如
/vim$匹配行尾的"vim"。 需要查找特殊字符需要转义,例如/vim\$匹配"vim$"。 -
在查找模式中加入
\c表示大小写不敏感查找,\C表示大小写敏感查找。例如:/foo\c将会查找所有的
"foo","FOO","Foo"等字符串。 -
在 normal 模式下按下
*即可查找光标所在单词(word), 要求每次出现的前后为空白字符或标点符号。例如当前为foo, 可以匹配foo bar中的foo,但不可匹配foobar中的foo。 这在查找函数名、变量名时非常有用。 -
按下
g*即可查找光标所在单词的字符序列,每次出现前后字符无要求。 即foo bar和foobar中的foo均可被匹配到。
2.1.2 查找并替换
:s(substitute)命令用来查找和替换字符串。语法如下:
:{作用范围}s/{目标}/{替换}/{替换标志}
例如 :%s/foo/bar/g 会在全局范围(%)查找 foo 并替换为 bar,所有出现都会被替换(g)。
作用范围
分为当前行、全文、选区等等。
当前行:
:s/foo/bar/g
全文:
:%s/foo/bar/g
选区,在 Visual 模式下选择区域后输入 :,Vim 即可自动补全为 :'<,'>。
:'<,'>s/foo/bar/g
2-11 行:
:5,12s/foo/bar/g
当前行 . 与接下来两行 +2:
:.,+2s/foo/bar/g
替换标志符
上文中命令结尾的 g 即是替换标志之一,表示全局 global 替换(即替换目标的所有出现)。 还有很多其他有用的替换标志:
空替换标志表示只替换从光标位置开始,目标的第一次出现:
:%s/foo/bar
i 表示大小写不敏感查找,I 表示大小写敏感:
:%s/foo/bar/i
# 等效于模式中的\c(不敏感)或\C(敏感)
:%s/foo\c/bar
c 表示需要确认,例如全局查找 "foo" 替换为 "bar" 并且需要确认:
:%s/foo/bar/gc
回车后 Vim 会将光标移动到每一次 "foo" 出现的位置,并提示
replace with bar (y/n/a/q/l/^E/^Y)?
按下 y 表示替换,n 表示不替换,a 表示替换所有,q 表示退出查找模式, l 表示替换当前位置并退出。^E 与 ^Y 是光标移动快捷键.