Vim入門指南

初衷

俗話說工欲善其事,必先利其器,對於程序員來講,若是要高效的編碼,那麼掌握某類文本編輯器的快捷鍵是很是有必要的(固然手速快打字快也算 😅)。 在文本編輯器領域內,vimemacs是繞不過的兩座高山,業內有一個說法是vim是編輯器之神,emacs是神的編輯器,這句話大致是說 vim 在編輯器的操控基本是無敵的存在,而可以操控 emacs 的都是大神般的存在,網上面關於 emacs 有不少段子,好比使用 emacs 煮咖啡等,實際上 emacs 是能夠外接 lisp 語言來開發,因此相對 vim 來講能夠作更多非文本編輯器的事情。git

心理準備

學習任何一門技能都會存在學習曲線,不一樣的技能學習曲線不盡相同,不過學習 vim 的朋友,看着下面這個 90° 的學習曲線,可能須要喝杯 82 年的咖啡壓壓驚 😂。 程序員

vim學習曲線
不過,毛主席都說過, 任何敵人都是紙老虎,因此咱們對於學習 vim 在作好充分心理準備的狀況下,也不必太打消本身的信心,小時候咱們學賣油翁時也學過最樸素的道理: 無他,但手熟爾,只要訓練充分得當,咱們也能夠像賣油翁將油輕鬆倒過銅錢般掌握好 vim,因此,咱們作好了玩 hard 模式的心理準備就能夠上路啦。

小試牛刀

磨刀霍霍

要把玩 vim 首先要進入到 vim 的normal模式,才能拿到它那把鋒利的道具,進入normal模式的方式有兩個,一個是按住esc鍵,一個是按住ctrl+[鍵。github

normal模式示例

手柄移動

玩過電腦遊戲的朋友們應該都有這樣的經歷,須要控制遊戲人物上下左右移動,通常是 wasd,vim 也同樣,假設咱們使用 vim 來閱讀源碼,這種場景通常會使用normal模式,在normal模式下對應上下左右的快捷鍵分別是kjhl,這是使用 vim 時最基本的快捷鍵,是否是特別容易?另外咱們在瀏覽代碼時,下移一行的需求基本是最頻繁的,因此這裏猜想 vim 把j鍵用做下移,另外j鍵上有一個小突起特別適合快速起步,從這裏看出 vim 的鍵設置實際上是很是人性化的。 chrome

小試牛刀

砍瓜切菜

不少時候咱們在寫完第一版程序,作自我代碼 review 時,常常會有刪除一行或者多行的需求,若是咱們使用notepad或者sublime相似的文本編輯器,須要先選中多行而後按退格鍵作刪除,在使用 vim 時,咱們只要保證咱們在normal模式下,連續敲擊dd鍵,便可刪除當前光標所處的行,d2d便可刪除當前行和其下一行,這樣簡單推理dnd就能夠刪除從當前行往下的n-1行啦,是否是很方便很簡單?vim

落地爲安

在咱們閱讀完代碼,作了相應刪除和編輯以後,最不能忘記的事情就是實時保存了,否則遇到斷電或者系統崩潰就白瞎了,和其餘編輯器使用meta+s鍵保存不同,vim 須要進入命令行模式,進入命令模式的前提是處在normal模式,在normal模式下敲擊:,而後編輯器下方就會出現一個相似終端的小窗口,輸入w便可保存,若是想要保存後立馬關閉當前文檔,輸入x或者wq便可。編輯器

這樣咱們就完成了 vim 三步走,瀏覽-->編輯--->保存,怎麼樣,是否是就和玩了一個小遊戲一局通常,看起來難度也沒 90° 那麼大嘛。ide

高級特性

上面一節咱們講了咱們平時使用文本編輯器的基本三步,如今咱們來看看 vim 爲何被稱爲編輯器之神,它到底有哪些奇淫技巧,操做如此之強。函數

移動

在通常文本編輯器中移動是一件很是痛苦的事情,好比上下左右這種最基本的移動,咱們要離開咱們的打字區域,手指跑到鍵盤的右下角按上下左右鍵來移動,這無疑會讓咱們離開咱們咱們的溫馨區。 可是,在 vim 的normal模式下移動是一個很是有趣的事情,經過 vim 提供的預設快捷鍵,咱們能夠在溫馨區快速方便的移動,徹底停不下來。 在列出 vim 的移動快捷鍵以前,咱們先來普及一下幾個基本的概念:學習

  • 層次:字母-->單詞-->句子-->段落-->函數-->文檔;
  • 首尾:單詞首部-->單詞尾部-->行首-->行尾-->段落首部-->段落尾部-->文檔首部-->文檔尾部;

與這些概念對應的在 vim 中移動的快捷鍵分別是:編碼

  • 字母級別移動:參閱小試牛刀中 vim 手柄的快捷鍵上(k)下(j)左(h)右(l)
  • 單詞級別移動:下一個單詞首部(w),下一個單詞尾部(e),上一個單詞頭部(b),上一個單詞尾部(ge);
  • 行級別移動:行首(0或者^)、行尾($);
  • 段落級別移動:段落首部({),段落尾部(});
  • 文檔級別移動:文檔頭部(gg),文檔尾部(G);

編輯

刪除

刪除單詞以及以上層次通常是一個組合鍵:d+級別鍵

  • 刪除字符:刪除光標前字符(X),刪除光標後字符(x);
  • 刪除單詞:刪除下一個單詞(dw),刪除前一個單詞(db);
  • 刪除行:刪除當前行dd,刪除當前行和下一行(dj),刪除當前行和上一行(dk);
  • 刪除段落:刪除光標後段落(d}),刪除光標前段落(d{);
  • 刪除文檔:刪除光標前文檔(dgg),刪除光標後文檔(dG);

其餘

  • 撤銷:u(undo);
  • 重作:ctrl+r(redo);
  • 複製:複製也相似刪除,是組合鍵,格式爲:y+級別鍵(yank);
  • 粘貼:pP(paste);

快速重複

動做+次數+方向

在熟悉了以上瀏覽和編輯的大部分快捷鍵後,使用 vim 的快速重複模式能夠加速你的操做。 好比瀏覽代碼時你想快速向下移動 4 行,刪除時想快速向右刪除 3 個單詞,若是你只會上面的基礎快捷鍵,那麼你仍是得重複屢次,對於追求高效編碼的你來講,是不能接受的。 vim 提供了一套模式:動做+次數+方向,其中動做可選,對於剛剛的需求來講,只須要使用4jd3w便可完成需求,是否是很是快捷,快來試試吧!

搜索/替換

通常咱們在定位問題時會使用搜索,在重構時會使用到替換。 vim 也提供了強大的搜索/替換功能,而且支持正則搜索和正則替換,灰常強大。 使用 vim 的搜索和替換,咱們須要從 vim 的normal模式進入到命令模式,在normal模式下按:便可進入命令行模式。

  • 搜索:/key(向下搜索關鍵詞 key)或者?key(向上搜索關鍵詞 key);
  • 替換:%s/source/dest/g或者1,10s/source/dest,其中%s表示全文替換,1,10s表示只對 1-10 行作替換,source表示被替換的單詞,dest表示要被替換的單詞,g表示該行若命中多個關鍵詞則會都替換;
  • 正則替換:這算是 vim 替換裏面比較高級的功能,下面咱們來演示一個例子,把文中的morningking hello都替換成hello morningking,咱們須要敲入:%s/\(hello\) \(morningking\)/\2 \1/g,這裏使用到了正則裏面的捕獲分組,是否是很強大?

文件操做

vim 也提供了文件操做,如保存,退出,放棄,前提也是須要進入命令行模式。

  • 保存:w
  • 退出:q
  • 放棄:q!

其中保存退出能夠結合使用,如wq,固然也可使用快捷鍵x一鍵保存退出

其餘

限於篇幅,以上列出了 vim 經常使用的高級特性,固然,vim 的高級特性遠不止如此,好比還可使用宏、摺疊、選擇模式、分屏、書籤、緩衝區等,不過因爲不太經常使用,這裏暫時先不一一列舉,有興趣你們能夠瀏覽參閱裏面包含的連接繼續遨遊;

Live In Vim

相信你們若熟悉和高效的使用了 vim,必定會喜歡在本身習慣的軟件裏去尋找是否有 vim 插件,畢竟 vim 插件可讓你的手指在溫馨區快速切換,逼格閃閃。 下面給你們分享一下我平時使用的軟件裏面的 vim 插件:

參閱

  1. Vim 導圖
  2. Oh my vim
  3. Vim Tutorial
  4. Vim 手冊
相關文章
相關標籤/搜索