若是玩過知乎都會被那些大 V 洗腦說 Vim 好用,Vim 牛逼,也是由於這個緣由纔開始用 Vim 的,也想着總有一天會變成 Vim 高級玩家。編程
那這篇文章會教你怎麼用 Vim 麼?會,可是我不想像官方手冊去說,只想提供一個學習 Vim 的學習方法和基本的指令。我更但願這篇文章作到的是 「授人以漁」。我不想寫這種像 Vim 官方手冊那種文章,由於複製粘貼全部指令過來,你也不會記多少的,更不會記住。服務器
在說基本指令前,我想說下我如今是怎麼用 Vim 的。如今網上有不少文章都是教你怎麼配置好一個好看的 Vim 環境,裝各類 Plugin,主題,配色什麼的。我在 Mac 上也裝過,像下面這樣的。markdown
有高亮麼?有。有自動補全麼?有。好用麼?很差用,難用得一B。固然若是用 SSH 你能夠在服務器搞成這個樣子,畢竟服務器只能用命令行嘛。app
因此如今個人編程環境都是 JetBarins IDE + Vim Emulator。編輯器
能夠在 Tool 下能夠打開 Vim 模擬器。學習
我但願入門 Vim 的人,除非你在服務器上工做,不然不要用命令行或者 Vim 的編輯器,由於舒服地開發纔是王道。那 Vim 不舒服呀,不,有了 Vim 再加上 JetBrains 的提供的 IDE 會讓效率更快,能夠基本不怎麼用觸控板了。spa
Vim 模擬器開啓後你可能會遇到下面幾種模式:命令行
Normal 模式:開啓 Vim 模擬器後立馬進入的模式。在這個模式下咱們能夠輸入指令(後面會說)來插入,刪除,移動,或者作其它操做。3d
Insert 模式:Normal 模式下按 i 就能夠進入 Insert 模式,也就是沒有 Vim 模擬器時候的樣子,通常這個模式下就是純寫代碼啦。code
Visual 模式:Normal 模式下按 v 或者 V 就能夠進入 Visual 模式,這個時候可讓你選中代碼。
爲何會有這麼多的模式呢?直接寫代碼,或者說只要 Insert 模式不就行了?想象一下,若是你沒有鼠標,你怎麼去選中代碼塊呢?因此有了 Visual 模式,而後正常的想法應該是我按某個鍵就能夠經過按上下左右來選中了吧?可是若是隻有 Insert 模式,你按這個鍵只是至關於在寫代碼,因此要一個 Normal 模式來告訴 Vim 如今我不是在寫代碼,我在作別的事(選中,刪除等)。
這些指令都是經常使用的,不經常使用的通常用不到,用到了再查就行了,不用去糾結要不要學完全部指令,背好再去用。由於,等你背好了你仍是不會用,並且發現直接用上的人早就玩順那些基本指令了。
Normal, Visual 模式下
上:j 下:k 左:h 右:l
怎麼記:
左右容易記,由於 h 在最左邊,l 在最右邊。
上下也容易記,由於 j 鍵下面有個突出的地方用來標記鍵盤位置的,而這個突出的東西是在下面的,因此向下,那麼 k 就是向上了。而後每次將手指放在 j 鍵上的時候直接放在突出的地方,而放在 k 鍵上的手指能夠稍微往上一點,這樣就能夠暗示本身哪一個鍵是上,哪一個鍵是下了。
不過用多了就記住了。
這裏要說的是有些人會教你 3j 是向上 3 行,4h 就是向左移 4 個字符,可是我以爲真實狀況用的很少,留個印象就行了。
Normal,Visual 模式下,假如如今有句子,"I love you",如今光標在 o 上。
a
: 在該字符後面 append,"o" 光標移到 o 後面並進入 Insert 模式 i
:在該字符前面 insert,"o" 光標移動 o 前面並進入 Insert 模式 A
: 在該行最後面 append,光標移動到 "u" 後面並進入 Insert 模式 I
: 在該行最前面 insert,光標移動到 "I" 前面並進入 Insert 模式 w
: 指的是跳過一個單詞,光標移動到下一個單詞開頭的位置,這裏會移動到 "y" b
: 指的是跳到該單詞最前面,這裏會移動到 "l" G
: 跳到整個文件的最後一行 gg
: 跳到整個文件的最開始一行
ctrl + d
: 向下翻半頁 ctrl + u
: 向上翻半頁
固然還有翻整頁的,可是我以爲用不到,由於真實翻頁會翻得頭都暈了。這也是我爲何推薦 IDE 的緣由,由於翻頁的時候圖形界面纔是有優點的。可是代碼之間的移動鍵盤纔是有優點的,由於不用鼠標去精準定位。
dd
: 刪除一行 D
: 從光標的地方直接刪掉整行,如今就會剩下 "I l","o" 以後包括 "o" 都會刪掉。
dit
: 上面的 Hello 會被刪掉,這個指令的意思就是刪除標籤裏的東西 di什麼東西
: 意思就是 delete in 什麼東西,好比 "Hello",這裏 di"
就表示刪除在 "
裏的東西,再如 {Hello}
,di{
就表示刪除在 {}
裏的東西。因此這個指令能夠對不少種括號進行組合。
di<
di"
di'
di{
di(
...
dt什麼東西
:意思就是 delete to 什麼東西,從光標這個位置一直刪除到指定的那個字符,如上面能夠 dt<
就表示從 "l" 開始刪除,直到遇到 "<" 字符。
將上面的 d 換成 c 也是能夠的,不一樣的是作完刪除操做後會進入 Insert 模式。
v
: 選中這個字符,而後能夠經過 hjkl
(前面的上下左右),來擴大選中區域。 V
: 選中當前行,而後能夠經過 hjkl
(前面的上下左右),來擴大選中區域。
y
: 複製選中的代碼 p
: 粘貼最後一次刪除後或者複製後的代碼
別的操做徹底能夠用 IDE 來完成,好比搜索,撤銷等。由於我以爲用 JetBrains IDE 的話這些功能比 Vim 強大得太多了,徹底不必去用 Vim。
是的,會很煩,可是用熟了會快。注意這裏的快是相對的,好比你要找文件中間的某一行就一直 jkhl
來跳轉到那吧。因此,我通常的作法是先觸控板翻到大概的位置,再用快速移動的指令去往要修改的地方。這裏的快是由於不用觸控板去精準定位,用鍵盤來精準定位會快些,僅此而已。
對,就這些就夠了,等入門了以後用到了別的指令再去查就是了,先用起來再說,不要總想着學好了,背好了再去用。不功利地學習都不是學習,記住也很快會忘。
學 Vim 就學 Vim,不要去管別的,學那麼多不如熟悉一個有用。
上面都是我學 Vim 的時候走過的一些彎路,之前總喜歡折騰各類編輯器,IDE,像 Sublime, VS Code, Atom, WebStorm, notepad++ 等等。最終仍是迴歸 JetBarins 全家桶,再配上 Vim 模擬器。
折騰事後其實才發現知乎上面說的,JetBrains 市場如何,VSCode 要戰勝哪一個編輯器什麼的都很幼稚,都是爲了裝 B 而已。沒有一款最好用的 IDE 或者編輯器,只有一款最合適本身的。不一樣場合下應該用不同的,而不是總想着去找編輯器裏的 「銀彈」。
對於個人話,寫項目通常用 WebStorm,簡單的代碼小操做就用 VSCode。其實最後仍是以爲要那麼酷炫的主題都沒用,一個好的代碼提示和代碼分析器真的可讓你不用操那麼多的心,因此這也是爲何我推薦用 JetBrains 的緣由。