快速的移動
別在總在插入模式裏呆着 程序員
除了敲代碼,不要總在插入模式裏呆着,由於這樣的Vim就和諸如gedit等普通的編輯器就沒什麼區別了。這就是爲何一些新手老是在插入模式的原 因了,」好用」或者說」友好」。可是,Vim真正的威力卻在於其命令模式,你將會發現,隨着你對Vim的瞭解和熟練,你用插入模式的時間會愈來愈少。
使用h, j, k, l 正則表達式
爲了有效的編輯文件,你首先應該作的就是戒掉那些個方向鍵 ←↓↑→,代以h, j, k, l,即左、下、上、右。這樣的好處是很明顯的,你的手不用再不停地在字母鍵和方向鍵之間來回挪動了,這會爲你節省至關可觀的時間,但或許你須要必定的時間來適應這種轉變。
在使用中你可能會遇到這樣的文件,每一行(這裏行以\n, \r標識)的文字都很長,以致於須要用視覺上的多行來顯示,這時候使用j或者k會跳過若干行,以致於你不得不使用h或者l來在行內移動。固然,你能夠不這麼作,方法就是在j, k前面加g便可在視覺行間移動。
使用motion在當前行內高效地移動 vim
許多其餘的編輯器僅僅提供少許的命令來移動光標(左,上,右,下,行首/末等等)。Vim有不少強大的命令來高效地移動,它們被成爲motion,motion都一般都有一個開始點(一般就是當前光標處)和一個目標點。下面列出一些有用的motion:
fx :向右移動至字母x在當前行內下一次出現的位置f指forward,x能夠是任一個字母。你還能夠用;來重複執行剛纔的fx操做,這兩個命令的結合是極其有用的。
tx :同fx,區別在於光標會停留到x的右側。
Fx :同fx,只是向左移動。
w :向右移動一個單詞,光標停留在下一個單詞的首字母,一樣地,b向左移動。相似的還有一個命令e也是想右移動一個單詞,只是光標會停留在單詞的末尾。
0 :移動到行首,注意:這是零而不是O!
$ :移動到行末。
^ :移動到當前行的第一個字符。
( :移動到下一個句子。
) :移動到上一個句子。注:這兩個命令在編寫代碼是較少用到,但在編輯普通的文本文章時比較有用。
zz、z.、z-、zt:重畫當前屏幕,使當前行顯示在屏幕的中間、中間、底部、頂部,具體請:help cmd。
在整個文件域內高效地移動 瀏覽器
下面的一些命令可讓你在整個文件範圍內移動,從而擺脫掉鼠標滾輪。
<C-f> :向下滾動一屏。
<C-b> :向上滾動一屏。
G :即<S-g>,移動到文件末尾。
nG :移動到第n行。注:幾乎全部可重複性操做均可以使用前綴數字執行n次。
gg :移動到文件開頭。
H :移動到屏幕的最上方。
M :移動到屏幕正中間。
L :移動到屏幕最下方。
* :這個命令比較強大,它記錄當前光標處的單詞,並移動到該單詞下次出現的位置。
# :和*相同,但方向相反。
g* and g#:同上,但匹配包含當前單詞的單詞,而不是徹底匹配。
/pattern :向下查找模式pattern指定的字符串,pattern能夠是一個正則表達式,固然也能夠僅僅是一個單詞。
?pattern :同上,但方向相反。
mb :在當前光標處設定一個書籤bookmark,雖然你看不到,但它確實存在。注:此處b能夠是任何一個字母或者數字。
`b :即ESC下面的」反引號」,移動到一個已經設定的書籤處b。注:是`而不是’,不過’也是能夠的,但只能移動到書籤b所在的行,你能夠根據本身的須要來使用。
`. :這個更牛叉,能夠移動到你最近一次修改過的地方。
高效地輸入
關鍵字自動補全 編輯器
Vim還有關鍵字自動補全的功能,這意味着:若是你已經定義了一個很長的變量,好比iAmALongLongVariableName,下次就 沒必要在這個名字再完整地敲一遍,而只須要輸入iAmA而後按下<C-n>,Vim就會爲你自動補全這個變量名,若是前面不止一個相似的變量 ()那麼Vim會彈出一個列表供你選擇,在這個列表中你能夠用<C-p>和<C-n>上下移動,空格會選擇當前高亮的變量名。
選擇適當的進入插入模式的方法 ide
不少新手,老是先移動至指定位置,而後再用i進入到插入模式。這確實可以達到目的,但有時卻並不合適。好比你如今在行末,須要在行首插入,若是一頓h或者聰明點的用nh或者nb,始終仍是不夠高效。下面有幾個命令可供使用:
i :在當前光標左側插入。
I(大小i) :在行首插入。
a :在當前光標右側插入。
A :在行末插入。
o :在當前行下面新建一行並進入插入模式。
O :同o,但在當前行的上面新建一行。
c{motion} :刪除和移動的複合,其中motion是上文中提到過的。好比cfx,會從當前光標處開始刪除至字母x(不包括x)並進入插入模式。被刪除的字符被保存到剪切板,能夠被稍候粘貼到其餘地方。
d{motion} :同上,當並不進入插入模式。
高效地移動文本塊
可視化選擇 函數
不一樣於Vim的前身vi,Vim容許你高亮(即Visual可視化模式)某個文本塊並對它執行某些操做。選擇文本塊的方式有三種:
v 進入可視化模式,此時可使用前面的移動命令在選取高亮區域。
V 進入行可視化模式,按行選擇,即正行地選擇。
<C-V> 這個頗有特點,它能夠容許你在文本的任意地方選出一塊矩形區域!固然,前提是那裏確實有字符,不多有編輯器有這個功能。 spa
按上述方法進入可視化模式後,你可使用前面的移動命令在選取高亮區域,好比vwww會高亮接下來的三個單詞,vjj會選擇下面的兩行,etc.
剪切和複製
d :剪切,即刪除並放入剪切板。
y :複製。
c :同d,但還會進入插入模式。
d{motion} :和c{motion}相似。
dd :剪切當前行。
yy :複製當前行。
cc :修改當前行。
D :剪切至行尾。
Y :同yy。
C :相似D。
x:剪切光標處字符。
s :同x,但進入插入模式。
p :粘貼。
n」+yy :這個稍顯複雜,它從當前行開始向下複製n行,但和nyy不一樣的是,文本會被複制到系統剪切板,而不是Vim的剪切板,這樣你就能在其餘程序好比瀏覽器中進行Ctrl+V。
」+p :從系統剪切板粘貼。
d’a, y’a:剪切和複製從當前到書籤a之間各行。
」+y’a:這個看起來有些複雜,它是前面幾個命令的整合,和上一個命令功能相同,只是將當前行至書籤a所在行復制到系統剪切板。
」+ynumG:從當前行一直複製到第num行,相比上面的,這個選擇性更大一點。
減小重複性操做
使用. 設計
好吧,我爲它單獨開了一個章節,.功能實用使用簡單,但使用頻率卻十分的高。一個.能夠重複你剛剛執行過的編輯操做,好比刪除、粘貼等。
使用宏記錄 字符串
有時候,你會發現你本身在文章的每段或者每行都重複相同的一系列動做。VIM 容許你記錄一個宏來完成你的特殊須要。
qregister:記錄宏到寄存器 register,這裏 register 是任意的你的寄存器的名字。好比 qa,將會記錄而且把宏存在寄存器 a 裏面。
q:結束宏的記錄。
@register:使用存在寄存器 register 的宏。好比 @a,將會使用存在寄存器 a 裏面的宏。
寫代碼的時候
VIM 是一個用來寫代碼的絕好編輯器,由於它有一些特性是專門爲程序員而設計的。這裏是一些經常使用的基本命令:
]p:和 p 的功能差很少,可是它會自動調整被粘貼的文本的縮進去適應當前代碼的位置。試一下!
%:匹配花括號、方括號、括號等。在一個括號的上面,而後按 %,鼠標就會出如今匹配的另一半括號處。
[{:光標移動至當前塊(block)起始處,即上文最近的一個{處。再次[{移動到當前塊所在的塊起始處。
]}:同上,移動至塊末尾。
[/:用於註釋塊(comment block)中,移動至塊起始。
]/:移動至註釋塊末尾。
?:縮進全部選擇的代碼
?:和上面相似,可是反縮進
gd:到達光標所在處函數或者變量的定義處。
<C-]>:同上。
<C-o>:返回<C-]>操做前的位置。操做前的位置
鍵綁定
發揮你想象力的時候到了。如你所見,Vim自己已經提供了大量的命令供你調遣,但不是全部的命令或者命令組合都適合全部的人。爲此,Vim同窗給了你根據我的習慣綁定命令的自由。vimrc中的一個簡單的map命令便可作到,譬如「 <cr>標示回車(Enter)
map ,w :w<cr>
列出經常使用的一些特殊按鍵的代號, <cr>, <Cr>, or <CR>:回車; <Space>:空格; <Esc>:Esc; <c-x> or <C-x>:Ctrl + x; <a-x>:Alt + x; <m-x>:Meta + x; <Left>, <Right>, <Up>, <Down>:方向鍵; <BS>:Backspace; <F10>:功能鍵F10; <cword>:當前單詞(相似a-b_c2); <cWORD>:當前單詞(不含空白符的字符串); <cfile>:當前單詞爲名的文件; <Home>:Home,不是全部鍵盤都有的; Last but not the least, 全部的字母鍵都以