命令的性质
单键命令按性质分,可以分为操作和移动两种。还涉及到一个叫文本对象的概念。
-
操作,如:
-
v
选择 -
d
删除 -
c
修改 -
y
复制 -
g~
切换大小写 -
=
格式化缩进 -
>
添加缩进 -
<
减少缩进 -
p
粘贴到光标右边 -
P
粘贴到光标左边 -
i
在光标左边插入 -
a
在光标右边插入 -
I
在行首插入 -
A
在行尾插入 -
u
撤销 -
Ctrl-r
撤销撤销
-
-
位置,或称移动,这些命令单独使用的意思是「光标移动到某地方」。
-
hjkl
左下上右 -
w
下一个单词开头 -
e
下一个单词结尾 -
b
上一个单词开头 -
ge
上一个单词结尾 -
gg
文件第一行行首 -
G
文件最后一行行首 -
fx
当前行下一个 x -
Fx
当前行上一个 x -
tx
当前行下一个 x 之前的字符 -
Tx
当前行上一个 x 之后的字符 -
^
行首 -
$
行尾 -
*
搜索下一个「光标下的单词」的第一个字母 -
#
搜索上一个「光标下的单词」的第一个字母 -
/x
搜索下一个 x -
?x
搜索上一个 x
-
-
范围,或称文本对象(text object),是一组表示范围的命令,只能组合使用,单独没有意义,关于如何组合会在下文说明。
-
iw
,单词,不包含单词边界 -
aw
,单词,包含单词右边的空格 -
i"
,两个双引号之间,不包含双引号 -
a"
,两个双引号之间,包含双引号 -
it
,标签,不包含标签,标签指 html 或 xml 标签对儿 -
at
,标签,包含标签,标签指 html 或 xml 标签对儿 -
i(
或i)
或ib
,表示(
到)
之间,不包含小括号 -
a(
或a)
或ab
,表示(
到)
之间,包含小括号 -
i<
或i>
,表示<
到>
之间,不包含尖括号 -
a<
或a>
,表示<
和>
之间,包含尖括号 -
i[
或i]
,表示[
到]
之间,不包含中括号 -
a[
或a]
,表示[
到]
之间,包含中括号 -
i{
或i}
,表示{
到}
之间,不包含大括号 -
a{
或a}
,表示{
和}
之间,包含大括号
-
命令组合方式
上面列出了许多「操作」命令,他们可以被组合使用,但并不是所有的操作命令都能组合使用。判断是否可以组合的方法是,键盘输入如 d
的命令,看他是否在等待下一个按键,是的话就可以按照下面的规则组合使用,否则就不行。d
是可以组合使用的操作命令,假设我定义 d
是删除一行,我输入 d^
时,vim 无法区分我想执行「d
删除一行之后再用 ^
把光标移动到行首」还是想执行「d^
删除到行首」,所以单独一个 d
是没有意义的,当输入 d
时,vim 会等待用户按下一个按键。不能组合的操作命令没有这种歧义问题,所以他不会等待下一个按键,比如 p
粘贴命令。
-
操作 + 位置,意思是「进行某操作,范围是光标到位置之间」。
-
dw
删除到下一个单词开头 -
d^
删除到行首 -
v#
选择到上一个「光标下的单词」的第一个字母 -
vG
选择到文件最后一行行首 -
=G
格式化到文件最后一行 -
g~$
切换大小写到行尾
-
-
操作 + 范围,意思是「对某范围执行某操作」。
-
diw
删除单词,不包含单词边界 -
yaw
复制单词,包含单词右边的空格 -
vit
选择标签内容,不包含标签,对于<p>asdfghjkl</p>
会选择asdfghjkl
-
vat
选择标签内容,包含标签,对于<p>asdfghjkl</p>
会选择<p>asdfghjkl</p>
-
=a{
格式化大括号之间的行缩进,包含大括号所在的行 -
gUiw
把单词变成大写
-
可以看出 vim 中如 w
的命令在不同组合下有不同的意思,单独使用 w
代表光标移动到下个词首,dw
代表删除到下个词首,daw
代表删除这个单词和多余的空格。虽然意思有些许不同,但 w
总是代表单词,这很直观,不需要特别记忆,甚至不需要特别注意,下意识就学会怎么用了。