VIM 命令大全
在vim官網找到的一些命令的合集,自己整理了一下,然後補充了一些例子和說明,喜歡VIM編輯器的童鞋們請收藏。
|h| N h 左 (亦: CTRL-H、 或 鍵) 也可以移動n列,例如:12h
以這個例子說明一下 |h| 代表操作符說明 N 代表數字,h 是操作符. 例子: 12h
後續文檔都是按照這個格式閱讀,你很快就會掌握這些命令,怎樣使用.
文檔中的說明已經很清晰了,有些會補充一些例子,其他的自己邊看邊操作
這樣學習起來會很快 VIM 中左右動作
|h| N h 左 (亦: CTRL-H、<BS> 或 <Left> 鍵) 也可以移動n列,例如:12h|l| N l 右 (亦: <Space> 或 <Right> 鍵) l 向左移動一列, 12l 向左移動 12列|0| 0 至本行第一個字元 (亦: <Home> 鍵)|^| ^ 至本行第一個非空白字元|$| N $ 至本行 (加上 N - 1 後續行) 最後一個字元 (亦: <End> 鍵)|g0| g0 至螢幕行第一個字元 (當行迴繞時和 "0" 不同)|g^| g^ 至螢幕行第一個非空白字元 (當行迴繞時和 "^" 不同)|g$| N g$ 至螢幕行最後一個字元 (當行迴繞時和 "$" 不同)|gm| gm 至螢幕行中點迴繞行: 很長的一行顯示成兩行|bar| N | 至第 N 列 (預設: 1) 輸入: 數字 + | (豎線,跳轉到列數)|f| N f{char} 至右邊第 N 次出現 {char} 之處 (find) 例如: 2ft|F| N F{char} 至左邊第 N 次出現 {char} 之處 (Find)例如: 4Fh|t| N t{char} 至右邊第 N 次出現 {char} 之前 (till) 例如:2tf|T| N T{char} 至左邊第 N 次出現 {char} 之前 (Till) 例如:2Th|;| N ; 重複上次 “f”、“F”、“t” 或 “T” 命令 N 次例如: 2;|,| N , 以相反方向重複上次 “f”、“F”、“t” 或 “T” 命令 N 次例如:2,
上下操作
|k| N k 上移 N 行 (亦: CTRL-P 和 <Up>)向上移動多行: 10k|j| N j 下移 N 行 (亦: CTRL-J、CTRL-N、<NL> 和 <Down>) 向下移動多行:12j|-| N - 上移 N 行,至第一個非空白字元|+| N + 下移 N 行,至第一個非空白字元 (亦: CTRL-M 和 <CR>)|_| N _ 下移 N - 1 行,至第一個非空白字元|G| N G 至第 N 行 (預設: 末行) 第一個非空白字元|gg| N gg 至第 N 行 (預設: 首行) 第一個非空白字元|N%| N % 至全檔案行數百分之 N 處;必須給出 N,否則是 |%| 命令|gk| N gk 上移 N 螢幕行 (迴繞行時不同於 “k”)迴繞行: 很長的一行顯示成兩行|gj| N gj 下移 N 螢幕行 (迴繞行時不同於 "j")
螢幕滾動
|CTRL-e| N CTRL-e 視窗下滾 N 行 (預設: 1) (Extra)|CTRL-d| N CTRL-d 視窗下滾 N 行 (預設: 1/2 視窗) (Downwards)|CTRL-f| N CTRL-f 視窗下滾 N 頁 (Forwards)|CTRL-u| N CTRL-y 視窗上滾 N 行 (預設: 1)|CTRL-u| N CTRL-u 視窗上滾 N 行 (預設: 1/2 視窗) (Upwards)|CTRL-b| N CTRL-b 視窗上滾 N 頁 (Backwards)|z<CR>| z<CR> 或 zt 重畫,當前行置視窗頂端|z.| z. 或 zz 重畫,當前行置視窗正中|z-| z- 或 zb 重畫,當前行置視窗底端以下僅當 ‘wrap’ 選項關閉時生效: wrap 是行太長時,顯示兩行.|zh| N zh 螢幕右滾 N 個字元|zl| N zl 螢幕左滾 N 個字元|zH| N zH 螢幕右滾半個屏寬|zL| N zL 螢幕左滾半個屏寬
文字物件動作
|w| N w 向前 (正向,下同) N 個單詞 (word) |W| N W 向前 N 個空白隔開的字串 |WORD| (WORD)|e| N e 向前至第 N 個單詞詞尾 (end)|E| N E 向前至第 N 個空白隔開的字串 |WORD| 的詞尾 (End)|b| N b 向後 (反向,下同) N 個單詞 (backward)|B| N B 向後至第 N 個空白隔開的字串 |WORD| 的詞尾 (Backward)|ge| N ge 向後至第 N 個單詞詞尾|gE| N gE 向後至第 N 個空白隔開的字串 |WORD| 的詞尾|)| N ) 向前 N 個句子|(| N ( 向後 N 個句子|}| N } 向前 N 個段落|{| N { 向後 N 個段落|]]| N ]] 向前 N 個小節,置於小節的開始|[[| N [[ 向後 N 個小節,置於小節的開始|][| N ][ 向前 N 個小節,置於小節的末尾|[]| N [] 向後 N 個小節,置於小節的末尾|[(| N [( 向後至第 N 個未閉合的 '(' 注意: 這個游標在)括弧處使用|[{| N [{ 向後至第 N 個未閉合的 '{'注意: 這個游標在}括弧處使用|[m| N [m 向後至第 N 個方法 (method) 的開始 (用於 Java)|[M| N [M 向後至第 N 個方法的結束 (Method) (用於 Java)|])| N ]) 向前至第 N 個未閉合的 ')'注意: 這個游標在(括弧處使用|]}| N ]} 向前至第 N 個未閉合的 '}'注意: 這個游標在{括弧處使用|]m| N ]m 向前至第 N 個方法 (method) 的開始 (用於 Java)|]M| N ]M 向前至第 N 個方法的結束 (Method) (用於 Java)|[#| N [# 向後至第 N 個未閉合的 "#if" 或 "#else"|]#| N ]# 向前至第 N 個未閉合的 "#else" 或 "#endif"|[star| N [* 向後至第 N 個注釋的開始 "/*"|]star| N ]* 向前至第 N 個注釋的結束 "*/"
文字物件 (僅適用於可視模式或在操作符後)
|v_aw| N aw 選擇 "一個單詞" (a word)|v_iw| N iw 選擇 "內含單詞" (inner word)|v_aW| N aW 選擇 "一個字串" (WORD)|v_iW| N iW 選擇 "內含字串"|v_as| N as 選擇 "一個句子" (sentence)|v_is| N is 選擇 "內含句子"|v_ap| N ap 選擇 "一個段落" (paragraph)|v_ip| N ip 選擇 "內含段落"|v_ab| N ab 選擇 "一個塊" (從 "[(" 至 "])") (block)|v_ib| N ib 選擇 "內含塊" (從 "[(" 到 "])")|v_aB| N aB 選擇 "一個大塊" (從 "[{" 到 "]}") (Block)|v_iB| N iB 選擇 "內含大塊" (從 "[{" 到 "]}")|v_a>| N a> 選擇 "一個 <> 塊"|v_i>| N i> 選擇 "內含 <> 塊"|v_at| N at 選擇 "一個標籤塊" (從 <aaa> 到 </aaa>) (tag)|v_it| N it 選擇 "內含標籤塊" (從 <aaa> 到 </aaa>)|v_a'| N a' 選擇 "一個單引號字串"|v_i'| N i' 選擇 "內含單引號字串"|v_aquote| N a" 選擇 "一個雙引號字串"|v_iquote| N i" 選擇 "內含雙引號字串"|v_a`| N a` 選擇 "一個反引號字串"|v_i`| N i` 選擇 "內含反引號字串"
插入模式鍵
|insert-index| 插入模式命令的索引,以字母順序排列離開插入模式:|i_<Esc>| <Esc> 結束插入模式,回到普通模式|i_CTRL-C| CTRL-C 同 <Esc>,但不使用縮寫|i_CTRL-O| CTRL-O {command} 執行命令 {command} 並回到插入模式移動:|i_<Up>| 游標鍵 左/右/上/下 移動游標|i_<S-Left>| shift-left/right 左/右 移動一個單詞|i_<S-Up>| shift-up/down 後/前 移動一個滿屏|i_<End>| <End> 游標至本行的末字元之後|i_<Home>| <Home> 游標至本行的首字元之上
插入文本
|a| N a 在游標後添加文本 (N 次)|A| N A 在行末添加文本 (N 次)|i| N i 在游標前插入文本 (N 次) (亦: <Insert>)|I| N I 在當前行的第一個非空白字元前插入文本 (N 次)|gI| N gI 在第一欄中插入文本 (N 次)|o| N o 在當前行下方開始新行,添加文本 (N 次)|O| N O 在當前行上方開始新行,添加文本 (N 次)|:startinsert| :star[tinsert][!] 開始插入模式,當使用 [!] 時添加文本|:startreplace| :startr[eplace][!] 開始替換模式,當使用 [!] 時從行末開始在可視列塊模式下:|v_b_I| I 在所有選中的行之前插入相同的文本|v_b_A| A 在所有選中的行之後添加相同的文本
刪除文本
|x| N x 刪除游標之下及之後的 N 個字元|<Del>| N <Del> 刪除游標之下及之後的 N 個字元|X| N X 刪除游標之前的 N 個字元|d| N d{motion} 刪除動作 {motion} 覆蓋的文本 例如:dw 刪除一個單詞|v_d| {visual}d 刪除高亮的文本|dd| N dd 刪除 N 行|D| N D 刪除至行尾 (及 N - 1 後續行)|J| N J 串連 N - 1 行 (刪除 <EOL>)|v_J| {visual}J 串連高亮的行|gJ| N gJ 同 "J",但不插入空格|v_gJ| {visual}gJ 同 "{visual}J",但不插入空格|:d| :[range]d [x] 刪除範圍 [range] 覆蓋的行 [存入寄存器 x]
撤銷/重做命令
|u| N u 撤銷最近的 N 此改動|CTRL-R| N CTRL-R 重做最近的 N 個被撤銷的改動|U| U 恢複最近被改動的行
複製與移動文本
|quote| "{char} 在接下來的刪除、抽出或放置命令中使用寄存器 {char}|:reg| :reg 顯示所有寄存器的內容|:reg| :reg {arg} 顯示寄存器 {arg} 的內容|y| N y{motion} 將動作 {motion} 覆蓋的文本抽出至一個寄存器|v_y| {visual}y 將高亮的文本抽出至一個寄存器|yy| N yy 抽出 N 行至寄存器 人話:複製一行或多行|Y| N Y 抽出 N 行至寄存器人話:複製一行或多行|p| N p 將一個寄存器的內容放置在游標位置後 (N 次) 人話:粘貼|P| N P 將一個寄存器的內容放置在游標位置前 (N 次)|]p| N ]p 同 p,但調整當前行的縮排|[p| N [p 同 P,但調整當前行的縮排|gp| N gp 同 p,但將游標留在新文本之後|gP| N gP 同 P,但將游標留在新文本之後
重複命令
|.| N . 重複最近一次改動 (將計數改為 N)|q| q{a-z} 記錄鍵入的字元,存入寄存器 {a-z}|q| q{A-Z} 記錄鍵入的字元,添加進寄存器 {a-z}|q| q 終止記錄|@| N @{a-z} 執行寄存器 {a-z} 的內容 (N 次)|@@| N @@ 重複上次的 @{a-z} 操作 (N 次)|:@| :@{a-z} 將寄存器 {a-z} 的內容當作 Ex 命令來執行|:@@| :@@ 重複上次的 :@{a-z} 操作|:g| :[range]g[lobal]/{pattern}/[cmd] 對 [range] 內所有匹配 {pattern} 的行執行 Ex 命令 [cmd] (預設: ":p")|:g| :[range]g[lobal]!/{pattern}/[cmd] 對 [range] 內所有_不_匹配 {pattern} 的行執行 Ex 命令 [cmd] (預設: ":p")|:so| :so[urce] {file} 從檔案 {file} 讀入 Ex 命令|:so| :so[urce]! {file} 從檔案 {file} 讀入 Vim 命令|:sl| :sl[eep] [sec] 在 [sec] 秒鐘內任何事也不做|gs| N gs 睡 N 秒 (goto sleep)
可視模式
|visual-index| 可視模式命令列表。|v| v 以字元方式開始高亮 } 移動游標或使用|V| V 以行方式開始高亮 } 操作符來作用於|CTRL-V| CTRL-V 以列塊方式開始高亮 } 高亮的文本|v_o| o 交換高亮地區的開始處和游標位置|gv| gv 使用上一次的可視地區開始高亮|v_v| v 以字元方式開始高亮或停止高亮|v_V| V 以行方式開始高亮或停止高亮|v_CTRL-V| CTRL-V 以列塊方式開始高亮或停止高亮
寫入和退出
|:w| :[range]w[rite][!] 寫入當前檔案|:w_f| :[range]w[rite] {file} 寫入至檔案 {file},除非其已經存在|:w_f| :[range]w[rite]! {file} 寫入至檔案 {file}。覆蓋已存在的檔案|:w_a| :[range]w[rite][!] >> 添加至當前檔案|:w_a| :[range]w[rite][!] >> {file} 添加至檔案 {file}|:w_c| :[range]w[rite] !{cmd} 執行命令 {cmd},以 [range] 限定的行作 為標準輸入|:up| :[range]up[date][!] 如果當前檔案被改動則寫入|:wall| :wa[ll][!] 寫入所有被改動的緩衝區|:q| :q[uit] 退出當前緩衝區,除非已經做了改動。如果沒有其它 非協助的緩衝區,退出 Vim|:q| :q[uit]! 強制退出當前緩衝區,放棄所有的改動。如果沒有其 它非協助的緩衝區,退出 Vim|:qa| :qa[ll] 退出 Vim,除非作了改動|:qa| :qa[ll]! 退出 Vim,放棄所有改動|:cq| :cq 退出,不寫入檔案並返回錯誤碼|:wq| :wq[!] 寫入當前檔案並退出|:wq| :wq[!] {file} 寫入檔案 {file} 並退出|:xit| :x[it][!] [file] 同 ":wq" 但是僅當有改動時寫入|ZZ| ZZ 同 ":x"|ZQ| ZQ 同 ":q!"|:xall| :xa[ll][!] 或 :wqall[!] 寫入所有改動的緩衝區並退出|:stop| :st[op][!] 掛起 Vim 或開始一個新 shell。如果置位了 'aw' 選項並沒有給出 [!] 則寫入緩衝區|CTRL-Z| CTRL-Z 同 ":stop"
摺疊
|'foldmethod'| set foldmethod=manual 手動摺疊 set foldmethod=indent 按照縮排摺疊 set foldmethod=expr 按照運算式 'foldexpr' 摺疊 set foldmethod=syntax 按照文法地區摺疊 set foldmethod=marker 按照標誌 'foldmarker' 摺疊|zf| zf{motion} 操作符: 手動定義一個摺疊 (fold)|:fold| :{range}fold 將範圍 {range} 包括的行定義為一個摺疊|zd| zd 刪除游標下的一個摺疊 (delete)|zD| zD 刪除游標下的所有摺疊 (Delete)|zo| zo 開啟游標下的摺疊 (open)|zO| zO 開啟游標下的所有摺疊 (Open)|zc| zc 關閉游標下的一個摺疊 (close)|zC| zC 關閉游標下的所有摺疊 (Close)|zm| zm 折起更多: 減少 'foldlevel' (more)|zM| zM 關閉所有摺疊: 置 'foldlevel' 為 0|zr| zr 減少摺疊: 增加 'foldlevel' (reduce)|zR| zR 開啟所有摺疊: 置 'foldlevel' 為最大|zn| zn 不摺疊: 複位 'foldenable' (none)|zN| zN 正常摺疊: 置位 'foldenable' (Normal)|zi| zi 反轉 'foldenable' (invert)
多視窗命令
|CTRL-W_s| CTRL-W s 或 :split 將視窗分割成兩部分 (split)|:split_f| :split {file} 分隔視窗並在其中一個編輯 {file}|:vsplit| :vsplit {file} 同上,但垂直分割|:vertical| :vertical {cmd} 使命令 {cmd} 垂直分割|:sfind| :sf[ind] {file} 分割視窗,從 {path} 中找到檔案 {file} 並編輯之|CTRL-W_]| CTRL-W ] 分割視窗並跳轉到游標下的標籤|CTRL-W_f| CTRL-W f 分割視窗並編輯游標下的檔案名稱 (file)|CTRL-W_^| CTRL-W ^ 分割視窗並編輯輪換檔案|CTRL-W_n| CTRL-W n 或 :new 建立新空白視窗 (new)|CTRL-W_q| CTRL-W q 或 :q[uit] 退出編輯並關閉視窗 (quit)|CTRL-W_c| CTRL-W c 或 :cl[ose] 隱藏當前緩衝區並關閉視窗 (close)|CTRL-W_o| CTRL-W o 或 :on[ly] 使當前視窗成為唯一視窗 (only)|CTRL-W_j| CTRL-W j 跳轉到下方視窗|CTRL-W_k| CTRL-W k 跳轉到上方視窗|CTRL-W_CTRL-W| CTRL-W CTRL-W 移動游標至下方視窗 (折轉) (Wrap)|CTRL-W_W| CTRL-W W 移動游標至上方視窗 (折轉) (wrap)|CTRL-W_t| CTRL-W t 跳轉到頂端視窗 (top)|CTRL-W_b| CTRL-W b 跳轉到底端視窗 (bottom)|CTRL-W_p| CTRL-W p 跳轉到上一次啟用的視窗 (previous)|CTRL-W_r| CTRL-W r 向下旋轉視窗 (rotate)|CTRL-W_R| CTRL-W R 向上旋轉視窗 (Rotate)|CTRL-W_x| CTRL-W x 將當前視窗與下一個視窗對調 (eXchange)|CTRL-W_=| CTRL-W = 使所有視窗等高|CTRL-W_-| CTRL-W - 減少當前視窗高度|CTRL-W_+| CTRL-W + 增加當前視窗高度|CTRL-W__| CTRL-W _ 設定當前視窗高度 (預設: 很高)
改變文本
|~| N ~ 翻轉 N 個字元的大小寫並前進游標|v_~| {visual}~ 翻轉高亮文本的大小寫|v_u| {visual}u 改高亮的文本為小寫|v_U| {visual}U 改高亮的文本為大寫|g~| g~{motion} 將動作 {motion} 覆蓋的文本翻轉大小寫|gu| gu{motion} 將動作 {motion} 覆蓋的文本改為小寫|gU| gU{motion} 將動作 {motion} 覆蓋的文本改為大寫|v_g?| {visual}g? 對高亮的文本做 rot13 編碼|g?| g?{motion} 對動作 {motion} 覆蓋的文本做 rot13 編碼|CTRL-A| N CTRL-A 將游標之上或之後的數值增加 N|CTRL-X| N CTRL-X 將游標之上或之後的數值減少 N
改變文本
|<| N <{motion} 將動作 {motion} 覆蓋的所有行向左移動一個移位寬度|<<| N << 將 N 行向左移動一個移位寬度 例如:ctrl+v 選中n行,>>|>| N >{motion} 將動作 {motion} 覆蓋的所有行向右移動一個移位寬度|>>| N >> 將 N 行向右移動一個移位寬度|gq| N gq{motion} 將動作 {motion} 覆蓋的所有行進行排版到 'textwidth' 寬|:ce| :[range]ce[nter] [width] 將範圍 [range] 包括的行置中對齊|:le| :[range]le[ft] [indent] 將範圍 [range] 中的行靠左對齊 (使用 [indent])|:ri| :[range]ri[ght] [width] 將範圍 [range] 中的行靠右對齊
複雜改動
|!| N !{motion}{command}<CR> 將動作覆蓋的行用命令 {command} 過濾|!!| N !!{command}<CR> 將 N 行用命令 {command} 過濾|v_!| {visual}!{command}<CR> 將高亮的行用命令 {command} 過濾|:range!| :[range]! {command}<CR> 將範圍 [range] 包括的行用命令 {command} 過濾|=| N ={motion} 將動作覆蓋的行用 'equalprg' 過濾|==| N == 將 N 行用 'equalprg' 過濾|v_=| {visual}= 將高亮的行用 'equalprg' 過濾|:s| :[range]s[ubstitute]/{pattern}/{string}/[g][c] 以 {string} 替代範圍 [range] 包括的行中的 {pattern}; 與 [g] 共用,替代所有的出現的 {pattern}; 與 [c] 共用,確認每一次替代|:s| :[range]s[ubstitute] [g][c] 以新的範圍和選項重複上一次的 ":s" 命令|&| & 不帶選項在當前行上重複上一次的 ":s" 命令|:ret| :[range]ret[ab][!] [tabstop] 置 'tabstop' 為新值並依據此值調整空白字元
模式尋找
|/| N /{pattern}[/[search-offset]]<CR> search-offset 這個後面會介紹 向前尋找第 N 次出現 {pattern} 的地方|?| N ?{pattern}[?[search-offset]]<CR> 向後尋找第 N 次出現 {pattern} 的地方|/<CR>| N /<CR> 向前重複上次尋找|?<CR>| N ?<CR> 向後重複上次尋找|n| N n 重複上次尋找|N| N N 相反方向重複上次尋找|star| N * 向前尋找游標下的標識符|#| N # 向後尋找游標下的標識符|gstar| N g* 同 "*",但也尋找部分匹配|g#| N g# 同