iT邦幫忙

2025 iThome 鐵人賽

DAY 23
2
Software Development

上班族的命令列 (CLI) 生存手冊系列 第 23

Day23 進階觀念篇:所到之處,都聽到你的名子 vim

  • 分享至 

  • xImage
  •  

嗨!歡迎回到上班族的命令列生存手冊。終於要來講那個編輯器:vim,一個進去後就不知道怎麼離開的神秘產品。同時,用 vim 的開發者會自己走過來告訴你他用 vim,也是一個很妙的生態。

如果讀者還沒有聽過這個名號,可以嘗試輸入:

$ vim

進入 vim 編輯器。立刻發現不知道怎麼打字,連離開都走不了?「這東西到底哪裡好!!」先別生氣,你可以按下 i 應該就能開始打字了。打字完後按下右上角的 ESC 會發現又回到那個不能打字的狀態。

vim 就是由很多這類的單鍵快速鍵組成,像是 i 就是進入 Insert Mode (插入模式),這時編輯器會變成跟一般的編輯器一樣可以自由的輸入,而按下 ESC 則是回到 Normal Mode(一般模式),輸入方塊變粗,不能自由的輸入。在 Normal Mode 之下,幾乎所有的案件都變成某種的單鍵快速鍵,我們把這種模式叫做 vim keybinding。

由各類的單鍵快速鍵互相排列組合,讓輸入的速度上升是 vim 這個編輯器的特色。

「讓我離開!(激動)」,離開的方式有兩種,第一個是回到 Normal Mode,接著輸入:

:q

按下 Enter 後就能離開啦,但如果你有打了字應該會有錯誤,這個時候給他一個驚嘆號代表真的很想走即可。

:q!

除了這個方法以外,還有一個做法也是在 Normal Mode 之下按下鍵盤的 ZQ (是大寫!有大小寫的差異。) 就能離開啦。

要存檔,則是在 Normal Mode 後輸入:

:wq

或者是用大寫的 ZZ,就可以存檔。

(這篇文章只要提到 :<指令> 都會預設立場讀者會按下 Enter!)

由上面的說明大概就能了解到這是一個學習曲線不算低的東西,剛學的時候會覺得何苦?但學會之後會覺得挺有趣的(斯德哥爾摩),希望這樣有提升讀者想要學習的意願。
想學會 vim?讓我們繼續往下看吧。

學習 vim

就跟前往巴西雨林以前,要先打預防針一樣,有些事情想提:

  1. 這畢竟是一個學習命令列的系列文章,vim 的篇幅值得一整篇鐵人賽。🤘🏼
  2. 剛學習除了很痛苦,預期生產力會降低一半
    • 需要時間
    • 需要不斷地練習,就像學習一個樂器
    • 不要期望能在 3 天內把 vim 練得比別的編輯器更有效率
    • 需要大約 2 週時間的苦練,而不是 3 天。

如何預期我能學到什麼

走完這幾篇至少可以讓讀者開啟 vim 時能自信地編輯文件,而不是搞不懂怎麼用就離開。

環境準備

筆者有點異於常人,我比較推薦用讀者目前生活上、工作上用的 IDE,並且裝上 vim 的 Plugin 來學。首先,完全不用因為用了 vim keybinding 而不用 IDE 提供的好用功能,不用因噎廢食;二來是更接近日常使用,提升接觸的時間。
最後再回過來操作命令列裡頭的 vim 完全沒有問題。

例如筆者常用的 Android Studio 和 JetBrains 相關的 IDE,就有提供 ideaVim 外掛程式。VSCode、Cursor 等也能安裝 Vim 外掛。
Xcode 則直接內建了 vim 模式可以開啟,正在打字的 Obsidian 也有 vim 模式,建議可以直接從這些地方開始學習。

我準備好了!

「前面的免責聲明也太長了吧?」就讓我們開始吧!!
首先一開始最重要的,就是什麼都不要做!先看完下面這部分:

模式: Normal vs Insert Mode

預設一開始都會在 Normal Mode。

  • 按下 i 進入 Insert Mode (插入模式)
    • Insert Mode 就像記事本的狀態,可以自由的打字
    • vim 會在下方寫 --insert--,ideavim、vscode vim 也會在狀態列出現
    • 打字的光標,會由粗胖的變成一般看到的瘦的
  • 只要按下 ESC 就會回到 Normal Mode
    • Normal Mode 下所有的鍵幾乎都是單鍵快捷鍵
    • 輸入 : 會進入 Command Mode (命令模式)
      • 所以 :q 才會是 quit 離開

Normal Mode 生存指南

所有的指令,都有大小寫之分

Normal Mode 可以做這些事情:

  • i 進入 Insert Mode
  • : 進入 Command Mode
    • :q 離開
    • :g! 忽略變更,直接離開
    • :wq 存檔後離開
  • x 刪除打字光標所在的文字
  • dd:刪除目前這一行

文字被 x 或是 dd,會進入 vim 的暫存器 (Register),就像是剪貼簿,只是 vim 自帶的。
這時只要使用 p 就可以貼上 vim 的剪貼簿的資料。

移動打字光標

在 Normal Mode 可以這樣移動光標:

使用,方向鍵。(←↓↑→)
或是:

  • h:左
  • j:下
  • k:上
  • l:右

less 的移動方式一樣,可以記 j 的圓勾勾在下面,所以是往下。
我們的目標就是習慣上面的使用方式,當有一點肌肉記憶時,就能繼續往下學了。

如果你不是使用 IDE 而是在 vim 本身,vim 也有說明書:

:help <搜尋字串>

vim 裡頭跳出來內部的視窗,操作方式和 less 相同,關閉方式則同樣也是 :q

如何複製東西?

這不適用於 mac 讀者,你們是幸福的。其他平台讀者應該會發現 Ctrl + C 後沒反應,怎麼會這樣?
因為 Ctrl + <按鍵> 對 vim 來說也是快速鍵。

Ctrl + C 是回到 Normal Mode,就跟按下 ESC 鍵一樣。這樣到底該怎麼複製東西呢?請待下回分解。

References


上一篇
Day22 進階觀念篇:一起寫個自動分類檔案的 Script
下一篇
Day24 進階觀念篇:上班族的 vim 生存手冊
系列文
上班族的命令列 (CLI) 生存手冊24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

2
adsfaaron
iT邦新手 5 級 ‧ 2025-10-07 14:46:39

太實用了好需要 vim 教學

感覺好可怕

我要留言

立即登入留言