---
# System prepended metadata

title: 我最喜歡的文字編輯器 — Vim

---

{%hackmd BJrTq20hE %}

<style>
    h2 { color: #fc0 !important; }
    h3 { color: #8f0 !important; }
    h4 { color: #aaf !important; }
</style>

# 我最喜歡的文字編輯器 — Vim \# 01

## 前言

我相信如果你是軟體工程師，或是即將成為軟體工程師的人，可能都曾有被困在 Vim 這個文字編輯器裡出不來的經驗。在 Stack Overflow 上甚至有以 `How do I exit Vim?` 為題的討論串。

雖然在剛開始接觸 Vim 的時候，你可能會有很多不太好的印象。這到底是什麼外星人才會用的編輯器，明明就很難用。但相信我，只要習慣它的操作，你一定會愛上它的，擺脫滑鼠，人鍵合一的感覺真的很爽！

## 進入正題

第一，醜話說在前頭，由於 Vim 的學習曲線相當高，所以我希望你已經有盲打的能力，再開始學習。不然的話，下面的文章看看就好，練習不看鍵盤也能打字才是更重要的。

第二，也是由於 Vim 的學習曲線相當高，所以我不建議你用終端機上的 Vim 來練習。我們用 Visual Studio Code 的 Vim 插件來學習，反正對我們剛接觸的人來說，操作都差不多，介面還比較友善。

我不敢保證在學會下面所有的操作之後，你就可以自由自在飛快地穿梭在程式碼當中。 Vim 的操作更像是一種肌肉記憶，只有不斷地練習，才可以幾乎不經思考，快速達到你想要的目的。

## Vim 的操作
前面說了那麼多，終於要進到 Vim 的教學啦！

首先，就我個人的理解， Vim 有五大種操作模式，分別為：
1. 一般模式（ Normal ）
2. 插入模式（ Insert ）
3. 可視模式（ Visual ）
4. 命令模式（ Command ）
5. 搜尋模式（ Search ）

其中，在一般模式下可以做非常多事情，所以下面會大篇幅地介紹一般模式。

## 一般模式（ Normal ）
所有模式之間的切換，都會經過一般模式，所以一定要學會怎麼進入一般模式。正常進入一般模式的方法有兩種：
1. 按下 `esc` 
2. 按下 `control + [` （這個按鍵組合記為`<C-[>`）  

在 Visual Studio Code 的 Vim 插件一般模式下，你的游標應該會是粗粗一條，直接蓋在字上。像下圖中`main`上的`m`一樣。

![image](https://hackmd.io/_uploads/HJT3ElkkR.png)


有些人覺得用 `<C-[>` 的方式進入一般模式，可以讓左手移動的幅度最小，更有效率。甚至有高手會把 `control` 鍵給 map 到原本的 `caps lock` 鍵上面（畢竟那顆按鍵應該是整把鍵盤上最雞肋的鍵之一）。但我個人還是喜歡簡單粗暴地按下 `esc` 鍵就好。

在一般模式下，你可以做非常多事情，例如上下左右，移動到文件的第一行、最後一行，以及剪下、貼上等等操作。接下來我將介紹我在一般模式下最常使用的操作們：

- `k`: 移動到上一行
- `j`: 移動到下一行
- `h`: 向左移動一個字元
- `l`: 向右移動一個字元

雖然說上下左右的操作也可以透過方向鍵來操作，但既然你都要學 Vim 了，為什麼不適應一下呢？方向鍵跟你鍵盤中位的距離大概有十萬八千里吧，你的右手移動到方向鍵之後，回來還要重新定位，不如就用 hjkl 鍵來操作。

光靠 `h` 和 `l` 來左右移動還是有點太慢了，你可能需要一次移動一個單字，或是移動到行首、行末：

- `b`: 移動到當前單字的開頭，如果已經在開頭了，就移動到上一個單字的開頭
- `w`: 移動到下一個單字的開頭
- `e`: 移動到當前單字的結尾，如果已經在結尾了，就移動到下一個單字的結尾
- `0`: 移動到行首
- `^`: 移動到這一行第一個非空白字元
- `$`: 移動到行末

你還可能需要把游標一次移動好幾行，或是好幾個單字，這時候你可以在前面冠上數字。以下只是舉例：

- `5k`: 向上移動 5 行
- `8e`: 向後移動 8 個單字

如果你還是覺得太慢，我們可以滾動半個畫面或一整個畫面：

- `<C-u>`: 向上移動半個畫面 （用 up 記）
- `<C-d>`: 向下移動半個畫面 （用 down 記）
- `<C-b>`: 向上移動整個畫面 （用 back 記）
- `<C-f>`: 向下移動整個畫面 （用 front 記）

這些可能還不夠，你還有可能需要直接移動到整份文件的最開頭或結尾：

- `gg`: 移動到整份文件的第一個字元
- `G`: 移動到整份文件的最後一行的第一個字元

---

好的，介紹完了 Vim 一般模式下的我會常用的操作。希望你會喜歡，並且常常練習。