外掛相關
快捷鍵 | 說明 |
---|---|
, |
Leader Key |
<leader>n |
開啟/關閉程式碼資源管理器 |
<leader>t |
開啟/關閉函式列表 |
<leader>a |
.h .cpp 檔案切換 |
<leader>u |
轉到函式宣告 |
<leader>U |
轉到函式實現 |
<leader>o |
開啟include檔案 |
<leader>y |
複製函式宣告 |
<leader>p |
生成函式實現 |
<leader>w |
單詞跳轉 |
<leader>f |
搜尋~目錄下的檔案 |
<leader>F |
搜尋當前目錄下的文字 |
<leader>g |
顯示git倉庫提交記錄 |
<leader>G |
顯示當前檔案提交記錄 |
<leader>gg |
顯示當前檔案在某個commit下的完整內容 |
<leader>ff |
語法錯誤自動修復(FixIt) |
<c-p> |
切換到上一個buffer |
<c-n> |
切換到下一個buffer |
<leader>d |
刪除當前buffer |
<leader>D |
刪除當前buffer外的所有buffer |
vim |
執行vim編輯器時,預設啟動開始頁面 |
<F5> |
顯示語法錯誤提示視窗 |
<F7> |
啟用markdown實時預覽 |
<F8> |
關閉markdown實時預覽 |
<F9> |
顯示上一主題 |
<F10> |
顯示下一主題 |
<leader>l |
按豎線對齊 |
<leader>= |
按等號對齊 |
Ya |
複製行文字到字母a |
Da |
剪下行文字到字母a |
Ca |
改寫行文字到字母a |
rr |
替換文字 |
<leader>r |
全域性替換,目前只支援單個檔案 |
gcc |
註釋程式碼 |
gcap |
註釋段落 |
vif |
選中函式內容 |
dif |
刪除函式內容 |
cif |
改寫函式內容 |
vaf |
選中函式內容(包括函式名 花括號) |
daf |
刪除函式內容(包括函式名 花括號) |
caf |
改寫函式內容(包括函式名 花括號) |
fa |
查詢字母a,然後再按f鍵查詢下一個 |
<c-x><c-o> |
Emoji:dog:補全 |
插入模式
快捷鍵 | 說明 |
---|---|
i |
在游標處進入插入模式 |
I |
在行首進入插入模式 |
a |
在游標後進入插入模式 |
A |
在行尾進入插入模式 |
o |
在下一行插入新行並進入插入模式 |
O |
在上一行插入新行並進入插入模式 |
gi |
進入到上一次插入模式的位置 |
<esc> |
退出插入模式 |
快取操作
快捷鍵 | 說明 |
---|---|
:e <filename> |
新建buffer開啟檔案 |
:bp |
切換到上一個buffer |
:bn |
切換到下一個buffer |
:bd |
刪除當前buffer |
視窗操作
快捷鍵 | 說明 |
---|---|
:sp <filename> |
橫向切分視窗並開啟檔案 |
:vsp <filename> |
豎向切分視窗並開啟檔案 |
<c-w>h |
跳到左邊的視窗 |
<c-w>j |
跳到下邊的視窗 |
<c-w>k |
跳到上邊的視窗 |
<c-w>l |
跳到右邊的視窗 |
<c-w>c |
關閉當前視窗 |
<c-w>o |
關閉其他視窗 |
:only |
關閉其他視窗 |
游標移動
快捷鍵 | 說明 |
---|---|
h |
上下左右移動 |
j |
上下左右移動 |
k |
上下左右移動 |
l |
上下左右移動 |
0 |
游標移動到行首 |
^ |
跳到從行首開始第一個非空白字元 |
$ |
游標移動到行尾 |
<c-o> |
跳到上一個位置 |
<c-i> |
跳到下一個位置 |
<c-b> |
上一頁 |
<c-f> |
下一頁 |
<c-u> |
上移半屏 |
<c-d> |
下移半屏 |
H |
調到螢幕頂上 |
M |
調到螢幕中間 |
L |
調到螢幕下方 |
:n |
跳到第n行 |
w |
跳到下一個單詞開頭(標點或空格分隔的單詞) |
W |
跳到下一個單詞開頭(空格分隔的單詞) |
e |
跳到下一個單詞尾部(標點或空格分隔的單詞) |
E |
跳到下一個單詞尾部(空格分隔的單詞) |
b |
上一個單詞頭(標點或空格分隔的單詞) |
B |
上一個單詞頭(空格分隔的單詞) |
ge |
上一個單詞尾 |
% |
在配對符間移動, 可用於()、{}、[] |
gg |
到檔案首 |
G |
到檔案尾 |
fx |
跳轉到下一個為x的字元 |
Fx |
跳轉到上一個為x的字元 |
tx |
跳轉到下一個為x的字元前 |
Tx |
跳轉到上一個為x的字元前 |
; |
跳到下一個搜尋的結果 |
[[ |
跳轉到函式開頭 |
]] |
跳轉到函式結尾 |
文字編輯
快捷鍵 | 說明 |
---|---|
r |
替換當前字元 |
R |
進入替換模式,直至 ESC 離開 |
s |
替換字元(刪除游標處字元,並進入插入模式,前可接數量) |
S |
替換行(刪除當前行,並進入插入模式,前可接數量) |
cc |
改寫當前行(刪除當前行並進入插入模式),同 S |
cw |
改寫游標開始處的當前單詞 |
ciw |
改寫游標所處的單詞 |
caw |
改寫游標所處的單詞,並且包括前後空格(如果有的話) |
ct, |
改寫到逗號 |
c0 |
改寫到行首 |
c^ |
改寫到行首(第一個非零字元) |
c$ |
改寫到行末 |
C |
改寫到行末(同 c$) |
ci" |
改寫雙引號中的內容 |
ci' |
改寫單引號中的內容 |
ci) |
改寫小括號中的內容 |
ci] |
改寫中括號中內容 |
ci} |
改寫大括號中內容 |
cit |
改寫 xml tag 中的內容 |
cis |
改寫當前句子 |
ciB |
改寫'{}'中的內容 |
c2w |
改寫下兩個單詞 |
ct( |
改寫到小括號前 |
x |
刪除當前字元,前面可以接數字,3x代表刪除三個字元 |
X |
向前刪除字元 |
dd |
刪除當前行 |
d0 |
刪除到行首 |
d^ |
刪除到行首(第一個非零字元) |
d$ |
刪除到行末 |
D |
刪除到行末(同 d$) |
dw |
刪除當前單詞 |
dt, |
刪除到逗號 |
diw |
刪除游標所處的單詞 |
daw |
刪除游標所處的單詞,幷包含前後空格(如果有的話) |
di" |
刪除雙引號中的內容 |
di' |
刪除單引號中的內容 |
di) |
刪除小括號中的內容 |
di] |
刪除中括號中內容 |
di} |
刪除大括號中內容 |
diB |
刪除'{}'中的內容 |
dit |
刪除 xml tag 中的內容 |
dis |
刪除當前句子 |
d2w |
刪除下兩個單詞 |
dt( |
刪除到小括號前 |
dgg |
刪除到檔案頭部 |
dG |
刪除到檔案尾部 |
d} |
刪除下一段 |
d{ |
刪除上一段 |
u |
撤銷 |
U |
撤銷整行操作 |
CTRL-R |
撤銷上一次 u 命令 |
J |
連線若干行 |
gJ |
連線若干行,刪除空白字元 |
. |
重複上一次操作 |
~ |
交換大小寫 |
g~iw |
替換當前單詞的大小寫 |
gUiw |
將單詞轉成大寫 |
guiw |
將當前單詞轉成小寫 |
guu |
全行轉為小寫 |
gUU |
全行轉為大寫 |
gg=G |
縮排整個檔案 |
=a{ |
縮排游標所在程式碼塊 |
=i{ |
縮排游標所在程式碼塊,不縮排"{" |
<< |
減少縮排 |
>> |
增加縮排 |
== |
自動縮排 |
CTRL-A |
增加數字 |
CTRL-X |
減少數字 |
p |
貼上到游標後 |
P |
貼上到游標前 |
v |
開始標記 |
y |
複製標記內容 |
V |
開始按行標記 |
CTRL-V |
開始列標記 |
y$ |
複製當前位置到本行結束的內容 |
yy |
複製當前行 |
Y |
複製當前行,同 yy |
yt, |
複製到逗號 |
yiw |
複製當前單詞 |
3yy |
複製游標下三行內容 |
v0 |
選中當前位置到行首 |
v$ |
選中當前位置到行末 |
vt, |
選中到逗號 |
viw |
選中當前單詞 |
vi) |
選中小括號內的東西 |
vi] |
選中中括號內的東西 |
viB |
選中'{}'中的內容 |
vis |
選中句子中的東西 |
gv |
重新選擇上一次選中的文字 |
:set paste |
允許貼上模式(避免貼上時自動縮排影響格式) |
:set nopaste |
禁止貼上模式 |
"?yy |
複製當前行到暫存器 ? ,問號代表 0-9 的暫存器名稱 |
"?p |
將暫存器 ? 的內容貼上到游標後 |
"?P |
將暫存器 ? 的內容貼上到游標前 |
:registers |
顯示所有暫存器內容 |
:[range]y |
複製範圍,比如 :20,30y 是複製20到30行,:10y 是複製第十行 |
:[range]d |
刪除範圍,比如 :20,30d 是刪除20到30行,:10d 是刪除第十行 |
ddp |
交換兩行內容:先刪除當前行復制到暫存器,並貼上 |
檔案操作
快捷鍵 | 說明 |
---|---|
:w |
儲存檔案 |
:w <filename> |
按名稱儲存檔案 |
ZZ |
儲存檔案(如果有改動的話),並關閉視窗 |
:e <filename> |
開啟檔案並編輯 |
:saveas <filename> |
另存為檔案 |
:r <filename> |
讀取檔案並將內容插入到游標後 |
:r !dir |
將dir命令的輸出捕獲並插入到游標後 |
:close |
關閉檔案 |
:q |
退出 |
:q! |
強制退出 |
:wa |
儲存所有檔案 |
:cd <path> |
切換Vim當前路徑 |
:new |
開啟一個新的視窗編輯新檔案 |
:enew |
在當前視窗建立新檔案 |
:vnew |
在左右切分的新視窗中編輯新檔案 |
:tabnew |
在新的標籤頁中編輯新檔案 |
使用外部程式
快捷鍵 | 說明 |
---|---|
! |
告訴vim正在執行一個過濾操作 |
!5Gsort<Enter> |
使用外部sort命令對1-5行文字排序 |
!! |
對當前行執行過濾命令 |
!!date<Enter> |
用"date"的輸出代替當前行 |
宏錄製
快捷鍵 | 說明 |
---|---|
qa |
開始錄製名字為a的宏 |
q |
結束錄製宏 |
@a |
播放名字為a的宏 |
100@a |
播放名字為a的宏100次 |
:normal@a |
播放名字為a的宏直到自動結束 |
實用命令
快捷鍵 | 說明 |
---|---|
/pattern |
從游標處向檔案尾搜尋 pattern |
?pattern |
從游標處向檔案頭搜尋 pattern |
n |
向同一方向執行上一次搜尋 |
N |
向相反方向執行上一次搜尋 |
* |
向前搜尋游標下的單詞 |
# |
向後搜尋游標下的單詞 |
:s/p1/p2/g |
替換當前行的p1為p2 |
:%s/p1/p2/g |
替換當前檔案中的p1為p2 |
:%s/<p1>/p2/g |
替換當前檔案中的p1單詞為p2 |
:%s/p1/p2/gc |
替換當前檔案中的p1為p2,並且每處詢問你是否替換 |
:10,20s/p1/p2/g |
將第10到20行中所有p1替換為p2 |
:%s/1\\2\/3/123/g |
將“1\2/3” 替換為 “123”(特殊字元使用反斜槓標註) |
:%s/\r//g |
刪除 DOS 換行符 ^M |
:g/^\s*$/d |
刪除空行 |
:g/test/d |
刪除所有包含 test 的行 |
:v/test/d |
刪除所有不包含 test 的行 |
:%s/^/test/ |
在行首加入特定字元(也可以用宏錄製來新增) |
:%s/$/test/ |
在行尾加入特定字元(也可以用宏錄製來新增) |
:sort |
排序 |
:g/^\(.\+\)$\n\1/d |
去除重複行(先排序) |
:%s/^.\{10\}// |
刪除每行前10個字元 |
:%s/.\{10\}$// |
刪除每行尾10個字元 |
幫助
快捷鍵 | 說明 |
---|---|
h tutor |
入門文件 |
h quickref |
快速幫助 |
h index |
查詢Vim所有鍵盤命令定義 |
h summary |
幫助你更好的使用內建幫助系統 |
h pattern.txt |
正規表示式幫助 |
h eval |
指令碼編寫幫助 |
h function-list |
檢視VimScript的函式列表 |
h windows.txt |
視窗使用幫助 |
h tabpage.txt |
標籤頁使用幫助 |
h tips |
檢視Vim內建的常用技巧文件 |
h quote |
暫存器 |
h autocommand-events |
所有可能事件 |
h write-plugin |
編寫外掛 |
其他
快捷鍵 | 說明 |
---|---|
vim -u NONE -N |
開啟vim時不載入vimrc檔案 |
vimdiff file1 file2 |
顯示檔案差異 |
<leader>e |
快速編輯vimrc檔案 |
<leader>s |
重新載入vimrc檔案 |
<leader>h |
開啟vimplus幫助文件 |
<leader>H |
開啟當前游標所在單詞的vim幫助文件 |
<leader><leader>i |
安裝外掛 |
<leader><leader>u |
更新外掛 |
<leader><leader>c |
刪除外掛 |
本作品採用《CC 協議》,轉載必須註明作者和本文連結