關鍵字: vim
前言
Vim是一個超級牛的編輯器,可以說是專為程式員設計的編輯器,強大的有些不可思議 。不過其學習曲線稍顯陡峭,前兩天在網上找到一個小圖表,比較全,如果對錶中所列的命令學習熟悉以後,處理日常的文本就已經足夠,所以貼出來,大家參考參考。
Vim的牛B之處不在於其功能之繁多,更不在於其學習曲線之陡峭,而在於這些命令大都可以進行組合 ,比如,9yy命令表示複製9行內容,9表示要複製的行數,同樣100dd表示刪除100行,當數字和命令合作的時候,就比單純的命令更強大,同樣,c命令表示擦除,w表示word即單詞,那麼cw就表示擦除一個單詞,c5w就表示刪除5個單詞等等。將這些簡單命令合成在一起,就可以發揮出難以想象的強大功能,而且可以使你的編輯工作充滿樂趣。
宏命令(Macros)
進階一些的編輯器,都會包含宏功能,vim當然不能缺少了,在vim中使用宏是非常方便的:
:qx |
開始記錄宏,並將結果存入寄存器x |
q |
退出記錄模式 |
@x |
播放記錄在x寄存器中的宏命令 |
稍微解釋一下,當在normal模式下輸入:qx後,你對文本的所有編輯動作將會被記錄下來,再次輸入q即退出了記錄模式,然後輸入@x對剛才記錄下來的命令進行重複,此命令後可跟數字,表示要重複多少次,比如@x20,可以重複20次。這個在文本的批處理中是非常有用的。
同時編輯多個檔案
在vim眾多的外掛程式中,有一個叫minibuffer的外掛程式,就是下面所說的標籤頁功能了,可以支援同時編輯多個檔案。
標籤命令
:tabe fn |
在一個新的標籤頁中編輯檔案fn |
gt |
切換到下一個標籤頁 |
gT |
切換到上一個標籤頁 |
:tabr |
切換到第一個標籤頁 |
:tabl |
切換到最後一個標籤頁 |
:tabm [N] |
把當前tab移動到第N個tab之後 |
對,正如你所想象的那樣,跟eclipse, ue等的標籤頁是一個意思。
視窗命令
ctrl+w s |
水平分割視窗 |
ctrl+w w |
切換視窗 |
ctrl+w q |
退出當前視窗(由於同時有多個檔案,此命令不會影響其他視窗) |
ctrl+w v |
垂直分割視窗 |
其他
vim在儲存之前不會對檔案做實際的修改,只是載入到緩衝區中,對檔案的編輯其實是對緩衝區的編輯,直到:w時才會存入物理檔案。
:e file |
把file載入到新的緩衝區中 |
:bn |
跳轉到下一個緩衝區 |
:bd |
刪除緩衝區(關閉檔案) |
:sp fn |
分割視窗,並將fn載入到新的視窗中 |
退出編輯器
:w |
將緩衝區寫入檔案,即儲存修改 |
:wq |
儲存修改並退出 |
:x |
儲存修改並退出 |
:q |
退出,如果對緩衝區進行過修改,則會提示 |
:q! |
強制退出,放棄修改 |
尋找替換
/pattern |
向後搜尋字串pattern |
?pattern |
向前搜尋字串pattern |
n |
下一個匹配(如果是/搜尋,則是向下的下一個,?搜尋則是向上的下一個) |
N |
上一個匹配(同上) |
:%s/old/new/g |
搜尋整個檔案,將所有的old替換為new |
:%s/old/new/gc |
搜尋整個檔案,將所有的old替換為new,每次都要你確認是否替換 |
複製粘貼
dd |
刪除游標所在行 |
dw |
刪除一個字(word) |
x |
刪除當前字元 |
X |
刪除前一個字元 |
D |
刪除到行末 |
yy |
複製一行,此命令前可跟數字,標識複製多行,如6yy,表示從當前行開始複製6行 |
yw |
複製一個字 |
y$ |
複製到行末 |
p |
粘貼粘貼板的內容到當前行的下面 |
P |
粘貼粘貼板的內容到當前行的上面 |
]p |
有縮排的粘貼,vim會自動調節代碼的縮排 |
"a |
將內容放入/存入a寄存器,可以支援多粘貼板 |
附:比如常用的一個寄存器就是系統寄存器,名稱為+,所以從系統粘貼板粘貼到vim中的命令為"+p,注意此處的+不表示操作符,二十一個寄存器。
移動游標
在vim中移動游標跟其他的編輯器中有很大的區別,不過一旦學會了,就會飛速 的在文本中移動了。
h,j,k,l |
上,下,左,右 |
ctrl-f |
上翻一頁 |
ctrl-b |
下翻一頁 |
% |
跳到與當前括弧匹配的括弧處,如當前在{,則跳轉到與之匹配的}處 |
w |
跳到下一個字首,按標點或單詞分割 |
W |
跳到下一個字首,長跳,如end-of-line被認為是一個字 |
e |
跳到下一個字尾 |
E |
跳到下一個字尾,長跳 |
b |
跳到上一個字 |
B |
跳到上一個字,長跳 |
0 |
跳至行首,不管有無縮排,就是跳到第0個字元 |
^ |
跳至行首的第一個字元 |
$ |
跳至行尾 |
gg |
跳至檔案的第一行 |
gd |
跳至當前游標所在的變數的聲明處 |
[N]G |
跳到第N行,如0G,就等價於gg,100G就是第100行 |
fx |
在當前行中找x字元,找到了就跳轉至 |
; |
重複上一個f命令,而不用重複的輸入fx |
tx |
與fx類似,但是只是跳轉到x的前一個字元處 |
Fx |
跟fx的方向相反 |
),( |
跳轉到上/下一個語句 |
* |
尋找游標所在處的單詞,向下尋找 |
# |
尋找游標所在處的單詞,向上尋找 |
`. |
跳轉至上次編輯位置 |
在螢幕上移動
H |
移動游標到當前螢幕上最上邊的一行 |
M |
移動游標到當前螢幕上中間的一行 |
L |
移動游標到當前螢幕上最下邊的一行 |
書籤
編輯
r |
替換一個字元 |
J |
將下一行和當前行串連為一行 |
cc |
刪除當前行並進入編輯模式 |
cw |
刪除當前字,並進入編輯模式 |
c$ |
擦除從當前位置至行末的內容,並進入編輯模式 |
s |
刪除當前字元並進入編輯模式 |
S |
刪除游標所在行並進入編輯模式 |
xp |
交換當前字元和下一個字元 |
u |
撤銷 |
ctrl+r |
重做 |
. |
重複上一個編輯命令 |
~ |
切換大小寫,當前字元 |
g~iw |
切換當前字的大小寫 |
gUiw |
將當前字變成大寫 |
guiw |
將當前字變成小寫 |
>> |
將當前行右移一個單位 |
<< |
將當前行左移一個單位(一個tab符) |
== |
自動縮排當前行 |
插入模式
i |
從當前游標處進入插入模式 |
I |
進入插入模式,共置游標於行首 |
a |
追加模式,置游標於當前游標之後 |
A |
追加模式,置游標於行末 |
o |
在當前行之下新加一行,並進入插入模式 |
O |
在當前行之上新加一行,並進入插入模式 |
Esc |
退出插入模式 |
可視模式
標記文本
v |
進入可視模式,單字元模式 |
V |
進入可視模式,行模式 |
ctrl+v |
進入可視模式,列模式 ,類似於UE的列模式 |
o |
跳轉游標到選中塊的另一個端點 |
U |
將選中塊中的內容轉成大寫 |
O |
跳轉游標到塊的另一個端點 |
aw |
選中一個字 |
ab |
選中括弧中的所有內容,包括括弧本身 |
aB |
選中{}括弧中的所有內容 |
ib |
選中括弧中的內容,不含括弧 |
iB |
選中{}中的內容,不含{} |
對標記進行動作
> |
塊右移 |
< |
塊左移 |
y |
複製塊 |
d |
刪除塊 |
~ |
切換塊中內容的大小寫 |
好了,這張簡表就說到這裡,當然它涵蓋的範圍有限,但是正如標題說的那樣,vim的強大之處在於這些命令可以組合起來使用,那樣才能體現出其強大的編輯功能。我在網上找到的這個文檔也順便貼出來,大家可以同時參考。如果有機會,我盡量找些例子來說明這些命令在實際中的用法,那樣才可以更好的使用它,提高我們的工作效率。
VIM中常用的替換模式總結。
1,簡單替換運算式
替換命令可以在全文中用一個單詞替換另一個單詞:
:%s/four/4/g
“%” 範圍首碼表示在所有行中執行替換。最後的 “g” 標記表示替換行中的所有匹配點。如果僅僅對當前行進行操作,那麼只要去掉%即可
如果你有一個象 “thirtyfour” 這樣的單詞,上面的命令會出錯。這種情況下,這個單詞會被替換成”thirty4″。要解決這個問題,用 “\<” 來指定匹配單詞開頭:
:%s/\<four/4/g
顯然,這樣在處理 “fourty” 的時候還是會出錯。用 “\>” 來解決這個問題:
:%s/\<four\>/4/g
如果你在編碼,你可能只想替換注釋中的 “four”,而保留代碼中的。由於這很難指定,可以在替換命令中加一個 “c” 標記,這樣,Vim 會在每次替換前提示你:
:%s/\<four\>/4/gc
2,刪除多餘的空格
要刪除這些每行後面多餘的空格,可以執行如下命令:
:%s/\s\+$//
命令前面指明範圍是 “%”,所以這會作用於整個檔案。”substitute” 命令的匹配模式是
“\s\+$”。這表示行末($)前的一個或者多個(\+)空格(\s)。替換命令的 “to” 部分是空的:”//”。這樣就會刪除那些匹配的空白字元。
3,匹配重複性模式
星號項 “*” 規定在它前面的項可以重複任意次。因此:
/a*
匹配 “a”,”aa”,”aaa”,等等。但也匹配 “” (空字串),因為零次也包含在內。星號 “*” 僅僅應用於那個緊鄰在它前面的項。因此 “ab*” 匹配 “a”,”ab”,”abb”,”abbb”,等等。如要多次重複整個字串,那麼該字串必須被組成一個項。組成一項的方法就是在它前面加 “\(”,後面加 “\)”。因此這個命令:
/\(ab\)*
匹配: “ab”,”abab”,”ababab”,等等。而且也匹配 “”。
要避免匹配空字串,使用 “\+”。這表示前面一項可以被匹配一次或多次。
/ab\+
匹配 “ab”,”abb”,”abbb”,等等。它不匹配 後面沒有跟隨 “b” 的 “a”。
要匹配一個可選項,用 “\=”。 例如:
/folders\=
匹配 “folder” 和 “folders”。
4,指定重複次數
要匹配某一項的特定次數重複,使用 “\{n,m}” 這樣的形式。其中 “n” 和 “m” 都是數字。在它前面的那個項將被重複 “n” 到 “m” 次 (|inclusive| 包含 “n” 和 “m”)。例如:
/ab\{3,5}
匹配 “abbb”,”abbbb” 以及 “abbbbb”。
當 “n” 省略時,被預設為零。當 “m” 省略時,被預設為無限大。當 “,m” 省略時,就表示重複正好 “n” 次。例如:
模式 匹配次數
\{,4} 0,