下文轉自鏈接。由原作者陳皓譯自《Learn ViM Progressively》,非常不錯。
——————————正文開始——————————
Better, Stronger, Faster.
學習 vim 并且其會成為你最后1個使用的文本編輯器。沒有比這個更好的文本編輯器了,非常地難學,但是卻不可思議地好用。
我建議下面這4個步驟:
存活
感覺良好
覺得更好,更強,更快
使用VIM的超能力
當你走完這篇文章,你會成為1個vim的 superstar。
在開始學習之前,我需要給你1些正告:
學習vim在開始時是痛苦的。
需要時間
需不斷地練習,就像你學習1個樂器1樣。
不要期望你能在3天內把vim練得比別的編輯器更有效力。
事實上,你需要2周時間的苦練,而不是3天。
安裝 vim
啟動 vim
甚么也別干!請先瀏覽
當你安裝好1個編輯器后,你1定會想在其中輸入點甚么東西,然后看看這個編輯器是甚么模樣。但vim不是這樣的,請依照下面的命令操作:
現在,你知道如何在 Insert 和 Normal 模式下切換了。下面是1些命令,可讓你在 Normal 模式下幸存下來:
hjkl (強例推薦使用其移動光標,但沒必要需) →你也能夠使用光標鍵 (←↓↑→). 注: j 就像下箭頭。
:help <command> → 顯示相干命令的幫助。你也能夠就輸入 :help 而不跟命令。(陳皓注:退出幫助需要輸入:q)
你能在vim幸存下來只需要上述的那5個命令,你就能夠編輯文本了,你1定要把這些命令練成1種下意識的狀態。因而你就能夠開始進階到第2級了。
但是,在你進入第2級時,需要再說1下 Normal 模式。在1般的編輯器下,當你需要copy1段文字的時候,你需要使用 Ctrl 鍵,比如:Ctrl-C。也就是說,Ctrl鍵就好像功能鍵1樣,當你按下了功能鍵Ctrl后,C就不在是C了,而且就是1個命令或是1個快鍵鍵了,在VIM的Normal模式下,所有的鍵就是功能鍵了。這個你需要知道。
標記:
上面的那些命令只能讓你存活下來,現在是時候學習1些更多的命令了,下面是我的建議:(陳皓注:所有的命令都需要在Normal模式下使用,如果你不知道現在在甚么樣的模式,你就狂按幾次ESC鍵)
2.1.各種插入模式
a → 在光標后插入
o → 在當前行后插入1個新行
O → 在當前行前插入1個新行
cw → 替換從光標所在位置后到1個單詞結尾的字符
2.2.簡單的移動光標
0 → 數字零,到行頭
^ → 到本行第1個不是blank字符的位置(所謂blank字符就是空格,tab,換行,回車等)
$ → 到本行行尾
g_ → 到本行最后1個不是blank字符的位置。
/pattern → 搜索 pattern 的字符串(陳皓注:如果搜索出多個匹配,可按n鍵到下1個)
2.3.拷貝/粘貼 (陳皓注:p/P都可以,p是表示在當前位置以后,P表示在當前位置之前)
P → 粘貼
yy → 拷貝當前行當行于 ddP
2.4.Undo/Redo
u → undo
<C-r> → redo
2.5.打開/保存/退出/改變文件(Buffer)
:e <path/to/file> → 打開1個文件
:w → 存盤
:saveas <path/to/file> → 另存為 <path/to/file>
:x, ZZ 或 :wq → 保存并退出 (:x 表示僅在需要時保存,ZZ不需要輸入冒號并回車)
:q! → 退出不保存 :qa! 強行退出所有的正在編輯的文件,就算別的文件有更改。
:bn 和 :bp → 你可以同時打開很多文件,使用這兩個命令來切換下1個或上1個文件。(陳皓注:我喜歡使用:n到下1個文件)
花點時間熟習1下上面的命令,1旦你掌握他們了,你就幾近可以干其它編輯器都能干的事了。但是到現在為止,你還是覺得使用vim還是有點笨拙,不過沒關系,你可以進階到第3級了。
先恭喜你!你干的很不錯。我們可以開始1些更加有趣的事了。在第3級,我們只談那些和vi可以兼容的命令。
下面,讓我們看1下vim是怎樣重復自己的:
1. . → (小數點) 可以重復上1次的命令
2. N<command> → 重復某個命令N次
下面是1個示例,找開1個文件你可以試試下面的命令:
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 “
. → 重復上1個命令—— 100 “desu “.
3. → 重復 3 次 “desu” (注意:不是 300,你看,VIM多聰明啊).
你要讓你的光標移動更有效力,你1定要了解下面的這些命令,千萬別跳過。
NG → 到第 N 行 (陳皓注:注意命令中的G是大寫的,另我1般使用 : N 到第N行,如 :137 到第137行)
gg → 到第1行。(陳皓注:相當于1G,或 :1)
G → 到最后1行。
按單詞移動:
w → 到下1個單詞的開頭。
e → 到下1個單詞的結尾。
> 如果你認為單詞是由默許方式,那末就用小寫的e和w。默許上來講,1個單詞由字母,數字和下劃線組成(陳皓注:程序變量)
> 如果你認為單詞是由blank字符分隔符,那末你需要使用大寫的E和W。(陳皓注:程序語句)
下面,讓我來講說最強的光標移動:
% : 匹配括號移動,包括 (, {, [. (陳皓注:你需要把光標先移到括號上)
* 和 #: 匹配光標當前所在的單詞,移動光標到下1個(或上1個)匹配單詞(*是下1個,#是上1個)
相信我,上面這3個命令對程序員來講是相當強大的。
你1定要記住光標的移動,由于很多命令都可以和這些移動光標的命令連動。很多命令都可以以下來干:
<start position><command><end position>
例如 0y$ 命令意味著:
0 → 先到行頭
y → 從這里開始拷貝
$ → 拷貝到本行最后1個字符
你可可以輸入 ye,從當前位置拷貝到本單詞的最后1個字符。
你也能夠輸入 y2/foo 來拷貝2個 “foo” 之間的字符串。
還有很多時間其實不1定你就1定要按y才會拷貝,下面的命令也會被拷貝:
d (刪除 )
v (可視化的選擇)
gU (變大寫)
gu (變小寫)
等等
(陳皓注:可視化選擇是1個很成心思的命令,你可以先按v,然后移動光標,你就會看到文本被選擇,然后,你可能d,也可y,也能夠變大寫等)
你只需要掌握前面的命令,你就能夠很舒服的使用VIM了。但是,現在,我們向你介紹的是VIM殺手級的功能。下面這些功能是我只用vim的緣由。
0 → 到行頭
^ → 到本行的第1個非blank字符
$ → 到行尾
g_ → 到本行最后1個不是blank字符的位置。
fa → 到下1個為a的字符處,你也能夠fs到下1個為s的字符。
t, → 到逗號前的第1個字符。逗號可以變成其它字符。
3fa → 在當前行查找第3個出現的a。
F 和 T → 和 f 和 t 1樣,只不過是相反方向。
<action>a<object> 或 <action>i<object>
在visual 模式下,這些命令很強大
action可以是任何的命令,如 d (刪除), y (拷貝), v (可以視模式選擇)。
object 多是: w 1個單詞, W 1個以空格為分隔的單詞, s 1個句字, p 1個段落。也能夠是1個特別的字符:"、 '、 )、 }、 ]。
假定你有1個字符串 (map (+) (“foo”)).而光標鍵在第1個 o 的位置。
vi" → 會選擇 foo.
va" → 會選擇 "foo".
vi) → 會選擇 "foo".
va) → 會選擇("foo").
v2i) → 會選擇 map (+) ("foo")
v2a) → 會選擇 (map (+) ("foo"))
塊操作,典型的操作: 0 I– [ESC]
^ → 到行頭
<C-v> → 開始塊操作
<C-d> → 向下移動 (你也能夠使用hjkl來移動光標,或是使用%,或是別的)
I-- [ESC] → I是插入,插入“--”,按ESC鍵來為每行生效。
Rectangular blocks
在Windows下的vim,你需要使用 而不是 , 是拷貝剪貼板。
在 Insert 模式下,你可以輸入1個詞的開頭,然后按 <C-p>或是<C-n>,自動補齊功能就出現了……
示例
在1個只有1行且這1行只有“1”的文本中,鍵入以下命令:
qaYp<C-a>q→
qa 開始錄制
Yp 復制行.
<C-a> 增加1.
q 停止錄制.
@a → 在1下面寫下 2
@@ → 在2 正面寫下3
現在做 100@@ 會創建新的100行,并把數據增加到 103.
前面,我們看到了 的示例 (在Windows下應當是),我們可使用 v 和 V。1但被選好了,你可以做下面的事:
在所有被選擇的行后加上點東西:
下面是主要的命令,你可使用VIM的幫助 :help split. 你可以參考本站之前的1篇文章VIM分屏。
:split → 創建分屏 (:vsplit創建垂直分屏)
<C-w><dir> : dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的1個,其用來切換分屏。
<C-w>_ (或 <C-w>|) : 最大化尺寸 (<C-w>| 垂直分屏)
<C-w>+ (或 <C-w>-) : 增加尺寸
結束語
- 上面是作者最經常使用的90%的命令。
- 我建議你每天都學1到2個新的命令。
- 在兩到3周后,你會感到vim的強大的。
- 有時候,學習VIM就像是在死背1些東西。
- 榮幸的是,vim有很多很不錯的工具和優秀的文檔。
- 運行vimtutor直到你熟習了那些基本命令。
學習vim就像學彈鋼琴1樣,1旦學會,受益無窮。
——————————正文結束——————————
對vi/vim只是點評1點:這是1個你不需要使用鼠標,不需使用小鍵盤,只需要使用大鍵盤就能夠完成很多復雜功能文本編輯的編輯器。不然,Visual Studio也不就會有vim的插件了。