前言
今天看到這篇文章,共鳴點很是多。它把Vim使用分爲4個級別,目前我本身是熟練運用前面三級的命令,在培養習慣使用第四級。徹底就是我這一年來堅持使用Vim的過程。因此無論怎麼我要轉載這篇文章。翻譯自《Learn Vim Progressively》,原中文翻譯出自《簡明Vim練級攻略》。我進行了部分的排版工做,和文字刪減以及全部圖片本地化的工做。html
Vim的學習曲線至關的大,因此,若是你一開始看到的是一大堆Vim的命令分類,你必定會對這個編輯器失去興趣的。下面的文章我以爲這是給新手最好的Vim的升級教程了,沒有列舉全部的命令,只是列舉了那些最有用的命令。很是不錯。程序員
Better, Stronger, Faster.
正文
你想以最快的速度學習人類史上最好的文本編輯器Vim嗎?你先得懂得如何在Vim倖存下來,而後一點一點地學習各類用法。學習Vim而且其會成爲你最後一個使用的文本編輯器。沒有比這個更好的文本編輯器了,很是地難學,可是卻難以想象地好用。
我建議下面這四個步驟:shell
- 存活
- 感受良好
- 以爲更好,更強,更快
- 使用Vim的超能力
當你走完這篇文章,你會成爲一個Vim的superstar,在開始學習之前,我須要給你一些警告:vim
- 學習Vim在開始時是痛苦的。
- 須要時間
- 須要不斷地練習,就像你學習一個樂器同樣。
- 不要指望你能在3天內把Vim練得比別的編輯器更有效率。
- 事實上,你須要2周時間的苦練,而不是3天。
第一級 存活
安裝並啓動Vim,什麼也別幹!請先閱讀。當你安裝好一個編輯器後,你必定會想在其中輸入點什麼東西,而後看看這個編輯器是什麼樣子。但Vim不是這樣的,請按照下面的命令操做:編輯器
- 啓 動Vim後,Vim在 Normal 模式下。
- 讓咱們進入 Insert 模式,請按下鍵 i 。
- 此時,你能夠輸入文本了,就像你用「記事本」同樣。
- 若是你想返回 Normal 模式,請按 ESC 鍵。
- i → Insert 模式,按 ESC 回到 Normal 模式.
- x → 刪當前光標所在的一個字符。
- :wq → 存盤 + 退出 (:w 存盤, :q 退出)
- dd → 刪除當前行,並把刪除的行存到剪貼板裏
- p → 粘貼剪貼板
- hjkl (強例推薦使用其移動光標,但沒必要需) →你也可使用光標鍵 (←↓↑→). 注: j 就像下箭頭。
- :help <command> → 顯示相關命令的幫助。你也能夠就輸入 :help 而不跟命令。
當是,在你進入第二級時,須要再說一下Normal 模式。在通常的編輯器下,當你須要copy一段文字的時候,你須要使用 Ctrl 鍵,好比:Ctrl-C。也就是說,Ctrl鍵就好像功能鍵同樣,當你按下了功能鍵Ctrl後,C就不在是C了,並且就是一個命令或是一個快鍵鍵了,在Vim的Normal模式下,全部的鍵就是功能鍵了。這個你須要知道。
標記:ide
- 下面的文字中,若是是 Ctrl-λ我會寫成 <C-λ>.
- 以 : 開始的命令你須要輸入 <enter>回車,例如 — 若是我寫成 :q 也就是說你要輸入 :q<enter>.
第二級 感受良好
上面的那些命令只能讓你存活下來,如今是時候學習一些更多的命令了,下面是個人建議:工具
- a → 在光標後插入
- o → 在當前行後插入一個新行
- O → 在當前行前插入一個新行
- cw → 替換從光標所在位置後到一個單詞結尾的字符
- → 數字零,到行頭
- ^ → 到本行第一個不是blank字符的位置(所謂blank字符就是空格,tab,換行,回車等)
- $ → 到本行行尾
- g_ → 到本行最後一個不是blank字符的位置。
- /pattern → 搜索 pattern 的字符串
- P → 粘貼
- yy → 拷貝當前行當行於 ddP
- u → undo
- <C-r> → redo
- :e <path/to/file> → 打開一個文件
- :w → 存盤
- :saveas <path/to/file> → 另存爲 <path/to/file>
- :x, ZZ 或 :wq → 保存並退出 (:x 表示僅在須要時保存,ZZ不須要輸入冒號並回車)
- :q! → 退出不保存 :qa! 強行退出全部的正在編輯的文件,就算別的文件有更改。
- :bn 和 :bp → 你能夠同時打開不少文件,使用這兩個命令來切換下一個或上一個文件。
第三級 更好、更強、更快
先恭喜你!你乾的很不錯。咱們能夠開始一些更爲有趣的事了。在第三級,咱們只談那些和vi能夠兼容的命令。學習
- . → (小數點) 能夠重複上一次的命令
- N<command> → 重複某個命令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 「
- . → 重複上一個命令—— 100 「desu 「.
- 3. → 重複 3 次 「desu」 (注意:不是 300,你看,Vim多聰明啊).
- NG → 到第 N 行。
- gg → 到第一行。
- G → 到最後一行。
- 按單詞移動:
- w → 到下一個單詞的開頭。
- e → 到下一個單詞的結尾。
> 若是你認爲單詞是由默認方式,那麼就用小寫的e和w。默認上來講,一個單詞由字母,數字和下劃線組成(注:程序變量)
> 若是你認爲單詞是由blank字符分隔符,那麼你須要使用大寫的E和W。(注:程序語句)
![]()
- % : 匹配括號移動,包括 (, {, [.
- * 和 #: 匹配光標當前所在的單詞,移動光標到下一個(或上一個)匹配單詞(*是下一個,#是上一個)
- → 先到行頭
- y → 從這裏開始拷貝
- $ → 拷貝到本行最後一個字符
- d (刪除 )
- v (可視化的選擇)
- gU (變大寫)
- gu (變小寫)
- 等等
第四級 Vim 超能力
你只須要掌握前面的命令,你就能夠很舒服的使用Vim了。可是,如今,咱們向你介紹的是Vim殺手級的功能。下面這些功能是我只用Vim的緣由。spa
- → 到行頭
- ^ → 到本行的第一個非blank字符
- $ → 到行尾
- g_ → 到本行最後一個不是blank字符的位置。
- fa → 到下一個爲a的字符處,你也能夠fs到下一個爲s的字符。
- t, → 到逗號前的第一個字符。逗號能夠變成其它字符。
- 3fa → 在當前行查找第三個出現的a。
- F 和 T → 和 f 和 t 同樣,只不過是相反方向。
- action能夠是任何的命令,如 d (刪除), y (拷貝), v (能夠視模式選擇)。
- object 多是: w 一個單詞, W 一個以空格爲分隔的單詞, s 一個句字, p 一個段落。也能夠是一個特別的字符:"、 '、 )、 }、 ]。
- vi" → 會選擇 foo.
- va" → 會選擇 "foo".
- vi) → 會選擇 "foo".
- va) → 會選擇("foo").
- v2i) → 會選擇 map (+) ("foo")
- v2a) → 會選擇 (map (+) ("foo"))
![]()
- ^ → 到行頭
- <C-v> → 開始塊操做
- <C-d> → 向下移動 (你也可使用hjkl來移動光標,或是使用%,或是別的)
- I-- [ESC] → I是插入,插入「--」,按ESC鍵來爲每一行生效。
![]()
在 Insert 模式下,你能夠輸入一個詞的開頭,而後按 <C-p>或是<C-n>,自動補齊功能就出現了……
![]()
- qa 把你的操做記錄在寄存器 a。
- 因而 @a 會replay被錄製的宏。
- @@ 是一個快捷鍵用來replay最新錄製的宏。
在一個只有一行且這一行只有「1」的文本中,鍵入以下命令:
- qaYp<C-a>q→
- qa 開始錄製
- Yp 複製行.
- <C-a> 增長1.
- q 中止錄製.
- @a → 在1下面寫下 2
- @@ → 在2 正面寫下3
- 如今作 100@@ 會建立新的100行,並把數據增長到 103.
![]()
- J → 把全部的行鏈接起來(變成一行)
- < 或 > → 左右縮進
- = → 自動給縮進
![]()
- <C-v>
- 選中相關的行 (可以使用 j 或 <C-d> 或是 /pattern 或是 % 等……)
- $ 到行最後
- A, 輸入字符串,按 ESC。
![]()
- :split → 建立分屏 (:vsplit建立垂直分屏)
- <C-w><dir> : dir就是方向,能夠是 hjkl 或是 ←↓↑→ 中的一個,其用來切換分屏。
- <C-w>_ (或 <C-w>|) : 最大化尺寸 (<C-w>| 垂直分屏)
- <C-w>+ (或 <C-w>-) : 增長尺寸
![]()
結束語插件
學習Vim就像學彈鋼琴同樣,一旦學會,受益無窮。