俗話說工欲善其事,必先利其器
,對於程序員來講,若是要高效的編碼,那麼掌握某類文本編輯器的快捷鍵是很是有必要的(固然手速快打字快也算 😅)。 在文本編輯器領域內,vim
和emacs
是繞不過的兩座高山,業內有一個說法是vim是編輯器之神,emacs是神的編輯器
,這句話大致是說 vim 在編輯器的操控基本是無敵的存在,而可以操控 emacs 的都是大神般的存在,網上面關於 emacs 有不少段子,好比使用 emacs 煮咖啡等,實際上 emacs 是能夠外接 lisp 語言來開發,因此相對 vim 來講能夠作更多非文本編輯器的事情。git
學習任何一門技能都會存在學習曲線,不一樣的技能學習曲線不盡相同,不過學習 vim 的朋友,看着下面這個 90° 的學習曲線,可能須要喝杯 82 年的咖啡壓壓驚 😂。 程序員
不過,毛主席都說過,任何敵人都是紙老虎
,因此咱們對於學習 vim 在作好充分心理準備的狀況下,也不必太打消本身的信心,小時候咱們學賣油翁時也學過最樸素的道理:
無他,但手熟爾
,只要訓練充分得當,咱們也能夠像賣油翁將油輕鬆倒過銅錢般掌握好 vim,因此,咱們作好了玩 hard 模式的心理準備就能夠上路啦。
要把玩 vim 首先要進入到 vim 的normal模式
,才能拿到它那把鋒利的道具,進入normal
模式的方式有兩個,一個是按住esc
鍵,一個是按住ctrl+[
鍵。github
玩過電腦遊戲的朋友們應該都有這樣的經歷,須要控制遊戲人物上下左右移動,通常是 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 中移動的快捷鍵分別是:編碼
上(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);p
和P
(paste);
動做+次數+方向
在熟悉了以上瀏覽和編輯的大部分快捷鍵後,使用 vim 的快速重複模式能夠加速你的操做。 好比瀏覽代碼時你想快速向下移動 4 行,刪除時想快速向右刪除 3 個單詞,若是你只會上面的基礎快捷鍵,那麼你仍是得重複屢次,對於追求高效編碼的你來講,是不能接受的。 vim 提供了一套模式:動做+次數+方向
,其中動做
可選,對於剛剛的需求來講,只須要使用4j
和d3w
便可完成需求,是否是很是快捷,快來試試吧!
通常咱們在定位問題時會使用搜索,在重構時會使用到替換。 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
表示該行若命中多個關鍵詞則會都替換;morningking hello
都替換成hello morningking
,咱們須要敲入:%s/\(hello\) \(morningking\)/\2 \1/g
,這裏使用到了正則裏面的捕獲分組,是否是很強大?vim 也提供了文件操做,如保存,退出,放棄,前提也是須要進入命令行模式。
w
;q
;q!
其中保存退出能夠結合使用,如
wq
,固然也可使用快捷鍵x
一鍵保存退出
限於篇幅,以上列出了 vim 經常使用的高級特性,固然,vim 的高級特性遠不止如此,好比還可使用宏、摺疊、選擇模式、分屏、書籤、緩衝區等,不過因爲不太經常使用,這裏暫時先不一一列舉,有興趣你們能夠瀏覽參閱裏面包含的連接繼續遨遊;
相信你們若熟悉和高效的使用了 vim,必定會喜歡在本身習慣的軟件裏去尋找是否有 vim 插件,畢竟 vim 插件可讓你的手指在溫馨區快速切換,逼格閃閃。 下面給你們分享一下我平時使用的軟件裏面的 vim 插件: