命令1: [vydc] [ia] [pair_char]
上面命令指的是該命令由三部分組成,每部分可以是[ ]裡面的任意一個字符
第一部分指定“操作類型”
第二部分和第三部分指定“操作范圍”,是基於當前光標所在位置的,這個非常重要
(1)
v: visual select
y: copy
d: delete
c: change,和delete的區別在於它會先delete,然後進入"insert mode";等價於先 d 然後按下 i 進入"insert mode"
(2)
pair_char 可以是一些成對的字符,比如 { [ ( < " ' 也可以使用它們的對應right close版本,比如} ] 等等
pair_char 的特殊情況, 可以是w, 代表光標所在的單詞(以空格分隔), 這時中間是使用i還是a, 區別在於操作結果包不包括單詞右邊的空格
(3)
i: exclude the pair_char
a: include the pair_char
i 和 a 的區別在於指定的“操作范圍”包不包括由pair_char指定的這一對字符,即 {} 或 [] 或 () 或 "" 等等
舉個例子吧:
假設有一文本行為 abcd "fgh ijk <lmn>";
光標位於m處(下劃線處)
vi< 作用:選中了 lmn
ya" 作用:復制了 "fgh ijk <lmn>"
di" 作用:刪除了 fgh ijk <lmn>
ci< 作用: 刪除了 lmn 並且進入了"insert mode",光標位於<>中間
命令2: [vydc] [tf] [a_char]
(1)
參見命令1的(1)
(2)
t: till, exclude the character 'a_char'
f: find, include the character 'a_char'
t和f 代表從左往右
另外,還可以使用大寫的T和F,代表從右往左
(3)
a_char: 代表某一個字符,特殊情況是0和$, 代表行首和行尾
命令3: 大小寫轉換 gU, gu
(1)
[visual_select_something_by_someway]gU
[visual_select_something_by_someway]gU
先通過某種方式選擇某個范圍的內容(可以通過命令1,2中的v指令進行選擇),然後將其轉換成大寫或小寫
(2)
gU [ia] [pair_char]
gu [ia] [pair_char]
gU [tf] [a_char]
gu [tf] [a_char]
這種方式是先通過gU指定要轉換成大寫,然後通過後兩部分指定“操作范圍”
[ia] [pair_char] 參見命令1的解釋
這裡中間部分使用 i 或 a 好像是沒有什麼區別
[tf] [a_char] 參見命令2的解釋
本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/
命令4: 宏命令
錄制命令 qa [do_some_routine_job_in_this_line_and_move_to_next_line] q
執行上一步錄制的命令 [n]@a
qa中的a代表將錄制的命令放置於哪個寄存器中,對應於[n]@a 中的a。所以,a也可以換成b,c,d...
[n]@a中的n代表執行該錄制命令的次數,省略n即執行1次
宏命令非常適合執行一些針對每一行都執行有規律的的操作,重點在於,首先,按下qa進入錄制模式,然後在第一行針對該行進行有規律的操作,最終移到下一行,按下a退出錄制模式,使用[n]@a對余下的所有行進行批量處理
例子:
假設有如下的文本行,每一行代表一個用戶名,現在需要對該用戶名進行密碼重置為123456,簡單起見,假設只有5行:
user1 user2 user3 user4 user5
光標置於第一行某個位置處,在“Normal mode” 模式下按順序按 qaIalter user_table set password='123456' where username='<Esc>A';<Esc>ja
好了,錄制命令完畢,執行命令4@a,即把剩下的4行處理為與第一行相同的結果了
執行結果如下:
alter user_table set password='123456' where username='user1'; alter user_table set password='123456' where username='user2'; alter user_table set password='123456' where username='user3'; alter user_table set password='123456' where username='user4'; alter user_table set password='123456' where username='user5';
命令5: 代碼自動縮進 =
(1) 光標移到某個位置,然後,使用 vi{ 選擇要自動縮排的代碼塊{ code },最後,按=
(2) 按下大寫V進入行選擇模式,使用 jk 上下移動選擇要自動縮排的行集, 最後,按 =
(3) 最懶的方式, gg到第一行, VG 選擇該文件所有行,最後,按 =,格式化所有代碼
命令6: 倒置文本 :g/^/m0
讓第一行成為最後一行,第二行成為倒數第二行,最後一行成為第一行。
作者:DayByDay
出處:http://www.cnblogs.com/DayByDay