Global

  • :help keyword - open help for keyword
  • :o file - open file
  • :saveas file - save file as
  • :close - close current pane

移動游標

  • h - 向左移動游標
  • j - 向下移動游標
  • k - 向上移動游標
  • l - 向右移動游標
  • H - move to top of screen
  • M - move to middle of screen
  • L - move to bottom of screen
  • w - 向右跳至字首
  • W - 向右跳至字首 (字中可含標點)
  • e - 向右跳至字尾
  • E - 向右跳至字尾 (字中可含標點)
  • b - 向左跳至字尾
  • B - 向左跳至字尾 (字中可含標點)
  • 0 - 跳至行首
  • ^ - 跳至行內第一個非空白字元
  • $ - 跳至行尾
  • g_ - 跳至行內最後一個非空白字元
  • gg - 跳至檔案第一行
  • G - 跳至檔案最後一行
  • 5G - 跳至第 5 行
  • fx - 跳至字元 x 下次出現的位置
  • tx - 跳至字元 x 下次出現位置的上一個字元
  • } - 跳至下一段 (若編輯程式碼則為函式/區塊)
  • { - 跳至上一段 (若編輯程式碼則為函式/區塊)
  • zz - center cursor on screen
  • Ctrl + b - 向上捲動一個視窗
  • Ctrl + f - 向下捲動一個視窗
  • Ctrl + d - 向下捲動半個視窗
  • Ctrl + u - 向上捲動半個視窗
Tip 移動游標的命令前加數字可指定重複次數,例如 4j 會向下移動 4 行。

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

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

編輯

  • r - 變更 (取代) 游標後一個字元
  • J - 將下一行合併至該行
  • 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 - 剪下
  • ~ - 切換大小寫

Registers

  • :reg - show registers content
  • "xy - yank into register x
  • "xp - paste contents of register x
Tip Registers are being stored in ~/.viminfo, and will be loaded again on next restart of vim.
Tip Register 0 contains always the value of the last yank command.

Marks

  • :marks - list of marks
  • ma - set current position for mark A
  • `a - jump to position of mark A
  • y`a - yank text to position of mark A

Macros

  • qa - record macro a
  • q - stop recording macro
  • @a - run macro a
  • @@ - rerun last run macro

剪下、複製、貼上

  • 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 - 強制退出 (不儲存)

尋找、取代

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

分頁

  • :tabnew or :tabnew file - 在新分頁開啟 filename
  • 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 會關閉所有分頁)