@(Linux)[vim]
我們早就開始接觸Linux系統(tǒng),同時也用過甚多的編輯器來進(jìn)行編程,而我到為止感覺最好的還是Vim編輯器。它不像現(xiàn)在的IDE一樣,提供給你各種各樣的提示信息,它就是一個游戲,等待你來打怪升級。我相信,你會在這款游戲里體會到它給你帶來的樂趣。
注:參考《Vim實(shí)用技巧》、《酷殼》以及《Learning the vi and Vim Editors》
第一級 – 存活
1.1 基本的操作
-
i
Insert模式,按ESC回到Normal模式 -
x
刪當(dāng)前光標(biāo)所在的一個字符 -
:wq
存盤 + 退出 (:w存盤,:q退出)(:w后可以跟文件名) -
dd
刪除當(dāng)前行,并把刪除的行存到剪貼板里 -
p
粘貼剪貼板 -
hjkl
強(qiáng)例推薦使用其移動光標(biāo),但不必需。你也可以使用光標(biāo)鍵 (←↓↑→) -
:help <command>
顯示相關(guān)命令的幫助。你也可以就輸入:help而不跟命令(退出幫助需要輸入:q)
第二級 – 感覺良好
2.1 各種插入模式
-
a
在光標(biāo)后插入 -
o
在當(dāng)前行后插入一個新行 -
O
在當(dāng)前行前插入一個新行 -
cw
替換從光標(biāo)所在位置后到一個單詞結(jié)尾的字符
2.2 簡單的移動光標(biāo)
-
0
數(shù)字零,到行頭 -
^
到本行第一個不是blank字符的位置(所謂blank字符就是空格,tab,換行,回車等) -
$
到本行行尾 -
g_
到本行最后一個不是blank字符的位置 -
/pattern
搜索 pattern 的字符串(如果搜索出多個匹配,可按n鍵到下一個)
2.3 拷貝/粘貼
-
P
粘貼(p/P都可以,p是表示在當(dāng)前位置之后,P表示在當(dāng)前位置之前) -
yy
拷貝當(dāng)前行當(dāng)行于ddP
2.4 Undo/Redo
-
u
undo -
<C-r>
redo
2.5 打開/保存/退出/改變文件(Buffer)
-
:e <path/to/file>
打開一個文件 -
:w
存盤 -
:saveas <path/to/file>
另存為 <path/to/file> -
:x,ZZ或:wq
保存并退出 (:x表示僅在需要時保存,ZZ不需要輸入冒號并回車) -
:q!
退出不保存:qa!強(qiáng)行退出所有的正在編輯的文件,就算別的文件有更改。 -
:bn和:bp
你可以同時打開很多文件,使用這兩個命令來切換下一個或上一個文件(我喜歡使用:n到下一個文件)
第三級 – 更好,更強(qiáng),更快
先恭喜你!你干的很不錯。我們可以開始一些更為有趣的事了。
在第三級,我們只談那些和vi可以兼容的命令。
3.1 更好
讓我們看一下vim是怎么重復(fù)自己的
-
.
(小數(shù)點(diǎn)) 可以重復(fù)上一次的命令 -
N<command>
重復(fù)某個命令N次
找開一個文件你可以試試下面的命令
-
2dd
刪除2行 -
3p
粘貼文本3次 -
100idesu [ESC]
會寫下 “desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu “ -
.
重復(fù)上一個命令——100 "desu" -
3.
重復(fù) 3 次 “desu” (注意:不是 300,你看,VIM多聰明啊)
3.2 更強(qiáng)
你要讓你的光標(biāo)移動更有效率,你一定要了解下面的這些命令,千萬別跳過。
-
NG
到第 N 行 (注意命令中的G是大寫的,另我一般使用:N到第N行,如 :137 到第137行) -
gg
到第一行(相當(dāng)于1G,或:1) -
G
到最后一行
按單詞移動
-
w
到下一個單詞的開頭 -
e
到下一個單詞的結(jié)尾
1. 如果你認(rèn)為單詞是由默認(rèn)方式,那么就用小寫的
e和w。默認(rèn)上來說,一個單詞由字母,數(shù)字和下劃線組成(程序變量)
2. 如果你認(rèn)為單詞是由blank字符分隔符,那么你需要使用大寫的E和W(程序語句)
讓我來說說最強(qiáng)的光標(biāo)移動
-
%
匹配括號移動,包括 (, {, [. (你需要把光標(biāo)先移到括號上) -
*和#
匹配光標(biāo)當(dāng)前所在的單詞,移動光標(biāo)到下一個(或上一個)匹配單詞(*是下一個,#是上一個)
相信我,上面這三個命令對程序員來說是相當(dāng)強(qiáng)大的。
3.3 更快
你一定要記住光標(biāo)的移動,因?yàn)楹芏嗝疃伎梢院瓦@些移動光標(biāo)的命令連動,很多命令都可以如下來干
<start position><command><end position>
0y$命令意味著
0→ 先到行頭
y→ 從這里開始拷貝
$→ 拷貝到本行最后一個字符ye命令意味著
從當(dāng)前位置拷貝到本單詞的最后一個字符y2/foo命令意味著
來拷貝2個 “foo” 之間的字符串
還有很多時間并不一定你就一定要按 y 才會拷貝,下面的命令也會被拷貝
-
d(刪除 ) -
v(可視化的選擇) -
gU(變大寫) -
gu(變小寫)
可視化選擇是一個很有意思的命令,你可以先按
v,然后移動光標(biāo),你就會看到文本被選擇,然后,你可能d,也可y,也可以變大寫等。
第四級 – Vim 超能力
你只需要掌握前面的命令,你就可以很舒服的使用VIM了。但是,現(xiàn)在,我們向你介紹的是VIM殺手級的功能。下面這些功能是我只用vim的原因。
4.1 在當(dāng)前行上移動光標(biāo)
0 ^ $ f F t T
-
0
到行頭 -
^
到本行的第一個非blank字符 -
$
到行尾 -
g_
到本行最后一個不是blank字符的位置 -
fa
到下一個為a的字符處,你也可以fs到下一個為s的字符 -
t,
到逗號前的第一個字符。逗號可以變成其它字符 -
3fa
在當(dāng)前行查找第三個出現(xiàn)的a -
F和T
和 f 和 t 一樣,只不過是相反方向 -
dt"
刪除所有的內(nèi)容,直到遇到雙引號—— "
4.2 區(qū)域選擇
在visual 模式下,這些命令很強(qiáng)大,其命令格式為<action>a<object> 和 <action>i<object>
action
- 可以是任何的命令,如 d (刪除), y (拷貝), v (可以視模式選擇)。
object
- 可能是:
w一個單詞,W一個以空格為分隔的單詞,s一個句字,p一個段落。也可以是一個特別的字符:"、 '、 )、 }、 ]。
假設(shè)你有一個字符串 (map (+) ("foo")) 而光標(biāo)鍵在第一個 o 的位置
-
vi"→ 會選擇foo -
va"→ 會選擇"foo" -
vi)→ 會選擇"foo" -
va)→ 會選擇("foo") -
v2i)→ 會選擇map (+) ("foo") -
v2a)→ 會選擇(map (+) ("foo"))
4.3 塊操作
<C-v>
典型的操作
-
^
到行頭 -
<C-v>
開始塊操作 -
<C-d>
向下移動 (你也可以使用hjkl來移動光標(biāo),或是使用%,或是別的) -
I-- [ESC]
I是插入,插入“--”,按ESC鍵來為每一行生效。
在Windows下的vim,你需要使用
<C-q>而不是<C-v>,<C-v>是拷貝剪貼板。
4.4 自動提示
<C-n> 和 <C-p>
在 Insert 模式下,你可以輸入一個詞的開頭,然后按 <C-p> 或是 <C-n>,自動補(bǔ)齊功能就出現(xiàn)了……
4.5 宏錄制
qa 操作序列q, @a, @@
qa 把你的操作記錄在寄存器 a
于是 @a 會replay被錄制的宏
@@ 是一個快捷鍵用來replay最新錄制的宏
在一個只有一行且這一行只有“1”的文本中,鍵入如下命令
qaYp<C-a>q相當(dāng)于
qa開始錄制Yp復(fù)制行<C-a>增加1q停止錄制@a→ 在1下面寫下 2@@→ 在2 正面寫下3現(xiàn)在做
100@@會創(chuàng)建新的100行,并把數(shù)據(jù)增加到 103
4.6 可視化選擇
v,V,<C-v>
前面,我們看到了 <C-v>的示例 (在Windows下應(yīng)該是<C-q>),我們可以使用 v 和V。一但被選好了,你可以做下面的事:
-
J
把所有的行連接起來(變成一行) -
<或>
左右縮進(jìn) -
=
自動給縮進(jìn) (這個功能相當(dāng)強(qiáng)大,我太喜歡了)
在所有被選擇的行后加上點(diǎn)東西:
<C-v>
選中相關(guān)的行 (可使用 j 或 <C-d> 或是 /pattern 或是 % 等……)
-
$
到行最后 -
A
輸入字符串,按ESC
4.7 分屏
:split 和 vsplit
下面是主要的命令,你可以使用VIM的幫助 :help split 你可以參考本站以前的一篇文章VIM分屏。
-
:split
創(chuàng)建分屏 (:vsplit創(chuàng)建垂直分屏) -
<C-w><dir>
dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一個,其用來切換分屏。 -
<C-w>_(或<C-w>|)
最大化尺寸 (<C-w>|垂直分屏) -
<C-w>+(或<C-w>-)
增加尺寸
第五級 – 結(jié)束語
上面是作者最常用的90%的命令。
我建議你每天都學(xué)1到2個新的命令。在兩到三周后,你會感到vim的強(qiáng)大的。
有時候,學(xué)習(xí)VIM就像是在死背一些東西。幸運(yùn)的是,vim有很多很不錯的工具和優(yōu)秀的文檔。
運(yùn)行vimtutor直到你熟悉了那些基本命令。其在線幫助文檔中你應(yīng)該要仔細(xì)閱讀的是
:help usr_02.txt
你會學(xué)習(xí)到諸如 !, 目錄,寄存器,插件等很多其它的功能。
學(xué)習(xí)vim就像學(xué)彈鋼琴一樣,一旦學(xué)會,受益無窮。
第六級 – 思維導(dǎo)圖
