在Vim初探(一)中介紹了Vim中模式的概念,以及如何在Vim中以多種方式移動游標。在本節中將介紹拷貝、剪下及黏貼,Undo/Redo,以及搜尋的操作。閑話少說,我們開始吧!
一.拷貝、剪下及黏貼
拷貝(Copy)、剪下(Cut)及黏貼(Paste) 是我們在做文本編輯時最常用的操作。Vim中也有相應的操作,只不過在Vim中它們的命名方式有所變化:Vim將cut稱為delete,將copy稱為yank,將paste仍稱為paste。在用Vim編輯文本時Vim會在記憶體中開闢一塊緩衝將文本放入其中,所有對文本的編輯都將寫入這塊緩衝中直至使用:write或:w儲存編輯狀態才將儲存的結果寫入硬碟。在進行剪下操作時,Vim將文本從緩衝中"刪除"(delete)並將其存入寄存器。在進行拷貝操作時,Vim從緩衝中“拉出”(yank)相應的文本並將其存入寄存器中。
在Normal模式下Vim中剪下(delete),拷貝(yank)及黏貼(Paste)操作的相應命令為:d, y, p。在Vim中你可以將剪下和拷貝的操作分別應用於一個字元,一個詞,一行文本,以及一段文本。相應的命令分別為:
操作對象 | 剪下 | 拷貝
----------|-------|----------
一個字元 | dl | yl (注意是小寫字母L,而不是數字1)
----------|-------|-----------
一個詞 | dw | yw
----------|-------|-----------
一行文本 | dd | yy
----------|-------|-----------
一段文本 | dap | yap
----------|-------|----------
例如若要剪下某個詞並將其黏貼到另一個位置,只需將游標移動到該詞,按下dw,然後將游標移動到需要黏貼的位置並按下p。同時在黏貼時Vim提供兩種方式:
p(小寫) 黏貼在當前游標位置之後
P(大寫) 黏貼在當前游標位置之前
二.Undo/Redo
與拷貝,剪下和黏貼類似,Undo/Redo也是我們在編輯文本時常用的操作。在Vim中按u進行Undo操作,按ctrl-r進行Redo操作 。非常簡單!理論上在Vim中可以進行無限層級的Undo/Redo操作。同時Vim提供了一些進階的Undo/Redo操作,即earlier和later命令。例如我想回到四分鐘以前的狀態,只需執行命令:earlier 4m 。然後我又想前進到30秒後的狀態,則執行命令:later 30s 。剛才的兩個例子用時間點做參考,那麼如果我想回到之前五次修改之前的狀態,則執行命令:undo 5 .Vim以樹形結構的方式組織undo list,可以用命令:undolist查看。所以從某種意義上講,Vim不僅是一個文字編輯器,而且還是一台時光機(time machine)。
三.搜尋操作
Vim中內建了一個強大的搜尋引擎。搜尋時只需在Normal模式下按/鍵,鍵入所要搜尋的詞並按斷行符號鍵即可,例如要搜尋文本中是否含有hello,只需執行/hello<cr>即可。若文本中含有多個要搜尋的詞,按n跳轉到該詞下一處出現的位置,按N跳轉到該詞前一處出現的位置。在Vim中搜尋時可以通過一些參數的設定來定製搜尋的方式,下面介紹三個搜尋相關的參數。
set incsearch 如果你只是模糊的記得要搜尋的詞,可以開啟incsearch,那麼你在鍵入要搜尋的詞過程中Vim就進行搜尋
set ignorecase 搜尋時忽略大小寫
set smartcase 如果你鍵入的要搜尋的詞只含小寫字母,則搜尋時忽略大小寫。否則搜尋時考慮大小寫。
另外如果我想確切的搜尋某個詞,則需求助逸出字元\。如我想確切的搜尋hello這個詞,需要執行/\<hello\>並按斷行符號。若搜尋文本中的數字,則執行\/d命令。/\d\+ 命令搜尋一個或多個數字。/\d\*搜尋零個或多個數字。我想熟悉Regex的同學應該對此不陌生。
參考文獻
1.http://www.swaroopch.com/notes/Vim