# Vim 的操作小技巧

> 

Published: 2011-12-28
URL: https://kaochenlong.com/vim-tips

---

Vim 的操作除了基本的 `hjkl` 之外，快速鍵組合相當多，不過大概有個規則。以下是我自己個人比較常會用到，而且覺得還滿方便的操作小技巧，寫起來幫自己加深記憶，希望也對有需要的朋友有幫助。

&lt;!-- more --&gt;

## 說明

1. &lt;kbd&gt;Enter&lt;/kbd&gt; = 按下 enter 鍵，&lt;kbd&gt;Ctrl&lt;/kbd&gt; = 按下 ctrl 鍵，&lt;kbd&gt;Alt&lt;/kbd&gt; = 按下 alt 鍵，如果是大寫字母例如&lt;kbd&gt;G&lt;/kbd&gt; = shift + g，&lt;kbd&gt;Ctrl&lt;/kbd&gt; &lt;kbd&gt;w&lt;/kbd&gt; &lt;kbd&gt;j&lt;/kbd&gt; = 按著 ctrl 鍵不放，再按下 w，再按下 j
2. 這裡提到的都是 Vim 或是 plugin 內建的指令，如果你不喜歡或覺得難按，可以透過修改`.vimrc`來改變快速鍵的對映
3. 以下指令都是在一般模式(Normal Mode)下使用

## 游標移動

- &lt;kbd&gt;g&lt;/kbd&gt; &lt;kbd&gt;g&lt;/kbd&gt; = 移到整份文件的最上方
- &lt;kbd&gt;G&lt;/kbd&gt; = 移到整份文件的最下方
- &lt;kbd&gt;H&lt;/kbd&gt; = 移到目前螢幕的最上方
- &lt;kbd&gt;L&lt;/kbd&gt; = 移到目前螢幕的最下方
- &lt;kbd&gt;1&lt;/kbd&gt; &lt;kbd&gt;0&lt;/kbd&gt; &lt;kbd&gt;Enter&lt;/kbd&gt; = 游標往下移動 10 行，前面的數字表示行數
- &lt;kbd&gt;:&lt;/kbd&gt; &lt;kbd&gt;1&lt;/kbd&gt; &lt;kbd&gt;0&lt;/kbd&gt; &lt;kbd&gt;Enter&lt;/kbd&gt; = 游標直接移動到第 10 行
- &lt;kbd&gt;{&lt;/kbd&gt;、&lt;kbd&gt;}&lt;/kbd&gt; = 把游標移動到上一個、下一個段落
- &lt;kbd&gt;Ctrl&lt;/kbd&gt; &lt;kbd&gt;w&lt;/kbd&gt; &lt;kbd&gt;j&lt;/kbd&gt; = 把游標往下面的分割視窗移動
- &lt;kbd&gt;Ctrl&lt;/kbd&gt; &lt;kbd&gt;w&lt;/kbd&gt; &lt;kbd&gt;k&lt;/kbd&gt; = 把游標往上面的分割視窗移動
- &lt;kbd&gt;Ctrl&lt;/kbd&gt; &lt;kbd&gt;w&lt;/kbd&gt; &lt;kbd&gt;h&lt;/kbd&gt; = 把游標往左邊的分割視窗移動
- &lt;kbd&gt;Ctrl&lt;/kbd&gt; &lt;kbd&gt;w&lt;/kbd&gt; &lt;kbd&gt;w&lt;/kbd&gt; = 在各個分割視窗間切換

建議可以搭配 [EasyMotion](http://www.vim.org/scripts/script.php?script_id=3526) 更有效率的移動游標

## 搜尋

- &lt;kbd&gt;/&lt;/kbd&gt; = 搜尋
- &lt;kbd&gt;\*&lt;/kbd&gt; = 移往下一個搜尋結果
- &lt;kbd&gt;#&lt;/kbd&gt; = 移往上一個搜尋結果

## 編輯

- &lt;kbd&gt;u&lt;/kbd&gt; = undo，回到上一步
- &lt;kbd&gt;Ctrl&lt;/kbd&gt; &lt;kbd&gt;r&lt;/kbd&gt; = redo，回復 undo
- &lt;kbd&gt;.&lt;/kbd&gt; = 重複上一個步驟
- &lt;kbd&gt;~&lt;/kbd&gt; = 改變英文字母的大小寫，本來大寫會變小寫，小寫會變大寫
- `:m+` = 把目前這一行往下移動一行
- `:m-2` = 把目前這一行往上移動一行
- &lt;kbd&gt;&gt;&lt;/kbd&gt; &lt;kbd&gt;&gt;&lt;/kbd&gt;、&lt;kbd&gt;&lt;&lt;/kbd&gt; &lt;kbd&gt;&lt;&lt;/kbd&gt; = 增加、減少縮排
- &lt;kbd&gt;y&lt;/kbd&gt; &lt;kbd&gt;y&lt;/kbd&gt;或&lt;kbd&gt;Y&lt;/kbd&gt; = 複製游標所在的這一整行
- &lt;kbd&gt;p&lt;/kbd&gt;、&lt;kbd&gt;P&lt;/kbd&gt; = 在游標之後、之前貼上複製的內容
- &lt;kbd&gt;&quot;&lt;/kbd&gt; &lt;kbd&gt;a&lt;/kbd&gt; &lt;kbd&gt;y&lt;/kbd&gt; &lt;kbd&gt;y&lt;/kbd&gt; = 跟&lt;kbd&gt;y&lt;/kbd&gt; &lt;kbd&gt;y&lt;/kbd&gt;有點像，但是是把複製的東西放到`a 暫存器`裡，這個`a`可以用其它 25 個英文字母代替，可以用`:reg`指令把目前的暫存器叫出來看
- &lt;kbd&gt;&quot;&lt;/kbd&gt; &lt;kbd&gt;a&lt;/kbd&gt; &lt;kbd&gt;p&lt;/kbd&gt; = 在游標之後貼上`a 暫存器`裡的內容

## 模式切換

- &lt;kbd&gt;Esc&lt;/kbd&gt; 或 &lt;kbd&gt;Ctrl&lt;/kbd&gt; &lt;kbd&gt;[&lt;/kbd&gt; = 回到命令模式，ESC 是獨立一顆比較好按，但比較遠，如果你不想讓你的手離開打字區的話，可以選用 `CTRL [`，或是在 `~/.vimrc` 裡自訂快速鍵
- &lt;kbd&gt;Ctrl&lt;/kbd&gt; &lt;kbd&gt;v&lt;/kbd&gt; = visual block 模式，可進行像 TextMate 按住 alt 鍵的區塊選取

## NERDTree

- &lt;kbd&gt;B&lt;/kbd&gt; = 叫出 bookmark
- &lt;kbd&gt;C&lt;/kbd&gt; = 把目前游標停留的這個目錄設定為根目錄
- &lt;kbd&gt;p&lt;/kbd&gt; = 把游標移動到上一層目錄
- &lt;kbd&gt;P&lt;/kbd&gt; = 把游標移動到根目錄
- &lt;kbd&gt;J&lt;/kbd&gt; = 把游標移往這個結點的第一個
- &lt;kbd&gt;K&lt;/kbd&gt; = 把游標移往這個結點的最後一個
- &lt;kbd&gt;u&lt;/kbd&gt; = 把樹狀結構的根目錄往上移一層
- &lt;kbd&gt;I&lt;/kbd&gt; = 切換是否顯示隱藏檔案
- &lt;kbd&gt;m&lt;/kbd&gt; = 叫出 NERDTree 的系統選單

## 其它

- `:!` = 執行外部指令，例如 `:!ls` 則是執行 `ls` 指令

## 參考資料

這裡有幾篇我覺得寫得很棒的文章，可以更清楚的知道在 Vim 裡操作的原理

- [Vim Text Objects: The Definitive Guide](http://blog.carbonfive.com/2011/10/17/vim-text-objects-the-definitive-guide/)
- [Learn to speak vim – verbs, nouns, and modifiers!](http://yanpritzker.com/2011/12/16/learn-to-speak-vim-verbs-nouns-and-modifiers/)
- [大家來學 Vim](http://www.study-area.org/tips/vim/index.html)，雖然是將近 10 年前的文件，但很多還是適用

Vim 的快速鍵組合如果用得熟的話，整個編輯的過程中是幾乎可以不動到滑鼠的，不過還是要多練習啦，差不多練到跟吃飯睡覺一樣熟練就可以了。打完收工 :wq

