在前面一篇blog(
Vim學(xué)習(xí)筆記)中介紹VIM的使用用法后,該文章達(dá)到了歷史性的最高訪問量。在上面的那篇文章中,介紹了VIM的基本用法,基本上是個(gè)人在聯(lián)系Vimtutor這個(gè)教程之后對(duì)不熟悉的指令的總結(jié)。但是,隨著學(xué)習(xí)的深入,發(fā)現(xiàn)掌握這些基本的命令還遠(yuǎn)遠(yuǎn)不夠,雖然網(wǎng)上有大批的資料可以下載學(xué)習(xí),但是迫于沒有一種類似于入門級(jí)別的教程,所以還是希望有相關(guān)的從最常用最基本的知識(shí)講起的教程。目前看來,《
Learn Vim Progressively》這篇文章應(yīng)該是比較好的入門級(jí)教材了吧,而酷殼則進(jìn)行了翻譯,網(wǎng)址在這里
簡(jiǎn)明 Vim 練級(jí)攻略(http://coolshell.cn/articles/5426.html)。以下是我的學(xué)習(xí)筆記:
1. 插入:
a: 在光標(biāo)之后插入
o: 在當(dāng)前行后面插入一個(gè)新行
O: 在當(dāng)前行前面插入一個(gè)新行
cw: 替換從光標(biāo)到后一個(gè)單詞結(jié)尾的字符。
2. 移動(dòng):
0: 移動(dòng)到行頭
^: 到本行第一個(gè)不是blank的字符。(blank字符即空格,tab,換行和回車)
$: 到本行行尾
g_: 到本行最后一個(gè)不是blank字符的位置
/pattern: 搜索pattern的字符串。(搜索多個(gè)按n回到下一個(gè))
3. 拷貝:
P:在當(dāng)前位置之前拷貝(將緩沖區(qū)內(nèi)的內(nèi)容拷貝過來)
p: 在當(dāng)前位置之后拷貝
yy: 拷貝當(dāng)前行。(在某行使用之后,相當(dāng)于拷貝了該行,然后到指定位置,使用P命令粘貼到指定的位置)
4.Undo/Redo
u : undo
Ctrl + r : redo
5. 打開保存
e<path/file> : 打開一個(gè)文件
w: 保存
saveas<path/file>: 另存為某個(gè)地方
x,wq: 保存(x表示僅需要保存時(shí)保存,wq則是保存)
ZZ:不需要輸入前面的冒號(hào)即可保存,此時(shí)會(huì)退出。(不同于前面的冒號(hào)+回車)
bn, bp: 同時(shí)打開多個(gè)文件的話,使用這個(gè)來切換到上一個(gè)或者下一個(gè)文件。
6. 更好
.: 輸入一個(gè)點(diǎn)號(hào)會(huì)重復(fù)執(zhí)行上次的命令
N<command>: 重復(fù)執(zhí)行command命令N次。(比如2dd表示刪除兩行,3p表示粘貼三次)
7. 更強(qiáng)
NG: 到第N行(比如3G,表示跳轉(zhuǎn)到第三行)另外可以使用:137跳轉(zhuǎn)到137行(感覺更方便)
gg: 跳轉(zhuǎn)到第一行(相當(dāng)于1G,或者:1)
G: 跳轉(zhuǎn)到最后一行
單詞的移動(dòng):
w: 到下一個(gè)單詞的開始
e: 到下一個(gè)單詞的結(jié)尾
(如果認(rèn)為分號(hào)也是一個(gè)單詞的話,使用E/W)
比如:x = (name_1, vision_3); 后面的這個(gè)分號(hào)就要注意。
%: 匹配括號(hào),先移動(dòng)光標(biāo)到一個(gè)括號(hào)處,然后在命令模式下輸入%,即可跳轉(zhuǎn)到匹配的括號(hào)。
*:匹配光標(biāo)到當(dāng)前所在的單詞。(向下匹配)(匹配就是知道相同的單詞,比如在當(dāng)前行有5個(gè)單詞test,那么按*就會(huì)尋找并跳轉(zhuǎn)到下一個(gè)單詞test的起始之處)
#:匹配光標(biāo)到當(dāng)前所在單詞(向上匹配)
8. 更快
一定要記住光標(biāo)的移動(dòng)。
eg:0y$:現(xiàn)跳轉(zhuǎn)到第一行,然后拷貝,拷貝到行末,
類似的,ye:開始拷貝,拷貝到笨蛋次的最后一個(gè)(e其實(shí)就是end)
y2/foo:拷貝兩個(gè)foo直接的字符串(這種用法很奇特,前面沒有講到)
還有很多時(shí)間并不一定你就一定要按y才會(huì)拷貝,下面的命令也會(huì)被拷貝:
d (刪除 )
v (可視化的選擇)
gU (變大寫)
gu (變小寫)
等等
9.Vim超能力
fa: 到下一個(gè)為a的字符處。同理,fs到下一個(gè)為s的字符處
t,:到逗號(hào)前的第一個(gè)字符處。同理,ta就是到a前的第一個(gè)字符出。
3fa:在當(dāng)前行查找第三個(gè)出現(xiàn)的a
F和T:作用和f與t一樣,只是相反的方向。
dt": 刪除所有的內(nèi)容,知道遇到了雙引號(hào),類似的可以換成其他的如dt+任意字符。
==========================以下內(nèi)容為以前沒接觸的,重點(diǎn)回顧===================
1. 區(qū)域選擇
<action>a<object> or <action>i<object>
<action> 可以是任何命令,如d(刪除),y(拷貝),v(可視化模式選擇).
<object>可以是:w表示一個(gè)單詞,s表示一個(gè)句子,p一個(gè)段落。也可以是特殊字符比如),}等等。
對(duì)于(map (+)("foo")),光標(biāo)在第一個(gè)o的位置。
則:vi" ----對(duì)應(yīng)的是<action>i<object>這種情況,v表示模式選擇,然后i表示的是不包括這個(gè)特殊字符,所以是從第一個(gè)o所在的包含在"符號(hào)中的。
其他的類似,不同的是a是要包括內(nèi)容的。
vi" → 會(huì)選擇 foo.
va" → 會(huì)選擇 "foo".
vi) → 會(huì)選擇 "foo".
va) → 會(huì)選擇("foo").
v2i) → 會(huì)選擇 map (+) ("foo")
v2a) → 會(huì)選擇 (map (+) ("foo"))
塊操作
塊操作,典型的操作: 0 <C-v> <C-d> I-- [ESC]
Windows下面是Ctrl+q而不是Ctrl+v開始?jí)K操作。
做法是:
1. 先移動(dòng)光標(biāo)到某個(gè)地方。
2. Ctrl+V開始?jí)K操作。
3. 選擇塊的范圍(此時(shí)可以用hjkl,或者%,或者Ctrl+d等等)
4. I-- Esc(選擇對(duì)應(yīng)的操作,這里是插入ii,所以現(xiàn)I表示插入,然后--,但是這樣只是對(duì)最開始的那個(gè)起作用,要應(yīng)用到所有的塊,需要使用Esc鍵)
自動(dòng)提示<Ctrl+n> <Ctrl+p>
所謂的自動(dòng)提示:實(shí)際上是Vim對(duì)用戶近期輸入的單詞進(jìn)行統(tǒng)計(jì)記憶的結(jié)果,它的這個(gè)自動(dòng)提示,是當(dāng)你近期輸入某個(gè)單詞后,再次輸入的時(shí)候,如果輸入首單詞,使用該快捷鍵就能匹配相應(yīng)單詞,從而自動(dòng)補(bǔ)全。
如輸入下面的兩個(gè)單詞:
LaTeX
XeLaText
然后在輸入下面的這個(gè),只輸入首單詞,在利用C+n組合,就會(huì)自動(dòng)補(bǔ)齊。
XeLaText LaTeX
宏錄制:
qa把你的操作記錄在寄存器a內(nèi)
然后@a就會(huì)重復(fù)這個(gè)被記錄的宏
@@用來重復(fù)自己的一個(gè)宏(要指定某一個(gè)特定的就要用@xx,其中xx即前面保存的名)
qaYp<C-a>q→
qa 開始錄制
Yp 復(fù)制行.
<C-a> 增加1.
q 停止錄制.
@a → 在1下面寫下 2
@@ → 在2 正面寫下3
現(xiàn)在做 100@@ 會(huì)創(chuàng)建新的100行,并把數(shù)據(jù)增加到 103.
可視化選擇v,V,Ctrl+V(這個(gè)在前面有講到)
首先的工作自然是使用這個(gè)工具來選擇了,隨便哪一種都可以。
其次選擇后就是對(duì)該模塊進(jìn)行操作,編輯了。可以有
J : 把所有行都連接起來
< or > : 左右縮進(jìn)
=:自動(dòng)完成縮進(jìn)(原始動(dòng)畫中就是這個(gè)效果,看了半天發(fā)現(xiàn)縮進(jìn)變化了)
如何在所有選中行的末尾都加入一個(gè)東東呢?
就和在前面加入--的那個(gè)例子一樣,先選中模塊,然后跳到末尾$,然后加入的話是A,加入某個(gè)就是輸入字符串了,應(yīng)用到所有模塊的部分就是按下Esc即可。
分屏split和vsplit
:split: 創(chuàng)建分配(vsplit則是創(chuàng)建垂直分屏)
C-w<Direction>: Direction可以是hjkl或者方向鍵,用來不同屏幕切換
C-w_或者C-w|: 用來最大化尺寸。
C-w+或者C-w-: 增加尺寸。
分屏的使用:
1.使用大寫的O參數(shù)來垂直分屏。vim -On file1 file2
2. 使用小寫的o參數(shù)來水平分屏。 vim -on file1 file2
3. 上下分割,并打開一個(gè)新文件。 :sp filename
4. 左右分割,并打開一個(gè)新文件。 :vsp filename
5. 屏幕之間的移動(dòng):Ctrl + W + (h, j, k, l)(不同參數(shù)表示移動(dòng)的方向)
比如Ctrl + W + h表示向左邊的屏幕移動(dòng)。
6. 屏幕尺寸的變化。
Ctrl + W + : 表示增加高度。
Ctrl + W - : 表示減少高度
Ctrl + w = : 使得所有的屏幕有相同的高度
7. 具體的更加詳細(xì)的內(nèi)容見help文檔或者h(yuǎn)ttp://coolshell.cn/articles/1679.html
(注,酷殼上的部分命令可能由于版本原因已失效,應(yīng)該有新的快捷鍵代替)
VIM還有更多的功能需要學(xué)習(xí),關(guān)鍵是在使用中不斷加深練習(xí),還有強(qiáng)大的擴(kuò)展插件,另外在瀏覽器中也有相應(yīng)的擴(kuò)展,可謂功能強(qiáng)大。后續(xù)會(huì)繼續(xù)學(xué)習(xí),并做好筆記以及時(shí)總結(jié)學(xué)習(xí)所得。