VIM Learning
基本操作
一般模式(Normal Mode)
命令 | 說明 |
---|---|
. | 重覆上一個指令 |
i | 在游標位置進入編輯模式 |
I | 在游標行的第一個非空白字元進入編輯模式 |
a | 在游標位置後進入編輯模式 |
A | 在游標行的最後一個字元進入編輯模式 |
o | 向下新增一行,並進入編輯模式 |
O | 向上新增一行,並進入編輯模式 |
cc | 刪除游標行,並進入編輯模式 |
[ESC] | 取消指令或退出編輯模式 |
>> | 向右縮排 |
<< | 向左縮排 |
N>> | 多行縮排,N行向右縮排 |
N<< | 多行縮排,N行向左縮排 |
gg | 移到第一行 |
G | 移到最後一行 |
nG | 移動到第n行 |
0 | 移動到該行最前面 |
^ | 移動到該行最前面非空白第一個字元處 |
$ | 移動到該行最後面 |
n[SPACE] | 向右移動 n 個字元 |
n[ENTER] | 向下移動 n 行 |
yy | 複製游標行 |
yG | 複製游標行到最後一行 |
y1G | 複製游標行到第一行 |
y$ | 複製游標處到最後一個字元 |
y0 | 複製游標處到第一個字元 |
p | 在下一行貼上複製或刪除的內容 |
P | 在上一行貼上複製或刪除的內容 |
dd | 刪除游標行 |
x | 刪除游標所在處之字元。在vim及elvis亦可用 Del 鍵。 |
X | 刪除游標前之字元。不可使用 Backspace 鍵。 |
dw | 刪除游標所在的單字(中文不適用) |
dG | 刪除游標行到最後一行 |
d1G | 刪除游標行到第一行 |
d$ | 刪除游標處到最後一個字元 |
D | 刪除游標處到最後一個字元 |
d0 | 刪除游標處到第一個字元 |
J | 將游標行與下一行合併 |
u | 還原上一步(Undo) |
Ctrl-r | 重做上一步(Redo) |
r | 取代游標所在處之字元。 |
R | 取代字元至按 Esc 為止。 |
Ctrl-f | 往下翻一頁。 |
Ctrl-b | 網上翻一頁。 |
Ctrl-d | 往下翻半頁。 |
Ctrl-u | 網上翻半頁。 |
Ctrl-e | 往下滾一行。 |
Ctrl-y | 網上滾一行。 |
zz | 將游標所在行顯示在畫面中間。 |
zt | 將游標所在行顯示在畫面最上面。 |
zb | 將游標所在行顯示在畫面最下面。 |
== | 對目前行做自動排版。 |
n== | 多行做自動排版。 |
gg=G | 全部自動排版。 |
q: | 顯示命令模式下的歷史紀錄視窗。(Enter或:q可以離開) |
q[紀錄位置] | 記錄鍵盤操作,再按一次q可以離開。 |
@[紀錄位置] | 執行記錄的鍵盤操作。(例:@m,執行記錄在m的鍵盤操作)。 |
命令模式(Command Mode)
命令 | 縮寫 | 說明 |
---|---|---|
:set (no)number | (no)nu | (取消)顯示行號 |
:set (no)ruler | (取消)顯示目前的行號跟列號 | |
:set (no)showcmd | (取消)在狀態列顯示正在輸入的指令 | |
:set (no)autoindent | (no)ai | (取消)按Enter換行時自動縮排 |
:set (no)cindent | (no)ci | (取消)類似C語言的縮排 |
:set (no)smartindent | (no)si | (取消)基於autoindent的一些改進 |
:set (no)wrap | (取消)單行超過螢幕時自動換行顯示 | |
:set (no)cursorline | (取消)高亮顯示游標所在行 | |
:set (no)cursorcolumn | (取消)高亮顯示游標所在該列 | |
:syntax on(off) | 語法高亮 | |
:set tabstop=X | ts | 一個TAB字元佔X個空格的位置。 |
:set shiftwidth=X | sw | 文件的空格數。 |
:set (no)expandtab | (no)et | (取消)將輸入的TAB自動展開成空格。開啟後要輸入TAB,需要Ctrl-V+TAB |
:retab | 在設定expandtab後,用Space取代原本在檔案文件中Tab | |
:set softtabstop=X | sts | 方便在開啟了expandtab後使用退格(backspace)鍵,每次退格將刪除X個空格 |
:set (no)smarttab | (no)sta | (取消)在行首按TAB將加入sw個空格,否則加入ts個空格。 |
:DoMatchParen | 打開配對的括號高亮顯示 | |
:NoMatchParen | 關閉配對的括號高亮顯示 | |
:set (no)ignorecase | (no)ic | 搜尋時不分大小寫 |
:set (no)hlsearch | 將搜尋到的字串高亮顯示 | |
:! | 執行linux 指令,並顯示執行結果 | |
:shell | 直接跳回shell執行linux 指令,輸入exit回vim | |
:w | 存檔 (加 ! 表示強制存檔) | |
:wa | 將所有檔案存檔 | |
:w {filename} | 另存新檔 | |
:wq | 存檔並退出 vi | |
:x | 存檔並退出 vi | |
:e {filename} | 編輯其它檔案 | |
:e! | 還原至檔案編修前的狀態 | |
:r {filename} | 讀入檔案內容,並加到游標行的後面 | |
:n | 切換到下一個開啟的檔案 | |
:N | 切換到上一個開啟的檔案 | |
:files | 列出所有開啟的檔案 | |
:q | 退出vi(加!表示強制退出) | |
:qa | 退出所有檔案(加!表示強制退出) | |
:E | 在目前視窗瀏覽目錄, 當前視窗檔案如有修改過, 將在上方開新視窗, 加!在左方 | |
:cd [路徑] | 改變當前目錄 | |
:pwd | 顯示目前所在路徑 | |
:textwidth | tw | 一行文字的寬度 |
:center | ce | 本行文字置中。(是參考textwidth(tw) 的設定) |
:left | le | 本行文字靠左。(是參考textwidth(tw) 的設定) |
:right | ri | 本行文字靠右。(是參考textwidth(tw) 的設定) |
:%! xxd | 使用十六進位方式編輯檔案 | |
:%! xxd -r | 從十六進位編輯模式返回成文字模式 | |
:r! {shell} | 執行Shell指令,並將結果加在游標行的後面。 | |
:Ve | 在畫面左方開始視窗瀏覽目錄。 | |
:Ve! | 在畫面右方開始視窗瀏覽目錄。 |
插入模式(Insert Mode)
命令 | 說明 |
---|---|
Ctrl+t | 增加縮排 |
Ctrl+d | 減少縮排 |
Ctrl-n或Ctrl-p | 關鍵字自動完成 |
Ctrl-x Ctrl-o | Onmi智慧自動完成 |
Ctrl-r+0 | 在下一行貼上複製或刪除的內容,適用於編輯模式及指令行 |
區塊模式(Visual Mode)
命令 | 說明 |
---|---|
v | 開始字串標記 |
V | 開始行標記 |
Ctrl-v | 開始區塊標記 |
d | 刪除標記的內容 |
y | 複製標記的內容 |
Ctrl-v | 開始區塊標記 |
> | 向右縮排 |
< | 向左縮排 |
N> | 向右縮排N次 |
N< | 向左縮排N次 |
= | 對選取的地方做自動縮排 |
]p | 貼上資料並自動縮排 |
搜尋與取代(Search and Replace)
命令 | 說明 |
---|---|
/{搜尋字串} | 向下搜尋字串 |
/\c{搜尋字串} | 向下搜尋字串,不分大小寫 |
* | 將游標移到字串上,直接按 "*" 也可以做向下搜尋 |
?{搜尋字串} | 向上搜尋字串 |
?\c{搜尋字串} | 向上搜尋字串,不分大小寫 |
n | 繼續下一個搜尋結果 |
N | 繼續上一個搜尋結果 |
:起始行,終止行s/搜尋字串/取代字串/gic | 從第n行到第n行取代字串(後面的g:整行全部,i:不分大小寫,c:詢問) |
:1,$s/搜尋字串/取代字串/gic | 全部取代字串 (後面的 g: 整行全部, i: 不分大小寫, c: 詢問) |
:noh | 消除搜尋文字高亮顯示 |
快速鍵(Hotkey)
命令 | 說明 |
---|---|
nmap | 設定F2打開/關閉行號顯示 |
nmap | 將Ctrl-S對應成儲存檔案(備註:須在Console下先關閉Ctrl-S/Ctrl-Q的終端功能# stty -ixon -ixoff) |
視窗
一般模式(Normal Mode)
命令 | 說明 |
---|---|
Ctrl-w,k/Up | 往上切換視窗 |
Ctrl-w,j/Down | 往下切換視窗 |
Ctrl-w,l/Left | 往左切換視窗 |
Ctrl-w,h/Right | 往右切換視窗 |
Ctrl-w,s | 水平分割視窗 |
Ctrl-w,v | 垂直分割視窗 |
Ctrl-w,q | 關閉目前所在視窗 |
Ctrl-w,T | 將目前的編輯視窗移動至新的分頁 |
Ctrl-w,_ | 將目前的水平分割編輯視窗最大化 |
Ctrl-w,| | 將目前的垂直分割編輯視窗最大化 |
Ctrl-w,= | 將目前分割的視窗重新平均分配大小 |
Ctrl-w,+/- | 調整水平分割視窗大小 |
Ctrl-w,>/< | 調整垂直分割視窗大小 |
命令模式(Command Mode)
命令 | 縮寫 | 說明 |
---|---|---|
:split | sp | 將目前編輯視窗水平分割為二,新的視窗為原有的編輯緩衝區 |
:vsplit | vs/vsp | 將目前編輯視窗垂直分割為二,新的視窗為原有的編輯緩衝區 |
:split {filename} | sp {filename} | 開啟新的水平分割視窗來編輯檔案 |
:vsplit {filename} | vs/vsp {filename} | 開啟新的垂直分割視窗來編輯檔案 |
:new | 開啟新的水平分割視窗,並且開啟新的編輯緩衝區 | |
:vnew | 開啟新的垂直分割視窗,並且開啟新的編輯緩衝區 | |
:new {filename} | 開啟新的水平分割視窗,並在新視窗載入檔案 | |
:vnew {filename} | 開啟新的垂直分割視窗,並在新視窗載入檔案 | |
:only | 僅保留目前視窗 | |
:close | 關閉目前視窗 | |
:topleft split | 從上方左側開啟分割視窗 | |
:botright split | 從下方右側開啟分割視窗 | |
:nmap + <C-W>+ | 直接使用+來調整視窗大小。 | |
:nmap - <C-W>- | 直接使用-來調整視窗大小。 | |
:nmap <Right> <C-W>> | 直接使用向右方向鍵來調整視窗大小。 | |
:nmap <Left> <C-W>< | 直接使用向左方向鍵來調整視窗大小。 | |
:set scrollbind | scb | 讓兩個分割視窗內容同步移動(必須在兩個視窗中都輸入)。 |
:set scrollbind! | scb! | 解開分割視窗內容同步移動。 |
插入模式(Insert Mode)
命令 | 縮寫 | 說明 |
---|
緩衝區(Buffer)
一般模式(Normal Mode)
命令 | 說明 |
---|
命令模式(Command Mode)
命令 | 縮寫 | 說明 |
---|---|---|
:buffers或:files | ls | 查看緩衝區清單(加!顯示隱藏的緩衝區) |
:bnext | bn | 載入下一緩衝區 |
:bprev | bp | 載入前一緩衝區 |
:bfirst | bf | 載入第一個緩衝區 |
:blast | bl | 載入最後一個緩衝區 |
:[n]buffer | 跳至特定編輯緩衝區n | |
:buffer [n] | 跳至特定編輯緩衝區n | |
:[n]buffer | 可強制跳至n之編輯緩衝區 | |
:buffer [file] | 跳到緩衝區名字file | |
:edit [filename] | e | 於目前編輯緩衝區編輯檔案 |
:badd [filename] | 新增其他檔案進編輯緩衝區 | |
:[N1,N2.]bwipeout | bw | 卸載緩衝區N1, N2...(加!強制卸載) |
:bwipeout N1 N2.. | bw | 卸載緩衝區N1, N2...(加!強制卸載) |
插入模式(Insert Mode)
命令 | 縮寫 | 說明 |
---|
其它(Other)
命令 | 說明 |
---|---|
$ vim file1 file2 file3 | 於命令列可同時開啟多檔案載入緩衝區 |
- | 非活動的緩衝區 |
a | 當前活動中緩衝區 |
h | 隱藏的緩衝區 |
% | 目前的緩衝區 |
# | 交換緩衝區 |
= | 唯獨緩衝區 |
+ | 已被修改的緩衝區 |
分頁(Tab)
一般模式(Normal Mode)
命令 | 說明 |
---|
命令模式(Command Mode)
命令 | 說明 |
---|---|
:tabedit | 開啟新的分頁 |
插入模式(Insert Mode)
命令 | 說明 |
---|