1. 程式人生 > 其它 >VIM命令速查表

VIM命令速查表

vim

游標移動

h                   游標左移,同 <Left> 鍵
j                   游標下移,同 <Down> 鍵
k                   游標上移,同 <Up> 鍵
l                   游標右移,同 <Right> 鍵
CTRL-F              下一頁
CTRL-B              上一頁
CTRL-U              上移半屏
CTRL-D              下移半屏
0                   跳到行首(是數字零,不是字母O),效用等同於 <Home> 鍵
^                   跳到從行首開始第一個非空白字元
$                   跳到行尾,效用等同於 <End> 鍵
gg                  跳到第一行,效用等同於 CTRL+<Home>
G                   跳到最後一行,效用等同於 CTRL+<End>
nG                  跳到第n行,比如 10G 是移動到第十行
:n                  跳到第n行,比如 :10<回車> 是移動到第十行
10%                 移動到檔案 10% 處
15|                 移動到當前行的 15列
w                   跳到下一個單詞開頭 (word: 標點或空格分隔的單詞)
W                   跳到下一個單詞開頭 (WORD: 空格分隔的單詞)
e                   跳到下一個單詞尾部 (word: 標點或空格分隔的單詞)
E                   跳到下一個單詞尾部 (WORD: 空格分隔的單詞)
b                   上一個單詞頭 (word: 標點或空格分隔的單詞)
B                   上一個單詞頭 (WORD: 空格分隔的單詞)
ge                  上一個單詞尾
)                   向前移動一個句子(句號分隔)
(                   向後移動一個句子(句號分隔)
}                   向前移動一個段落(空行分隔)
{                   向後移動一個段落(空行分隔)
<enter>             移動到下一行首個非空字元
+                   移動到下一行首個非空字元(同回車鍵)
-                   移動到上一行首個非空字元
H                   移動到螢幕上部
M                   移動到螢幕中部
L                   移動到螢幕下部
fx                  跳轉到下一個為 x 的字元,2f/ 可以找到第二個斜杆
Fx                  跳轉到上一個為 x 的字元
tx                  跳轉到下一個為 x 的字元前
Tx                  跳轉到上一個為 x 的字元前
;                   跳到下一個 f/t 搜尋的結果
,                   跳到上一個 f/t 搜尋的結果
<S-Left>            按住 SHIFT 按左鍵,向左移動一個單詞
<S-Right>           按住 SHIFT 按右鍵,向右移動一個單詞
<S-Up>              按住 SHIFT 按上鍵,向上翻頁
<S-Down>            按住 SHIFT 按下鍵,向下翻頁
gm                  移動到行中
gj                  游標下移一行(忽略自動換行)
gk                  游標上移一行(忽略自動換行)

##############################################################################

插入模式:進入退出

##############################################################################

i                   在游標處進入插入模式
I                   在行首進入插入模式
a                   在游標後進入插入模式
A                   在行尾進入插入模式
o                   在下一行插入新行並進入插入模式
O                   在上一行插入新行並進入插入模式
gi                  進入到上一次插入模式的位置
<ESC>               退出插入模式
CTRL-[              退出插入模式(同 ESC 等價,但更順手)

INSERT MODE - 由 i, I, a, A, o, O 等命令進入插入模式後

<Up>                游標向上移動
<Down>              游標向下移動
<Left>              游標向左移動
<Right>             游標向右移動
<S-Left>            按住 SHIFT 按左鍵,向左移動一個單詞
<S-Right>           按住 SHIFT 按右鍵,向右移動一個單詞
<S-Up>              按住 SHIFT 按上鍵,向上翻頁
<S-Down>            按住 SHIFT 按下鍵,向下翻頁
<PageUp>            上翻頁
<PageDown>          下翻頁
<Delete>            刪除游標處字元
<BS>                Backspace 向後刪除字元
<Home>              游標跳轉行首
<End>               游標跳轉行尾
CTRL-W              向後刪除單詞
CTRL-O              臨時退出插入模式,執行單條命令又返回插入模式
CTRL-\ CTRL-O       臨時退出插入模式(游標保持),執行單條命令又返回插入模式
CTRL-R 0            插入暫存器(內部 0號剪貼簿)內容,CTRL-R 後可跟暫存器名
CTRL-R "            插入匿名暫存器內容,相當於插入模式下 p貼上
CTRL-R =            插入表示式計算結果,等號後面跟表示式
CTRL-R :            插入上一次命令列命令
CTRL-R /            插入上一次搜尋的關鍵字
CTRL-F              自動縮排
CTRL-U              刪除當前行所有字元
CTRL-V {char}       插入非數字的字面量
CTRL-V {number}     插入三個數字代表的 ascii/unicode 字元
CTRL-V 065          插入 10進位制 ascii 字元(兩數字) 065 即 A字元
CTRL-V x41          插入 16進位制 ascii 字元(三數字) x41 即 A字元
CTRL-V o101         插入  8進位制 ascii 字元(三數字) o101 即 A字元
CTRL-V u1234        插入 16進位制 unicode 字元(四數字)
CTRL-V U12345678    插入 16進位制 unicode 字元(八數字)
CTRL-K {ch1} {ch2}  插入 digraph(見 :h digraph),快速輸入日文或符號等
CTRL-D              文字向前縮排
CTRL-T              文字向後縮排

##############################################################################

文字編輯

##############################################################################

r                   替換當前字元
R                   進入替換模式,直至 ESC 離開
s                   替換字元(刪除游標處字元,並進入插入模式,前可接數量)
S                   替換行(刪除當前行,並進入插入模式,前可接數量)
cc                  改寫當前行(刪除當前行並進入插入模式),同 S
cw                  改寫游標開始處的當前單詞
ciw                 改寫游標所處的單詞
caw                 改寫游標所處的單詞,並且包括前後空格(如果有的話)
c0                  改寫到行首
c^                  改寫到行首(第一個非零字元)
c$                  改寫到行末
C                   改寫到行尾(同c$)
ci"                 改寫雙引號中的內容
ci'                 改寫單引號中的內容
cib                 改寫小括號中的內容
cab                 改寫小括號中的內容(包含小括號本身)
ci)                 改寫小括號中的內容
ci]                 改寫中括號中內容
ciB                 改寫大括號中內容
caB                 改寫大括號中的內容(包含大括號本身)
ci}                 改寫大括號中內容
cit                 改寫 xml tag 中的內容
cis                 改寫當前句子
c2w                 改寫下兩個單詞
ct(                 改寫到小括號前
c/apple             改寫到游標後的第一個apple前
x                   刪除當前字元,前面可以接數字,3x代表刪除三個字元
X                   向前刪除字元
dd                  刪除當前行
d0                  刪除到行首
d^                  刪除到行首(第一個非零字元)
d$                  刪除到行末
D                   刪除到行末(同 d$)
dw                  刪除當前單詞
diw                 刪除游標所處的單詞
daw                 刪除游標所處的單詞,幷包含前後空格(如果有的話)
di"                 刪除雙引號中的內容
di'                 刪除單引號中的內容
dib                 刪除小括號中的內容
di)                 刪除小括號中的內容
dab                 刪除小括號內的內容(包含小括號本身)
di]                 刪除中括號中內容
diB                 刪除大括號中內容
di}                 刪除大括號中內容
daB                 刪除大括號內的內容(包含大括號本身)
dit                 刪除 xml tag 中的內容
dis                 刪除當前句子
dip                 刪除當前段落(前後有空白行的稱為一個段落)
dap                 刪除當前段落(包括前後空白行)
d2w                 刪除下兩個單詞
dt(                 刪除到小括號前
d/apple             刪除到游標後的第一個apple前
dgg                 刪除到檔案頭部
dG                  刪除到檔案尾部
d}                  刪除下一段
d{                  刪除上一段
u                   撤銷
U                   撤銷整行操作
CTRL-R              撤銷上一次 u 命令
J                   連結多行為一行
.                   重複上一次操作
~                   替換大小寫
g~iw                替換當前單詞的大小寫
gUiw                將單詞轉成大寫
guiw                將當前單詞轉成小寫
guu                 全行轉為小寫
gUU                 全行轉為大寫
<<                  減少縮排
>>                  增加縮排
==                  自動縮排
CTRL-A              增加數字
CTRL-X              減少數字

##############################################################################

複製貼上

##############################################################################

p                   貼上到游標後
P                   貼上到游標前
v                   開始標記
y                   複製標記內容
V                   開始按行標記
CTRL-V              開始列標記
y$                  複製當前位置到本行結束的內容
yy                  複製當前行
Y                   複製當前行,同 yy
yiw                 複製當前單詞
3yy                 複製游標下三行內容
v0                  選中當前位置到行首
v$                  選中當前位置到行末
viw                 選中當前單詞
vib                 選中小括號內的東西
vi)                 選中小括號內的東西
vi]                 選中中括號內的東西
viB                 選中大括號內的東西
vi}                 選中大括號內的東西
vis                 選中句子中的東西
vip                 選中當前段落(前後有空白行的稱為一個段落)
vap                 選中當前段落(包括前後空白行)
vab                 選中小括號內的東西(包含小括號本身)
va)                 選中小括號內的東西(包含小括號本身)
va]                 選中中括號內的東西(包含中括號本身)
vaB                 選中大括號內的東西(包含大括號本身)
va}                 選中大括號內的東西(包含大括號本身)
gv                  重新選擇上一次選中的文字
:set paste          允許貼上模式(避免貼上時自動縮排影響格式)
:set nopaste        禁止貼上模式
"?yy                複製當前行到暫存器 ? ,問號代表 0-9 的暫存器名稱
"?d3j               刪除游標下三行內容,並放到暫存器 ? ,問號代表 0-9 的暫存器名稱
"?p                 將暫存器 ? 的內容貼上到游標後
"?P                 將暫存器 ? 的內容貼上到游標前
:registers          顯示所有暫存器內容
:[range]y           複製範圍,比如 :20,30y 是複製20到30行,:10y 是複製第十行
:[range]d           刪除範圍,比如 :20,30d 是刪除20到30行,:10d 是刪除第十行
ddp                 交換兩行內容:先刪除當前行復制到暫存器,並貼上
"_[command]         使用[command]刪除內容,並且不進行復制(不會汙染暫存器)
"*[command]         使用[command]複製內容到系統剪貼簿(需要vim版本有clipboard支援)

##############################################################################

文字物件 - c,d,v,y 等命令後接文字物件,一般為:<範圍 i/a><型別>

##############################################################################

$                   到行末
0                   到行首
^                   到行首非空字元
tx                  游標位置到字元 x 之前
fx                  游標位置到字元 x 之處
iw                  整個單詞(不包括分隔符)
aw                  整個單詞(包括分隔符)
iW                  整個 WORD(不包括分隔符)
aW                  整個 WORD(包括分隔符)
is                  整個句子(不包括分隔符)
as                  整個句子(包括分隔符)
ip                  整個段落(不包括前後空白行)
ap                  整個段落(包括前後空白行)
ib                  小括號內
ab                  小括號內(包含小括號本身)
iB                  大括號內
aB                  大括號內(包含大括號本身)
i)                  小括號內
a)                  小括號內(包含小括號本身)
i]                  中括號內
a]                  中括號內(包含中括號本身)
i}                  大括號內
a}                  大括號內(包含大括號本身)
i'                  單引號內
a'                  單引號內(包含單引號本身)
i"                  雙引號內
a"                  雙引號內(包含雙引號本身)
2i)                 往外兩層小括號內
2a)                 往外兩層小括號內(包含小括號本身)
2f)                 到第二個小括號處
2t)                 到第二個小括號前

##############################################################################

查詢替換

##############################################################################

/pattern            從游標處向檔案尾搜尋 pattern
?pattern            從游標處向檔案頭搜尋 pattern
n                   向同一方向執行上一次搜尋
N                   向相反方向執行上一次搜尋
*                   向前搜尋游標下的單詞
#                   向後搜尋游標下的單詞
: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
:., ns/p1/p2/g      將當前行到n行中所有p1替換為p2
:., +10s/p1/p2/g    將當前行到相對當前行加10行的區間中所有p1替換為p2
:., $s/p1/p2/g      將當前行到最後一行中所有p1替換為p2
:%s/1\\2\/3/123/g   將“1\2/3” 替換為 “123”(特殊字元使用反斜槓標註)
:%s/\r//g           刪除 DOS 換行符 ^M

##############################################################################

VISUAL MODE - 由 v, V, CTRL-V 進入的可視模式

##############################################################################

>                   增加縮排
<                   減少縮排
d                   刪除高亮選中的文字
x                   刪除高亮選中的文字
c                   改寫文字,即刪除高亮選中的文字並進入插入模式
s                   改寫文字,即刪除高亮選中的文字並進入插入模式
y                   拷貝文字
~                   轉換大小寫
o                   跳轉到標記區的另外一端
O                   跳轉到標記塊的另外一端
u                   標記區轉換為小寫
U                   標記區轉換為大寫
g CTRL-G            顯示所選擇區域的統計資訊
<Esc>               退出可視模式

##############################################################################

位置跳轉

##############################################################################

CTRL-O              跳轉到上一個位置
CTRL-I              跳轉到下一個位置
CTRL-^              跳轉到 alternate file (當前視窗的上一個檔案)
%                   跳轉到 {} () [] 的匹配
gd                  跳轉到區域性定義(游標下的單詞的定義)
gD                  跳轉到全域性定義(游標下的單詞的定義)
gf                  開啟名稱為游標下檔名的檔案
[[                  跳轉到上一個頂層函式(比如C語言以大括號分隔)
]]                  跳轉到下一個頂層函式(比如C語言以大括號分隔)
[m                  跳轉到上一個成員函式
]m                  跳轉到下一個成員函式
[{                  跳轉到上一處未匹配的 {
]}                  跳轉到下一處未匹配的 }
[(                  跳轉到上一處未匹配的 (
])                  跳轉到下一處未匹配的 )
[c                  上一個不同處(diff時)
]c                  下一個不同處(diff時)
[/                  跳轉到 C註釋開頭
]/                  跳轉到 C註釋結尾
``                  回到上次跳轉的位置
''                  回到上次跳轉的位置
`.                  回到上次編輯的位置
'.                  回到上次編輯的位置

##############################################################################

檔案操作

##############################################################################

:w                  儲存檔案
:w <filename>       按名稱儲存檔案
:e <filename>       開啟檔案並編輯
:saveas <filename>  另存為檔案
:r <filename>       讀取檔案並將內容插入到游標後
:r !dir             將 dir 命令的輸出捕獲並插入到游標後
:close              關閉檔案
:q                  退出
:q!                 強制退出
:wa                 儲存所有檔案
:cd <path>          切換 Vim 當前路徑
:pwd                顯示 Vim 當前路徑
:new                開啟一個新的視窗編輯新檔案
:enew               在當前視窗建立新檔案
:vnew               在左右切分的新視窗中編輯新檔案
:tabnew             在新的標籤頁中編輯新檔案

##############################################################################

已開啟檔案操作

##############################################################################

>:ls                 查案快取列表
>:bn                 切換到下一個快取
>:bp                 切換到上一個快取
>:bd                 刪除快取
>:b 1                切換到1號快取
>:b abc              切換到檔名為 abc 開頭的快取
>:badd <filename>    將檔案新增到快取列表
>:set hidden         設定隱藏模式(未儲存的快取可以被切換走,或者關閉)
>:set nohidden       關閉隱藏模式(未儲存的快取不能被切換走,或者關閉)
>n CTRL-^            切換快取,先輸入數字的快取編號,再按 CTRL + 6

##############################################################################

視窗操作

##############################################################################

:sp <filename>      上下切分視窗並在新視窗開啟檔案 filename
:vs <filename>      左右切分視窗並在新視窗開啟檔案 filename
CTRL-W s            上下切分視窗
CTRL-W v            左右切分視窗
CTRL-W w            迴圈切換到下一個視窗
CTRL-W W            迴圈切換到上一個視窗
CTRL-W p            跳到上一個訪問過的視窗
CTRL-W c            關閉當前視窗
CTRL-W o            關閉其他視窗
CTRL-W h            跳到左邊的視窗
CTRL-W j            跳到下邊的視窗
CTRL-W k            跳到上邊的視窗
CTRL-W l            跳到右邊的視窗
CTRL-W +            增加當前視窗的行高,前面可以加數字
CTRL-W -            減少當前視窗的行高,前面可以加數字
CTRL-W <            減少當前視窗的列寬,前面可以加數字
CTRL-W >            增加當前視窗的列寬,前面可以加數字
CTRL-W =            讓所有視窗寬高相同
CTRL-W H            將當前視窗移動到最左邊
CTRL-W J            將當前視窗移動到最下邊
CTRL-W K            將當前視窗移動到最上邊
CTRL-W L            將當前視窗移動到最右邊
CTRL-W x            交換視窗
CTRL-W f            在新視窗中開啟名為游標下檔名的檔案
CTRL-W gf           在新標籤頁中開啟名為游標下檔名的檔案
CTRL-W R            旋轉視窗
CTRL-W T            將當前視窗移到新的標籤頁中
CTRL-W P            跳轉到預覽視窗
CTRL-W z            關閉預覽視窗
CTRL-W _            縱向最大化當前視窗
CTRL-W |            橫向最大化當前視窗

##############################################################################

標籤頁

##############################################################################

:tabs               顯示所有標籤頁
:tabe <filename>    在新標籤頁中開啟檔案 filename
:tabn               下一個標籤頁
:tabp               上一個標籤頁
:tabc               關閉當前標籤頁
:tabo               關閉其他標籤頁
:tabn n             切換到第n個標籤頁,比如 :tabn 3 切換到第三個標籤頁
:tabm n             標籤移動
:tabfirst           切換到第一個標籤頁
:tablast            切換到最後一個標籤頁
:tab help           在標籤頁開啟幫助
:tab drop <file>    如果檔案已被其他標籤頁和視窗開啟則跳過去,否則新標籤開啟
:tab split          在新的標籤頁中開啟當前窗口裡的檔案
:tab ball           將快取中所有檔案用標籤頁開啟
:set showtabline=?  設定為 0 就不顯示標籤頁標籤,1會按需顯示,2會永久顯示
ngt                 切換到第n個標籤頁,比如 2gt 將會切換到第二個標籤頁
gt                  下一個標籤頁
gT                  上一個標籤頁

##############################################################################

書籤

##############################################################################

:marks              顯示所有書籤
ma                  儲存當前位置到書籤 a ,書籤名小寫字母為檔案內,大寫全域性
'a                  跳轉到書籤 a所在的行
`a                  跳轉到書籤 a所在位置
`.                  跳轉到上一次編輯的行
'A                  跳轉到全文書籤 A
['                  跳轉到上一個書籤
]'                  跳轉到下一個書籤
'<                  跳到上次可視模式選擇區域的開始
'>                  跳到上次可視模式選擇區域的結束
:delm a             刪除緩衝區標籤a
:delm A             刪除檔案標籤A
:delm!              刪除所有緩衝區標籤(小寫字母), 不能刪除檔案標籤和數字標籤
:delm A-Z           刪除所有檔案標籤(大寫字母)
:delm 0-9           刪除所有數字標籤(.viminfo)
:delm A-Z0-9        刪除所有檔案標籤和數字標籤

##############################################################################

常用設定

##############################################################################

:set nocompatible   設定不相容原始 vi 模式(必須設定在最開頭)
:set bs=?           設定BS鍵模式,現代編輯器為 :set bs=eol,start,indent
:set sw=4           設定縮排寬度為 4
:set ts=4           設定製表符寬度為 4
:set noet           設定不展開 tab 成空格
:set et             設定展開 tab 成空格
:set winaltkeys=no  設定 GVim 下正常捕獲 ALT 鍵
:set nowrap         關閉自動換行
:set ttimeout       允許終端按鍵檢測超時(終端下功能鍵為一串ESC開頭的掃描碼)
:set ttm=100        設定終端按鍵檢測超時為100毫秒
:set term=?         設定終端型別,比如常見的 xterm
:set ignorecase     設定搜尋忽略大小寫(可縮寫為 :set ic)
:set noignorecase   設定搜尋不忽略大小寫(可縮寫為 :set noic)
:set smartcase      智慧大小寫,預設忽略大小寫,除非搜尋內容裡包含大寫字母
:set list           設定顯示製表符和換行符
:set number         設定顯示行號,禁止顯示行號可以用 :set nonumber
:set relativenumber 設定顯示相對行號(其他行與當前行的距離)
:set paste          進入貼上模式(貼上時禁用縮排等影響格式的東西)
:set nopaste        結束貼上模式
:set spell          允許拼寫檢查
:set hlsearch       設定高亮查詢
:set ruler          總是顯示游標位置
:set incsearch      查詢輸入時動態增量顯示查詢結果
:set insertmode     Vim 始終處於插入模式下,使用 ctrl-o 臨時執行命令
:set all            列出所有選項設定情況
:syntax on          允許語法高亮
:syntax off         禁止語法高亮

##############################################################################

幫助資訊

##############################################################################

:h tutor            入門文件
:h quickref         快速幫助
:h index            查詢 Vim 所有鍵盤命令定義
:h summary          幫助你更好的使用內建幫助系統
:h CTRL-H           查詢普通模式下 CTRL-H 是幹什麼的
:h i_CTRL-H         查詢插入模式下 CTRL-H 是幹什麼的
:h i_<Up>           查詢插入模式下方向鍵上是幹什麼的
:h pattern.txt      正則表示式幫助
:h eval             指令碼編寫幫助
:h function-list    檢視 VimScript 的函式列表 
:h windows.txt      視窗使用幫助
:h tabpage.txt      標籤頁使用幫助
:h +timers          顯示對 +timers 特性的幫助
:h :!               檢視如何執行外部命令
:h tips             檢視 Vim 內建的常用技巧文件
:h set-termcap      檢視如何設定按鍵掃描碼
:viusage            NORMAL 模式幫助
:exusage            EX 命令幫助
:version            顯示當前 Vim 的版本號和特性

##############################################################################

外部命令

##############################################################################

:!ls                執行外部命令 ls,並等待返回
:r !ls              將外部命令 ls 的輸出捕獲,並插入到游標後
:w !sudo tee %      sudo以後儲存當前檔案
:call system('ls')  呼叫 ls 命令,但是不顯示返回內容
:!start notepad     Windows 下啟動 notepad,最前面可以加 silent
:sil !start cmd     Windows 下當前目錄開啟 cmd
:%!prog             執行文字過濾程式,如整理 json格式 :%!python -m json.tool

##############################################################################

Quickfix 視窗

##############################################################################

:copen              開啟 quickfix 視窗(檢視編譯,grep等資訊)
:copen 10           開啟 quickfix 視窗,並且設定高度為 10
:cclose             關閉 quickfix 視窗
:cfirst             跳到 quickfix 中第一個錯誤資訊
:clast              跳到 quickfix 中最後一條錯誤資訊
:cc [nr]            檢視錯誤 [nr]
:cnext              跳到 quickfix 中下一個錯誤資訊
:cprev              跳到 quickfix 中上一個錯誤資訊

##############################################################################

拼寫檢查

##############################################################################

:set spell          開啟拼寫檢查
:set nospell        關閉拼寫檢查
]s                  下一處錯誤拼寫的單詞
[s                  上一處錯誤拼寫的單詞
zg                  加入單詞到拼寫詞表中
zug                 撤銷上一次加入的單詞
z=                  拼寫建議

##############################################################################

程式碼摺疊

##############################################################################

za                  切換摺疊
zA                  遞迴切換摺疊
zc                  摺疊游標下程式碼
zC                  摺疊游標下所有程式碼
zd                  刪除游標下摺疊
zD                  遞迴刪除所有摺疊
zE                  刪除所有摺疊
zf                  建立程式碼摺疊
zF                  指定行數建立摺疊
zi                  切換摺疊
zm                  所有程式碼摺疊一層
zr                  所有程式碼開啟一層
zM                  摺疊所有程式碼,設定 foldlevel=0,設定 foldenable
zR                  開啟所有程式碼,設定 foldlevel 為最大值
zn                  摺疊 none,重置 foldenable 並開啟所有程式碼
zN                  摺疊 normal,重置 foldenable 並恢復所有摺疊
zo                  開啟一層程式碼
zO                  開啟游標下所有程式碼摺疊

##############################################################################

巨集錄製

##############################################################################

qa                  開始錄製名字為 a 的巨集
q                   結束錄製巨集
@a                  播放名字為 a 的巨集
@@                  播放上一個巨集
@:                  重複上一個ex命令(即冒號命令)

##############################################################################

其他命令

##############################################################################

CTRL-X CTRL-F       插入模式下檔案路徑補全
CTRL-X CTRL-O       插入下 Omnifunc 補全
CTRL-X CTRL-N       插入模式下關鍵字補全
CTRL-X CTRL-E       插入模式下向上滾屏
CTRL-X CTRL-Y       插入模式下向下滾屏
CTRL-E              向上滾屏
CTRL-Y              向下滾屏
CTRL-G              顯示正在編輯的檔名,以及大小和位置資訊
g CTRL-G            顯示檔案的:大小,字元數,單詞數和行數,可視模式下也可用
zz                  調整游標所在行到螢幕中央
zt                  調整游標所在行到螢幕上部
zb                  調整游標所在行到螢幕下部
ga                  顯示游標下字元的 ascii 碼或者 unicode 編碼
g8                  顯示游標下字元的 utf-8 編碼位元組序
gi                  回到上次進入插入的地方,並切換到插入模式
K                   查詢游標下單詞的幫助
ZZ                  儲存檔案(如果有改動的話),並關閉視窗
ZQ                  不儲存檔案關閉視窗
CTRL-PgUp           上個標籤頁,GVim OK,部分終端軟體需設定對應鍵盤碼
CTRL-PgDown         下個標籤頁,GVim OK,部分終端軟體需設定對應鍵盤碼
CTRL-R CTRL-W       命令模式下插入游標下單詞
CTRL-INSERT         複製到系統剪貼簿(GVIM)
SHIFT-INSERT        貼上系統剪貼簿的內容(GVIM)
:set ff=unix        設定換行為 unix
:set ff=dos         設定換行為 dos
:set ff?            檢視換行設定
:set nohl           清除搜尋高亮
:set termcap        檢視會從終端接收什麼以及會發送給終端什麼命令
:set guicursor=     解決 SecureCRT/PenguiNet 中 NeoVim 區域性奇怪字元問題
:set t_RS= t_SH=    解決 SecureCRT/PenguiNet 中 Vim8.0 終端功能奇怪字元
:set fo+=a          開啟文字段的實時自動格式化
:earlier 15m        回退到15分鐘前的檔案內容
:.!date             在當前視窗插入時間
:%!xxd              開始二進位制編輯
:%!xxd -r           儲存二進位制編輯
:r !curl -sL {URL}  讀取 url 內容新增到游標後
:g/^\s*$/d          刪除空行
:g/green/d          刪除所有包含 green 的行
:v/green/d          刪除所有不包含 green 的行
:g/gladiolli/#      搜尋單詞列印結果,並在結果前加上行號
:g/ab.*cd.*efg/#    搜尋包含 ab,cd 和 efg 的行,列印結果以及行號
:v/./,/./-j         壓縮空行
:Man bash           在 Vim 中檢視 man,先呼叫 :runtime! ftplugin/man.vim 啟用
/fred\|joe          搜尋 fred 或者 joe
/\<\d\d\d\d\>       精確搜尋四個數字
/^\n\{3}            搜尋連續三個空行

##############################################################################

Plugin - https://github.com/tpope/vim-commentary

##############################################################################

gcc                 註釋當前行
gc{motion}          註釋 {motion} 所標註的區域,比如 gcap 註釋整段
gci{                註釋大括號內的內容
gc                  在 Visual Mode 下面按 gc 註釋選中區域
:7,17Commentary     註釋 7 到 17 行

##############################################################################

Plugin - https://github.com/junegunn/vim-easy-align

##############################################################################

:EasyAlign =        以第一個匹配的=為中心對齊
:EasyAlign *=       匹配並且對齊所有=

##############################################################################

Plugin - https://github.com/tpope/vim-unimpaired

##############################################################################

[space              向上插入空行
]space              向下插入空行
[e                  替換當前行和上一行
]e                  替換當前行和下一行
[x                  XML 編碼
]x                  XML 解碼
[u                  URL 編碼
]u                  URL 解碼
[y                  C 字串編碼
]y                  C 字串解碼
[q                  上一個 quickfix 錯誤
]q                  下一個 quickfix 錯誤
[Q                  第一個 quickfix 錯誤
]Q                  最後一個 quickfix 錯誤
[f                  切換同目錄裡上一個檔案
]f                  切換同目錄裡下一個檔案
[os                 設定 :set spell
]os                 設定 :set nospell
=os                 設定 :set invspell
[on                 顯示行號
]on                 關閉行號
[ol                 顯示回車和製表符 :set list
]ol                 不顯示回車和製表符 :set nolist
[b                  快取切換到上一個檔案,即 :bp
]b                  快取切換到下一個檔案,即 :bn
[B                  快取切換到第一個檔案,即 :bfirst
]B                  快取切換到最後一個檔案,即 :blast

##############################################################################

Plugin - https://github.com/skywind3000/asyncrun.vim

##############################################################################

:AsyncRun ls        非同步執行命令 ls 結果輸出到 quickfix 使用 :copen 檢視
:AsyncRun -raw ls   非同步執行命令 ls 結果不匹配 errorformat

##############################################################################

Plugin - https://github.com/gaving/vim-textobj-argument

##############################################################################

cia                 改寫函式引數
caa                 改寫函式引數(包括逗號分隔)
dia                 刪除函式引數
daa                 刪除函式引數(包括逗號分隔)
via                 選取函式引數
vaa                 選取函式引數(包括逗號分隔)
yia                 複製函式引數
yaa                 複製函式引數(包括逗號分隔)

##############################################################################

網路資源

##############################################################################

最新版本            https://github.com/vim/vim   
Windows 最新版      https://github.com/vim/vim-win32-installer/releases
外掛瀏覽            http://vimawesome.com
reddit              https://www.reddit.com/r/vim/
正確設定 ALT/BS 鍵  http://www.skywind.me/blog/archives/2021
視訊教程            http://vimcasts.org/
中文幫助            http://vimcdoc.sourceforge.net/doc/help.html
中文版入門到精通    https://github.com/wsdjeg/vim-galore-zh_cn
五分鐘指令碼入門      http://www.skywind.me/blog/archives/2193
指令碼精通            http://learnvimscriptthehardway.stevelosh.com/
中文指令碼幫助        vimcdoc.sourceforge.net/doc/eval.html
十六年使用經驗      http://zzapper.co.uk/vimtips.html
配色方案            http://vimcolors.com/

##############################################################################

TIPS

##############################################################################

- 永遠不要用 CTRL-C 代替 <ESC> 完全不同的含義,容易錯誤中斷執行的後臺指令碼
- 很多人使用 CTRL-[ 代替 <ESC>,左手小指 CTRL,右手小指 [ 熟練後很方便
- 某些終端中使用 Vim 8 內嵌終端如看到奇怪字元,使用 :set t_RS= t_SH= 解決
- 某些終端中使用 Vim 8.2+ 會看到一些奇怪字元,使用 :set t_TI= t_TE= 解決
- 某些終端中使用 NeoVim 如看到奇怪字元,使用 :set guicursor= 解決
- 使用 MS-Terminal 如果進入 Vim/NVim 會預設替換模式設定 :set t_u7= 解決
- 多使用 ciw, ci[, ci", ci( 以及 diw, di[, di", di( 命令來快速改寫/刪除文字
- 在行內左右移動游標時,多使用w b e或W B E,而不是h l或方向鍵,這樣會快很多
- SHIFT 相當於移動加速鍵, w b e 移動游標很慢,但是 W B E 走的很快
- 自己要善於總結新技巧,比如移動到行首非空字元時用 0w 命令比 ^ 命令更容易輸入
- 在空白行使用 dip 命令可以刪除所有臨近的空白行,viw 可以選擇連續空白
- 縮排時使用 >8j  >}  <ap  >ap  =i}  == 會方便很多
- 插入模式下,當你發現一個單詞寫錯了,應該多用 CTRL-W 這比 <BackSpace> 快
- y d c 命令可以很好結合 f t 和 /X 比如 dt) 和 y/end<cr>
- c d x 命令會自動填充暫存器 "1 到 "9 , y 命令會自動填充 "0 暫存器
- 用 v 命令選擇文字時,可以用 o 掉頭選擇,有時很有用
- 寫文章時,可以寫一段程式碼塊,然後選中後執行 :!python 程式碼塊就會被替換成結果
- 搜尋後經常使用 :nohl 來消除高亮,使用很頻繁,可以 map 到 <BackSpace> 上
- 搜尋時可以用 CTRL-R CTRL-W 插入游標下的單詞,命令模式也能這麼用
- 對映按鍵時,應該預設使用 noremap ,只有特別需要的時候使用 map
- 當你覺得做某事很低效時,你應該停下來,u u u u 然後思考正確的高效方式來完成
- 用 y複製文字後,命令模式中 CTRL-R 然後按雙引號 0 可以插入之前複製內容
- 某些情況下 Vim 繪製高亮慢,滾屏重新整理慢可以試試 set re=1 使用老的正則引擎
- Windows 下的 GVim 可以設定 set rop=type:directx,renmode:5 增強顯示

##############################################################################

References

##############################################################################

https://github.com/groenewege/vimrc/blob/master/vim_cheat_sheet.txt
http://blog.g-design.net/post/4789778607/vim-cheat-sheet
http://www.keyxl.com/aaa8263/290/VIM-keyboard-shortcuts.htm
http://jmcpherson.org/editing.html
http://www.fprintf.net/vimCheatSheet.html
http://www.ouyaoxiazai.com/article/24/654.html
http://bbs.it-home.org/thread-80794-1-1.html
http://www.lpfrx.com/wp-content/uploads/2008/09/vi.jpg
http://michael.peopleofhonoronly.com/vim/
https://github.com/hobbestigrou/vimtips-fortune/blob/master/fortunes/vimtips
https://github.com/glts/vim-cottidie/blob/master/autoload/cottidie/tips

vim: set ts=4 sw=4 tw=0 noet noautoindent fdm=manual :