---
title: VIM筆記
description: VIM 文字編輯器常用的命令
cover: ../../../assets/images/vim-notes.png
---

[VIM](https://www.vim.org/) 是一個終端機的文字編輯器，在大部分的 Linux 系統都可用。 當你沒辦法用圖形界面操作你的系統很有用來編輯與儲存檔案。

## 安裝

如果還沒安裝就很簡單，例如在 Debian 系統上：

```bash
sudo apt-get install -y vim
```

## 用 VIM 來開啟檔案

為開啟檔案可以在終端機直接執行`vim`命令：

```bash
vim /path/to/file.ext
```

:::note

如果檔案不存在，它以第一次儲存會被自動創造

:::

<div style={{ textAlign: "center" }}>

![VIM Open](../../../assets/images/vim/01-vim-open-file.png)

</div>

## 編輯檔案

檔案開啟後，**您不能直接編輯**：

<div style={{ textAlign: "center" }}>

![VIM Opened](../../../assets/images/vim/02-vim-read-mode.png)

</div>

若想編輯需要先按`i`鍵換到**插入**模式（`--插入--`在下面出現）：

<div style={{ textAlign: "center" }}>

![Insert mode](../../../assets/images/vim/03-insert-mode.png)

</div>

就可以隨意編輯檔案：

<div style={{ textAlign: "center" }}>

![Text inserted](../../../assets/images/vim/04-text-inserted.png)

</div>

編輯完成後，為了退出插入模式按`Esc`鍵。下面`--插入--`消失，也不能編輯了：

<div style={{ textAlign: "center" }}>

![Echap pressed](../../../assets/images/vim/05-echap-pressed.png)

</div>

按`Esc`鍵後可能會想要關閉檔案，儲存，二者，還是打錯就關閉而不儲存。您那時候會執行一個命令。

## 執行命令

按`Esc`鍵退出插入模式後可以將編輯檔案執行命令。

比如說，儲存、儲存而關閉、導覽ㄧ列、複製ㄧ列、貼上等等。

為了執行命令，退出插入模式後會先按`:`鍵再打命令。

### 儲存而關閉

為了儲存而關閉：`wq`

<div style={{ textAlign: "center" }}>

![wq command](../../../assets/images/vim/06-wq-command.png)

</div>

然後您可以顯示檔案的內容以確認儲存好了：

<div style={{ textAlign: "center" }}>

![cat saved file](../../../assets/images/vim/07-cat-saved-file.png)

</div>

### 儲存而不關閉

為了儲存而不關閉：`:w`

若執行`vim test.txt`再開啟檔案而用插入模式來增加新內容，然後按`Esc`鍵換到命令模式：

<div style={{ textAlign: "center" }}>

![w before](../../../assets/images/vim/08-w-before.png)

</div>

然後按`Enter`鍵：

<div style={{ textAlign: "center" }}>

![w after](../../../assets/images/vim/09-w-after.png)

</div>

接下來可以換到插入模式以繼續編輯檔案。

### 關閉而不儲存

為了直接關閉 VIM 而不儲存：`:q!`

### 導覽ㄧ列

為了直接導覽ㄧ咧`XXX`，按`:`鍵而打列號：`:XXX`

### 啟用列號顯示

如果界面的左邊沒有顯示列號就可以用`:set nu`來啟用。

### 啟用語法色彩

語法色彩應該是預設啟用的。VIM 包含數以百計程式語言和檔案類型的支援。

但如果沒有語法色彩就可以用`:syn on`命令來啟用。

然後也可以套用色彩佈景主題，例如`:colo desert`。

## 剪下/複製/貼上

命令模式也可以剪下，複製，貼上列，那不用按`:`鍵。

按`d`鍵兩次（所以`dd`）就可以剪下ㄧ列。

按`y`鍵兩次（所以`yy`）就可以複製ㄧ列。

接下來，貼上列的話可以直接按`p`鍵。

:::note

一次剪下或複製多列，打`dd`或`yy`之前就可以先打一個數字。

例如，我們把檔案的 2 號跟 3 號列要複製。導覽第一列（2 號）：

<div style={{ textAlign: "center" }}>

![before copying 2 lines](../../../assets/images/vim/10-line-2-before-yy.png)

</div>

接下來我們先打`2yy`（因為我們想要複製**兩列**），再導覽 3 號然後按`p`鍵：

<div style={{ textAlign: "center" }}>

![after paste](../../../assets/images/vim/11-after-paste.png)

</div>

我們可以看到貼上到了 3 號的下面，沒有取代原來的列。

:::

## 搜尋文字

為了搜尋文字，我們不用`:`，我們會用`/`跟搜尋文字。按`Enter`鍵就會開啟搜尋：

<div style={{ textAlign: "center" }}>

![search text](../../../assets/images/vim/12-search-text.png)

</div>

VIM 自動讓我們導覽第一個結果。如果有多結果就可以按`n`鍵導覽下一個。VIM 到檔案的結尾會再顯示第一個結果而在視窗下面通知我們：

<div style={{ textAlign: "center" }}>

![bottom reached](../../../assets/images/vim/13-bottom-reached.png)

</div>

為了導覽上一個結果可以按`N`（大寫）。
