命令的性質(zhì)
單鍵命令按性質(zhì)分,可以分為操作和移動(dòng)兩種。還涉及到一個(gè)叫文本對(duì)象的概念。
-
操作,如:
-
v
選擇 -
d
刪除 -
c
修改 -
y
復(fù)制 -
g~
切換大小寫 -
=
格式化縮進(jìn) -
>
添加縮進(jìn) -
<
減少縮進(jìn) -
p
粘貼到光標(biāo)右邊 -
P
粘貼到光標(biāo)左邊 -
i
在光標(biāo)左邊插入 -
a
在光標(biāo)右邊插入 -
I
在行首插入 -
A
在行尾插入 -
u
撤銷 -
Ctrl-r
撤銷撤銷
-
-
位置,或稱移動(dòng),這些命令單獨(dú)使用的意思是「光標(biāo)移動(dòng)到某地方」。
-
hjkl
左下上右 -
w
下一個(gè)單詞開頭 -
e
下一個(gè)單詞結(jié)尾 -
b
上一個(gè)單詞開頭 -
ge
上一個(gè)單詞結(jié)尾 -
gg
文件第一行行首 -
G
文件最后一行行首 -
fx
當(dāng)前行下一個(gè) x -
Fx
當(dāng)前行上一個(gè) x -
tx
當(dāng)前行下一個(gè) x 之前的字符 -
Tx
當(dāng)前行上一個(gè) x 之后的字符 -
^
行首 -
$
行尾 -
*
搜索下一個(gè)「光標(biāo)下的單詞」的第一個(gè)字母 -
#
搜索上一個(gè)「光標(biāo)下的單詞」的第一個(gè)字母 -
/x
搜索下一個(gè) x -
?x
搜索上一個(gè) x
-
-
范圍,或稱文本對(duì)象(text object),是一組表示范圍的命令,只能組合使用,單獨(dú)沒有意義,關(guān)于如何組合會(huì)在下文說明。
-
iw
,單詞,不包含單詞邊界 -
aw
,單詞,包含單詞右邊的空格 -
i"
,兩個(gè)雙引號(hào)之間,不包含雙引號(hào) -
a"
,兩個(gè)雙引號(hào)之間,包含雙引號(hào) -
it
,標(biāo)簽,不包含標(biāo)簽,標(biāo)簽指 html 或 xml 標(biāo)簽對(duì)兒 -
at
,標(biāo)簽,包含標(biāo)簽,標(biāo)簽指 html 或 xml 標(biāo)簽對(duì)兒 -
i(
或i)
或ib
,表示(
到)
之間,不包含小括號(hào) -
a(
或a)
或ab
,表示(
到)
之間,包含小括號(hào) -
i<
或i>
,表示<
到>
之間,不包含尖括號(hào) -
a<
或a>
,表示<
和>
之間,包含尖括號(hào) -
i[
或i]
,表示[
到]
之間,不包含中括號(hào) -
a[
或a]
,表示[
到]
之間,包含中括號(hào) -
i{
或i}
,表示{
到}
之間,不包含大括號(hào) -
a{
或a}
,表示{
和}
之間,包含大括號(hào)
-
命令組合方式
上面列出了許多「操作」命令,他們可以被組合使用,但并不是所有的操作命令都能組合使用。判斷是否可以組合的方法是,鍵盤輸入如 d
的命令,看他是否在等待下一個(gè)按鍵,是的話就可以按照下面的規(guī)則組合使用,否則就不行。d
是可以組合使用的操作命令,假設(shè)我定義 d
是刪除一行,我輸入 d^
時(shí),vim 無法區(qū)分我想執(zhí)行「d
刪除一行之后再用 ^
把光標(biāo)移動(dòng)到行首」還是想執(zhí)行「d^
刪除到行首」,所以單獨(dú)一個(gè) d
是沒有意義的,當(dāng)輸入 d
時(shí),vim 會(huì)等待用戶按下一個(gè)按鍵。不能組合的操作命令沒有這種歧義問題,所以他不會(huì)等待下一個(gè)按鍵,比如 p
粘貼命令。
-
操作 + 位置,意思是「進(jìn)行某操作,范圍是光標(biāo)到位置之間」。
-
dw
刪除到下一個(gè)單詞開頭 -
d^
刪除到行首 -
v#
選擇到上一個(gè)「光標(biāo)下的單詞」的第一個(gè)字母 -
vG
選擇到文件最后一行行首 -
=G
格式化到文件最后一行 -
g~$
切換大小寫到行尾
-
-
操作 + 范圍,意思是「對(duì)某范圍執(zhí)行某操作」。
-
diw
刪除單詞,不包含單詞邊界 -
yaw
復(fù)制單詞,包含單詞右邊的空格 -
vit
選擇標(biāo)簽內(nèi)容,不包含標(biāo)簽,對(duì)于<p>asdfghjkl</p>
會(huì)選擇asdfghjkl
-
vat
選擇標(biāo)簽內(nèi)容,包含標(biāo)簽,對(duì)于<p>asdfghjkl</p>
會(huì)選擇<p>asdfghjkl</p>
-
=a{
格式化大括號(hào)之間的行縮進(jìn),包含大括號(hào)所在的行 -
gUiw
把單詞變成大寫
-
可以看出 vim 中如 w
的命令在不同組合下有不同的意思,單獨(dú)使用 w
代表光標(biāo)移動(dòng)到下個(gè)詞首,dw
代表刪除到下個(gè)詞首,daw
代表刪除這個(gè)單詞和多余的空格。雖然意思有些許不同,但 w
總是代表單詞,這很直觀,不需要特別記憶,甚至不需要特別注意,下意識(shí)就學(xué)會(huì)怎么用了。