vim的學(xué)習(xí)曲線相當(dāng)?shù)拇螅▍⒖?a target="_blank" rel="nofollow">各種文本編輯器的學(xué)習(xí)曲線)愈诚,所以荣堰,如果你一開始看到的是一大堆VIM的命令分類淹辞,你一定會(huì)對(duì)這個(gè)編輯器失去興趣的医舆。下面的文章翻譯自《Learn Vim Progressively》,我覺得這是給新手最好的VIM的升級(jí)教程了象缀,沒有列舉所有的命令蔬将,只是列舉了那些最有用的命令。非常不錯(cuò)央星。
——————————正文開始——————————
你想以最快的速度學(xué)習(xí)人類史上最好的文本編輯器VIM嗎娃胆?你先得懂得如何在VIM幸存下來,然后一點(diǎn)一點(diǎn)地學(xué)習(xí)各種戲法等曼。
Vimthe Six Billion Dollar editor
學(xué)習(xí)vim并且其會(huì)成為你最后一個(gè)使用的文本編輯器里烦。沒有比這個(gè)更好的文本編輯器了,非常地難學(xué)禁谦,但是卻不可思議地好用胁黑。
我建議下面這四個(gè)步驟:
1.存活
2.感覺良好
3.覺得更好,更強(qiáng)州泊,更快
4.使用VIM的超能力
當(dāng)你走完這篇文章丧蘸,你會(huì)成為一個(gè)vim的 superstar。
在開始學(xué)習(xí)以前遥皂,我需要給你一些警告:
學(xué)習(xí)vim在開始時(shí)是痛苦的力喷。
需要時(shí)間
需要不斷地練習(xí),就像你學(xué)習(xí)一個(gè)樂器一樣演训。
不要期望你能在3天內(nèi)把vim練得比別的編輯器更有效率弟孟。
事實(shí)上,你需要2周時(shí)間的苦練样悟,而不是3天拂募。
第一級(jí) – 存活
安裝vim
啟動(dòng) vim
什么也別干庭猩!請(qǐng)先閱讀
當(dāng)你安裝好一個(gè)編輯器后,你一定會(huì)想在其中輸入點(diǎn)什么東西陈症,然后看看這個(gè)編輯器是什么樣子蔼水。但vim不是這樣的,請(qǐng)按照下面的命令操作:
啟 動(dòng)Vim后录肯,vim在Normal模式下趴腋。
讓我們進(jìn)入Insert模式,請(qǐng)按下鍵 i 论咏。(陳皓注:你會(huì)看到vim左下角有一個(gè)–insert–字樣优炬,表示,你可以以插入的方式輸入了)
此時(shí)潘靖,你可以輸入文本了穿剖,就像你用“記事本”一樣。
如果你想返回Normal模式卦溢,請(qǐng)按ESC鍵糊余。
現(xiàn)在,你知道如何在Insert和Normal模式下切換了单寂。下面是一些命令贬芥,可以讓你在Normal模式下幸存下來:
i→Insert模式,按ESC回到Normal模式.
x→ 刪當(dāng)前光標(biāo)所在的一個(gè)字符宣决。
:wq→ 存盤 + 退出 (:w存盤,:q退出) ? (陳皓注::w 后可以跟文件名)
dd→ 刪除當(dāng)前行蘸劈,并把刪除的行存到剪貼板里
p→ 粘貼剪貼板
推薦:
hjkl(強(qiáng)例推薦使用其移動(dòng)光標(biāo),但不必需) →你也可以使用光標(biāo)鍵 (←↓↑→). 注:j就像下箭頭尊沸。
:help → 顯示相關(guān)命令的幫助威沫。你也可以就輸入:help而不跟命令。(陳皓注:退出幫助需要輸入:q)
你能在vim幸存下來只需要上述的那5個(gè)命令洼专,你就可以編輯文本了棒掠,你一定要把這些命令練成一種下意識(shí)的狀態(tài)。于是你就可以開始進(jìn)階到第二級(jí)了屁商。
當(dāng)是烟很,在你進(jìn)入第二級(jí)時(shí),需要再說一下Normal模式蜡镶。在一般的編輯器下雾袱,當(dāng)你需要copy一段文字的時(shí)候,你需要使用Ctrl鍵官还,比如:Ctrl-C芹橡。也就是說,Ctrl鍵就好像功能鍵一樣妻枕,當(dāng)你按下了功能鍵Ctrl后僻族,C就不在是C了粘驰,而且就是一個(gè)命令或是一個(gè)快鍵鍵了屡谐,在VIM的Normal模式下述么,所有的鍵就是功能鍵了。這個(gè)你需要知道愕掏。
標(biāo)記:
下面的文字中度秘,如果是Ctrl-λ我會(huì)寫成.
以:開始的命令你需要輸入回車,例如 — 如果我寫成:q也就是說你要輸入:q.
第二級(jí) – 感覺良好
上面的那些命令只能讓你存活下來饵撑,現(xiàn)在是時(shí)候?qū)W習(xí)一些更多的命令了剑梳,下面是我的建議:(陳皓注:所有的命令都需要在Normal模式下使用,如果你不知道現(xiàn)在在什么樣的模式滑潘,你就狂按幾次ESC鍵)
1.各種插入模式
a→ 在光標(biāo)后插入
o→ 在當(dāng)前行后插入一個(gè)新行
O→ 在當(dāng)前行前插入一個(gè)新行
cw→ 替換從光標(biāo)所在位置后到一個(gè)單詞結(jié)尾的字符
2.簡(jiǎn)單的移動(dòng)光標(biāo)
0→ 數(shù)字零垢乙,到行頭
^→ 到本行第一個(gè)不是blank字符的位置(所謂blank字符就是空格,tab语卤,換行追逮,回車等)
$→ 到本行行尾
g_→ 到本行最后一個(gè)不是blank字符的位置。
/pattern→ 搜索pattern的字符串(陳皓注:如果搜索出多個(gè)匹配粹舵,可按n鍵到下一個(gè))
3.拷貝/粘貼(陳皓注:p/P都可以,p是表示在當(dāng)前位置之后,P表示在當(dāng)前位置之前)
P→ 粘貼
yy→ 拷貝當(dāng)前行當(dāng)行于ddP
4.Undo/Redo
u→ undo
→ redo
5.打開/保存/退出/改變文件(Buffer)
:e → 打開一個(gè)文件
:w→ 存盤
:saveas → 另存為
:x掺涛,ZZ或:wq→ 保存并退出 (:x表示僅在需要時(shí)保存大猛,ZZ不需要輸入冒號(hào)并回車)
:q!→ 退出不保存:qa!強(qiáng)行退出所有的正在編輯的文件,就算別的文件有更改诅需。
:bn和:bp→ 你可以同時(shí)打開很多文件漾唉,使用這兩個(gè)命令來切換下一個(gè)或上一個(gè)文件。(陳皓注:我喜歡使用:n到下一個(gè)文件)
花點(diǎn)時(shí)間熟悉一下上面的命令堰塌,一旦你掌握他們了赵刑,你就幾乎可以干其它編輯器都能干的事了。但是到現(xiàn)在為止蔫仙,你還是覺得使用vim還是有點(diǎn)笨拙料睛,不過沒關(guān)系,你可以進(jìn)階到第三級(jí)了摇邦。
第三級(jí)?– 更好恤煞,更強(qiáng),更快
先恭喜你施籍!你干的很不錯(cuò)居扒。我們可以開始一些更為有趣的事了。在第三級(jí)丑慎,我們只談那些和vi可以兼容的命令喜喂。
更好
下面瓤摧,讓我們看一下vim是怎么重復(fù)自己的:
1. .→ (小數(shù)點(diǎn)) 可以重復(fù)上一次的命令
2. N → 重復(fù)某個(gè)命令N次
下面是一個(gè)示例,找開一個(gè)文件你可以試試下面的命令:
2dd→ 刪除2行
3p→ 粘貼文本3次
100idesu [ESC]→ 會(huì)寫下 “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ù)上一個(gè)命令—— 100 “desu “.
3.→ 重復(fù) 3 次 “desu” (注意:不是 300玉吁,你看照弥,VIM多聰明啊).
更強(qiáng)
你要讓你的光標(biāo)移動(dòng)更有效率,你一定要了解下面的這些命令进副,千萬別跳過这揣。
1.NG→ 到第 N 行 (陳皓注:注意命令中的G是大寫的,另我一般使用 : N 到第N行影斑,如 :137 到第137行)
2.gg→ 到第一行给赞。(陳皓注:相當(dāng)于1G,或 :1)
3.G→ 到最后一行矫户。
4.按單詞移動(dòng):
w→ 到下一個(gè)單詞的開頭片迅。
e→ 到下一個(gè)單詞的結(jié)尾。
> 如果你認(rèn)為單詞是由默認(rèn)方式皆辽,那么就用小寫的e和w柑蛇。默認(rèn)上來說,一個(gè)單詞由字母膳汪,數(shù)字和下劃線組成(陳皓注:程序變量)
> 如果你認(rèn)為單詞是由blank字符分隔符唯蝶,那么你需要使用大寫的E和W。(陳皓注:程序語句)
下面遗嗽,讓我來說說最強(qiáng)的光標(biāo)移動(dòng):
%: 匹配括號(hào)移動(dòng)粘我,包括(,{,[. (陳皓注:你需要把光標(biāo)先移到括號(hào)上)
*和#: ?匹配光標(biāo)當(dāng)前所在的單詞,移動(dòng)光標(biāo)到下一個(gè)(或上一個(gè))匹配單詞(*是下一個(gè)痹换,#是上一個(gè))
相信我征字,上面這三個(gè)命令對(duì)程序員來說是相當(dāng)強(qiáng)大的。
更快
你一定要記住光標(biāo)的移動(dòng)娇豫,因?yàn)楹芏嗝疃伎梢院瓦@些移動(dòng)光標(biāo)的命令連動(dòng)匙姜。很多命令都可以如下來干:
例如0y$命令意味著:
0→ 先到行頭
y→ 從這里開始拷貝
$→ 拷貝到本行最后一個(gè)字符
你可可以輸入ye,從當(dāng)前位置拷貝到本單詞的最后一個(gè)字符冯痢。
你也可以輸入y2/foo來拷貝2個(gè) “foo” 之間的字符串氮昧。
還有很多時(shí)間并不一定你就一定要按y才會(huì)拷貝,下面的命令也會(huì)被拷貝:
d(刪除 )
v(可視化的選擇)
gU(變大寫)
gu(變小寫)
等等
(陳皓注:可視化選擇是一個(gè)很有意思的命令浦楣,你可以先按v袖肥,然后移動(dòng)光標(biāo),你就會(huì)看到文本被選擇振劳,然后椎组,你可能d,也可y历恐,也可以變大寫等)
第四級(jí) – Vim 超能力
你只需要掌握前面的命令寸癌,你就可以很舒服的使用VIM了专筷。但是,現(xiàn)在蒸苇,我們向你介紹的是VIM殺手級(jí)的功能磷蛹。下面這些功能是我只用vim的原因。
在當(dāng)前行上移動(dòng)光標(biāo):0^$fFtT,;
0→ 到行頭
^→ 到本行的第一個(gè)非blank字符
$→ 到行尾
g_→ 到本行最后一個(gè)不是blank字符的位置填渠。
fa→ 到下一個(gè)為a的字符處弦聂,你也可以fs到下一個(gè)為s的字符鸟辅。
t,→ 到逗號(hào)前的第一個(gè)字符氛什。逗號(hào)可以變成其它字符。
3fa→ 在當(dāng)前行查找第三個(gè)出現(xiàn)的a匪凉。
F和T→ 和f和t一樣枪眉,只不過是相反方向。
還有一個(gè)很有用的命令是dt"→ 刪除所有的內(nèi)容再层,直到遇到雙引號(hào)——"贸铜。
區(qū)域選擇<action>a<object>或<action>i<object>
在visual 模式下,這些命令很強(qiáng)大聂受,其命令格式為
<action>a<object>或<action>i<object>
action可以是任何的命令蒿秦,如d(刪除),y(拷貝),v(可以視模式選擇)。
object 可能是:w一個(gè)單詞蛋济,W一個(gè)以空格為分隔的單詞棍鳖,s一個(gè)句字,p一個(gè)段落碗旅。也可以是一個(gè)特別的字符:"渡处、'、)祟辟、}医瘫、]。
假設(shè)你有一個(gè)字符串(map (+) ("foo")).而光標(biāo)鍵在第一個(gè)o的位置旧困。
vi"→ 會(huì)選擇foo.
va"→ 會(huì)選擇"foo".
vi)→ 會(huì)選擇"foo".
va)→ 會(huì)選擇("foo").
v2i)→ 會(huì)選擇map (+) ("foo")
v2a)→ 會(huì)選擇(map (+) ("foo"))
塊操作:<C-v>
塊操作醇份,典型的操作:0 I-- [ESC]
^→ 到行頭
→ 開始?jí)K操作
→ 向下移動(dòng) (你也可以使用hjkl來移動(dòng)光標(biāo),或是使用%吼具,或是別的)
I-- [ESC]→ I是插入僚纷,插入“--”,按ESC鍵來為每一行生效馍悟。
在Windows下的vim畔濒,你需要使用而不是,是拷貝剪貼板锣咒。
自動(dòng)提示:和
在 Insert 模式下侵状,你可以輸入一個(gè)詞的開頭赞弥,然后按或是,自動(dòng)補(bǔ)齊功能就出現(xiàn)了……
宏錄制:qa操作序列q,@a,@@
qa把你的操作記錄在寄存器a趣兄。
于是@a會(huì)replay被錄制的宏绽左。
@@是一個(gè)快捷鍵用來replay最新錄制的宏。
示例
在一個(gè)只有一行且這一行只有“1”的文本中艇潭,鍵入如下命令:
qaYpq→
qa開始錄制
Yp復(fù)制行.
增加1.
q停止錄制.
@a→ 在1下面寫下 2
@@→ 在2 正面寫下3
現(xiàn)在做100@@會(huì)創(chuàng)建新的100行拼窥,并把數(shù)據(jù)增加到 103.
可視化選擇:v,V,
前面,我們看到了的示例 (在Windows下應(yīng)該是)蹋凝,我們可以使用v和V鲁纠。一但被選好了,你可以做下面的事:
J→ 把所有的行連接起來(變成一行)
<或>→ 左右縮進(jìn)
=→ 自動(dòng)給縮進(jìn) (陳皓注:這個(gè)功能相當(dāng)強(qiáng)大鳍寂,我太喜歡了)
在所有被選擇的行后加上點(diǎn)東西:
選中相關(guān)的行 (可使用j或或是/pattern或是%等……)
$到行最后
A, 輸入字符串改含,按ESC。
分屏::split和vsplit.
下面是主要的命令迄汛,你可以使用VIM的幫助:help split. 你可以參考本站以前的一篇文章VIM分屏捍壤。
:split→ 創(chuàng)建分屏 (:vsplit創(chuàng)建垂直分屏)
: dir就是方向,可以是hjkl或是 ←↓↑→ 中的一個(gè)鞍爱,其用來切換分屏鹃觉。
_(或|)?: 最大化尺寸 (|?垂直分屏)
+(或-)?: 增加尺寸
結(jié)束語
上面是作者最常用的90%的命令。
我建議你每天都學(xué)1到2個(gè)新的命令睹逃。
在兩到三周后盗扇,你會(huì)感到vim的強(qiáng)大的。
有時(shí)候唯卖,學(xué)習(xí)VIM就像是在死背一些東西粱玲。
幸運(yùn)的是,vim有很多很不錯(cuò)的工具和優(yōu)秀的文檔拜轨。
運(yùn)行vimtutor直到你熟悉了那些基本命令抽减。
其在線幫助文檔中你應(yīng)該要仔細(xì)閱讀的是:help usr_02.txt.
你會(huì)學(xué)習(xí)到諸如!,目錄橄碾,寄存器卵沉,插件等很多其它的功能。
學(xué)習(xí)vim就像學(xué)彈鋼琴一樣法牲,一旦學(xué)會(huì)史汗,受益無窮。
——————————正文結(jié)束——————————
對(duì)于vi/vim只是點(diǎn)評(píng)一點(diǎn):這是一個(gè)你不需要使用鼠標(biāo)拒垃,不需使用小鍵盤停撞,只需要使用大鍵盤就可以完成很多復(fù)雜功能文本編輯的編輯器。不然,Visual Studio也不就會(huì)有vim的插件了戈毒。
(全文完)