Vim 上手不求人
前言
親愛的猴子們,大家對 Vim 不陌生吧。
Vim 用起來看起來很爽,平時我們沒少背 Vim 的快捷鍵,不過,大家是知道的,背的學的使用太少,很快就從入門到放棄了。
我們還是隻有一臉崇拜的看着 Devops 老哥在 Vim 裏面熟練的敲敲打打。
不過,我最近找到一種學習的方法,不用太多功夫就能把 Vim 玩的 666。
下面,我會將自己學習的辦法和實用小技巧分享給大家,Vim 從入門到上手不求人。
Idea + Vim > 2
在我們日常工作中,會使用 Idea 來寫代碼;
我們如果能在我們熟悉的 Idea 裏面用 Vim 來寫代碼,想必上手肯定是非常快速的,這也是上一篇文章程序猿划水指南中提到過的刻意練習—我們通過在 Idea 安裝 Vim 插件來讓自己從舒適區進入了學習區。
接下來,我們從最簡單的安裝插件開始,給大家分享 Vim 的使用方式和我的心得體會。
安裝插件
Preferences->Plugins->Marketplace->在搜索框輸入 Vim
安裝 IdeaVimExtension 插件以後,可以在~/.ideavimrc
裏面修改 vim 的配置。
這裏有個小提示,我發現 Idea2019.3 版本同時安裝 IdeaVim
和 IdeaVimExtension
在重啓以後會報錯。
如果,你也遇到這種情況了,不要着急,先重啓一次 Idea
,然後先安裝 IdeaVim
然後再安裝 IdeaVimExtension
現在,相信插件已經安好了,在 Idea 重啓的時間裏,我們從最簡單的模式說起吧。
三個模式
衆所周知,Vim 擁有 3 個 Model(模式)分別是:
Normal Model
用於在窗口編輯和移動,也可以進行快捷編輯View Model
用於選擇大塊內容的操作(複製、剪切、刪除、替換)Insert Model
用於插入內容
我們在使用 Vim 編碼時,選擇合適的模式,會達到事半功倍的效果。
下面,我們來看看進入 Vim 以後,我們怎麼移動光標的。
快速移動(Normal Model & View Model)
0
行頭$
行尾,很多操作後面加0
和$
也是一樣的到行頭和行尾j
k
上下h
l
左右 與箭頭一樣可以達到目的。熟練以後,我們就能在高大上的 66 鍵的HHKB上左右騰挪,上下翻飛了。w
b
移動下一個或上一個單詞頭上
(
)
方法(空行)開頭和方法結尾{
}
方法(空行)間上下移動
一開始,大家未免會不太習慣,不過建議大家還是儘量使用 Vim 的快捷鍵進行移動。
當熟練以後,你就可以脫離鼠標的束縛了;有沒有發現突然寫代碼快了很多呢!
剪切操作(Normal Model & View Model)
在 Normal Model
下我們會有很多便捷的剪切&刪除操作,並不需要到Insert Model
中。並且,Vim 中的剪切和刪除是一個用法,只是看你把剪切進去的內容是否粘貼出來。
充分利用 Vim 中各種快捷操作我們可以達到快速編輯內容的目的。
x
: 剪切光標選擇的內容,Normal Model 剪切一個字母,View Model 剪切所有選中內容dw
:剪切一個詞
替換操作(Normal Model & View Model)
- 在
Normal Model
下,按r
然後再按字母,就能用輸入的字母替換選中的字母。 p
粘貼剛剛剪切掉的內容,如果在 View Model 下選擇了部分內容,那實際上是替換了選中內容。
可是我們要替換多個地方怎麼辦呢,不用着急。有 2 種辦法,我們來一個個試試看吧。
- 在 View Model 下選中需要粘貼部分,然後用
y
進行復制。再使用 View Model 選中需要替換部分的時候通過使用"0p
進行替換。其中的0
是數字零,這是內容在 Vim 寄存器中的編號,它和棧結構一樣,先進後出。我們通過改變0
即可以粘貼不同的
Tip::reg
可以查看相關的所有寄存器內容
- 另外一種方式就是在
Normal Model
下按:
進入命令模式,然後在出現的命令行中輸入下列的命令進行替換
:s/from/to - 用from替換當前行第一個to。
:s/from/to/g - 用from替換當前行所有的to。
:a,bs/from/to/g - 用from替換文件a行到b行所有的to。
由於 Idea 的 Vim 插件對於替換支持的並不好,所以,建議直接在選中的內容上使用 Ctrl+C
Ctrl+V
來操作。
編輯操作(Normal Model & Insert Model)
i
: 在光標前插入;I
: 在當前行第一個非空字符前插入;gI
: 在當前行第一列插入;a
: 在光標後插入;A
: 在當前行最後插入;o
: 在下面新建一行插入;O
: 在上面新建一行插入;
行操作(Normal Model)
D
:剪切從光標到行尾;dd
剪切光標所在一行yy
複製光標當前一行dj
/d↑
剪切光標所在和上一行,dk
/d↓
剪切光標所在和下一行。
一些小技巧
操作相關
- 按住 shift 後上下移動會更快
J
可以把下面一行縮進到當前光標一行~
可以改變光標選中部分內容的大小寫u
是撤銷剛剛的操作,Ctrl+r
是重做剛剛撤銷的操作。r+<Enter>
將光標後面內容移動到下面新增的一行- 修改()之間的內容
ci(
,剪切()之間的內容di(
複製()之間的內容yi(
zz
將當前行移動到屏幕中央。
配置相關
- Vim 還要一些 map 指令,大家可以把一些指令組合到一起然後寫到 config 文件中。這樣你也會擁有你獨一無二的 Vim 了(具體功能後面可能會寫專門文章介紹)
nnoremap <space>i<space><esc>
nnoremap <enter>i<end><enter><esc>
上面是我的 map 配置,這樣是爲了在Normal Model
中可以用空格鍵和回車鍵來操作內容空格和換行
其他
- 將你使用的所有 IDE 和編輯器都安裝上 Vim 插件
- 把好用的快捷指令放在一個小記事本上,一旦忘記立馬打開查看,來回幾次你就會記住
- 使用 Vim Vundle 來管理你的 Vim 插件吧,你會發現 Vim 越來越好玩的。
只要堅持就一定會勝利
只需要幾天,也只需要幾個業務,你會突然發現,原來 Vim 用起來也並沒有那麼難。
另一方面,對 Vim 熟練 以後,不管是 Idea 還是 VScode,不管是 Mac 還是 Linux;對於你來說都是它們都是一個 IDE ,無縫切換,渾然天成。
還有,建議大家收藏本網頁,用來操作查詢。
大家發現了其他更好用的操作套路,一定要與我分享,獨樂樂不如衆樂樂嘛。
最後,把我的快捷鍵記事本分享給大家。