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 :set nonumber!設定F2打開/關閉行號顯示
nmap :w將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.]bwipeoutbw 卸載緩衝區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)

命令 說明