命令的性质
单键命令按性质分,可以分为操作和移动两种。还涉及到一个叫文本对象的概念。
-
操作,如:
-
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 总是代表单词,这很直观,不需要特别记忆,甚至不需要特别注意,下意识就学会怎么用了。
