全域

  • :help 關鍵字 - 顯示關鍵字的說明
  • :o 檔案名稱 - 開啟檔案名稱
  • :saveas 檔案名稱 - 另存新檔為檔案名稱
  • :close - 關閉目前的視窗
  • K - 開啟游標所在單字的 man 頁面

移動游標

  • h - 向左移動游標
  • j - 向下移動游標
  • k - 向上移動游標
  • l - 向右移動游標
  • H - 跳至視窗頂端
  • M - 跳至視窗中間
  • L - 跳至視窗底端
  • w - 向右跳至字首
  • W - 向右跳至字首 (字中可含標點)
  • e - 向右跳至字尾
  • E - 向右跳至字尾 (字中可含標點)
  • b - 向左跳至字尾
  • B - 向左跳至字尾 (字中可含標點)
  • % - 跳至相對應的字元 (預設支援 ()、{}、[] - 在 Vim 中使用 :h matchpairs 顯示說明)
  • 0 - 跳至行首
  • ^ - 跳至行內第一個非空白字元
  • $ - 跳至行尾
  • g_ - 跳至行內最後一個非空白字元
  • gg - 跳至檔案第一行
  • G - 跳至檔案最後一行
  • 5G - 跳至第 5
  • fx - 跳至字元 x 下次出現的位置
  • tx - 跳至字元 x 下次出現位置的上一個字元
  • Fx - jump to previous occurence of character x
  • Tx - jump to after previous occurence of character x
  • ; - repeat previous f, t, F or T movement
  • , - repeat previous f, t, F or T movement, backwards
  • } - 跳至下一段 (若編輯程式碼則為函式/區塊)
  • { - 跳至上一段 (若編輯程式碼則為函式/區塊)
  • zz - 將游標所在行移到視窗中間
  • Ctrl + b - 向上捲動一個視窗
  • Ctrl + f - 向下捲動一個視窗
  • Ctrl + d - 向下捲動半個視窗
  • Ctrl + u - 向上捲動半個視窗
Tip 移動游標的命令前加數字可指定重複次數,例如 4j 會向下移動 4 行。

插入模式 - 插入/附加文字

  • i - 在游標前開始插入字元
  • I - 在行首開始插入字元
  • a - 在游標後開始插入字元
  • A - 在行尾開始插入字元
  • o - 在該行之下另起一行,開始插入字元
  • O - 在該行之上另起一行,開始插入字元
  • ea - 在該單字字尾開始插入字元
  • Esc - 退出插入模式

編輯

  • r - 變更 (取代) 游標後一個字元
  • J - 將下一行合併至該行
  • gJ - join line below to the current one without space in between
  • cc - 變更 (取代) 整行
  • cw - 從游標位置開始變更 (取代) 單字
  • c$ - 從游標位置開始變更 (取代) 該行
  • s - 刪除游標後字元並進入插入模式
  • S - 刪除整行並進入插入模式 (同 cc)
  • xp - 游標後二個字元位置交換 (刪除並貼上)
  • u - 復原
  • Ctrl + r - 重做
  • . - 再次執行上個命令

選取文字(標示模式)

  • v - 進入標示模式 (字元選取),並執行命令 (如 y - 複製)
  • V - 進入標示模式 (行選取)
  • o - 跳至選取區塊的開頭/結尾
  • Ctrl + v - 進入標示模式 (區塊選取)
  • O - 跳至選取區塊的角落
  • aw - 選取該單字
  • ab - 選取 () 及所包圍的區塊
  • aB - 選取 {} 及所包圍的區塊
  • ib - 選取 () 內的區塊
  • iB - 選取 {} 內的區塊
  • Esc - 退出標示模式

標示模式命令

  • > - 向右縮排
  • < - 向左縮排
  • y - 複製
  • d - 剪下
  • ~ - 切換大小寫

暫存區

  • :reg - 顯示暫存區內容
  • "xy - 複製到暫存區 x
  • "xp - 貼上暫存區 x 的內容
Tip 暫存區儲存在 ~/.viminfo,且會在 Vim 下次啟動時重新載入。
Tip 暫存區 0 一律會保存上一次複製的內容。

標記

  • :marks - 顯示標記清單
  • ma - 將目前的位置設為標記 a
  • `a - 跳至標記 a
  • y`a - 複製游標目前位置到標記 a 位置的字元

巨集

  • qa - 錄製巨集 a
  • q - 停止錄製巨集
  • @a - 執行巨集 a
  • @@ - 執行上一次執行的巨集

剪下、複製、貼上

  • yy - 複製該行
  • 2yy - 複製 2
  • yw - 複製該單字
  • y$ - 複製游標位置到行尾的區塊
  • p - 在游標後貼上
  • P - 在游標前貼上
  • dd - 剪下 (刪除) 該行
  • 2dd - 剪下 (刪除) 2
  • dw - 剪下 (刪除) 該單字
  • D - 剪下 (刪除) 游標位置到行尾的區塊
  • d$ - 剪下 (刪除) 游標位置到行尾的區塊 (同 D)
  • x - 剪下 (刪除) 該單字

退出

  • :w - 儲存
  • :w !sudo tee % - 以 sudo 儲存目前的檔案
  • :wq or :x or ZZ - 儲存並退出
  • :q - 退出 (修改未儲存時警告)
  • :q! or ZQ - 強制退出 (不儲存)
  • :wqa - write (save) and quit on all tabs

尋找、取代

  • /pattern - 尋找 pattern
  • ?pattern - 向上尋找 pattern
  • \vpattern - pattern 中的非英數字元皆視為正規表示式的特殊字元 (不需跳脫字元)
  • n - 尋找下一個
  • N - 尋找上一個
  • :%s/old/new/g - 全部取代
  • :%s/old/new/gc - 逐項取代
  • :noh - 移除搜尋結果的標示

多檔案搜尋

  • :vimgrep /pattern/ {file} - 在多個檔案中搜尋 pattern
e.g. :vimgrep /foo/ **/*
  • :cn - 跳至下一個
  • :cp - 跳至上一個
  • :copen - 開啟搜尋結果列表視窗

多檔案編輯

  • :e 檔案名稱 - 在新緩衝區開啟檔案名稱
  • :bnext or :bn - 切換到下個緩衝區
  • :bprev or :bp - 切換到上個緩衝區
  • :bd - 刪除緩衝區 (關閉檔案)
  • :ls - 列出所有開啟的緩衝區
  • :sp 檔案名稱 - 在新緩衝區開啟檔案名稱並水平分割視窗
  • :vsp 檔案名稱 - 在新緩衝區開啟檔案名稱並垂直分割視窗
  • Ctrl + ws - 水平分割視窗
  • Ctrl + ww - 切換視窗
  • Ctrl + wq - 關閉視窗
  • Ctrl + wv - 垂直分割視窗
  • Ctrl + wh - 游標跳至左視窗 (垂直分割)
  • Ctrl + wl - 游標跳至右視窗 (垂直分割)
  • Ctrl + wj - 游標跳至下視窗 (水平分割)
  • Ctrl + wk - 游標跳至上視窗 (水平分割)

分頁

  • :tabnew or :tabnew 檔案名稱 - 在新分頁開啟檔案名稱
  • Ctrl + wT - 以新分頁開啟視窗
  • gt or :tabnext or :tabn - 切換到下個分頁
  • gT or :tabprev or :tabp - 切換到上個分頁
  • #gt - 切換到第 # 個分頁
  • :tabmove # - 將分頁移到第 # 位 (從 0 算起)
  • :tabclose or :tabc - 關閉該分頁及其中所有視窗
  • :tabonly or :tabo - 關閉所有其他分頁
  • :tabdo command - 對所有分頁執行命令 (例如 :tabdo q 會關閉所有分頁)