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
是光标移动快捷键.