[VIM] text object

VIM的 text object 代表的是一群文字。而VIM中使用 a 以及 i 這兩個指令來操作 text object。
熟悉 text object 的使用方式,可以讓寫code時輕鬆許多。
例如 
array[15] = 20;
若想要把[]中的15刪掉,那至少有兩種方法:
1. 把游標移到1 (按 f1),然後按2x。2x是刪掉兩個字元的意思。
2. 把游標移到[ (按 f[),然後使用 ci[。c 是修改 (change)的意思,i 代表 inner,所以 i[ 代表”在 [] 中”的意思。所以整個合起來的意思是,在 [] 中做修改的意思。
法1及法2的差別在於方法2會把[]中的東西刪掉,而且會進入insert mode,而法1還是維持在 normal mode中。


ci[ 以及 ca[ 的差別,ci[ 會把 [] 中所有的資料刪掉,但「保留」中括號。而ca[ 會連著中括號一起刪掉。這是因為 i 代表 “inner”,而  a 代表 “all” (或 around) 的意思。All 就是連著中括號一起刪掉。
回到 text object。Text object 代表著是一群文字。在我們的例子中, ci[ 中的 text object 是什麼?就是 [] 中的數字囉,也就是15。
那 ca[ 的 text object 是什麼呢?因為 a 是 all (或 around),所以 ca[ 的 text object 是 [15],也就是 15 還有連同旁邊的[]。
我們可以用 visual mode 更清楚地說明 i 和 a 的差距。
按 v 可以進入 visual mode。而 viw 代表著
v–進入 visual mode (反白模式)
i – text object 的 inner 狀態
w–一個文字
所以在底下的例子中, viw 會把 int 這整個字都選起來。(我把游標放在 i 上面,然後按 viw)
除了用在中括號,其實所有的括號,包含大括號,小括號,甚致連 “” 都可以使用 ci (或是 di) 的寫法讓你的程式撰寫更為輕鬆,用更少的按鍵數達到同樣的效果。舉例來說,在底下的例子中,就可以使用 ci” 把雙引號中所有的字串都刪掉,並進入編輯模式。

Practical VIM 的 tip 52 (這兒好像看得到這本書的原文)


留言

這個網誌中的熱門文章

由 Pandas 的 DataFrame 中取得資料

[程式設計] C++ 的字串切割

[C++]在 cin 後呼叫 getline 所遇到的問題