vim中文速查表
阿新 • • 發佈:2019-02-16
##############################################################################
# VIM CHEATSHEET (中文速查表) - by skywind (created on 2017/10/12)
# Version: 20, Last Modified: 2018/02/24 14:30
# https://github.com/skywind3000/awesome-cheatsheets
##############################################################################
##############################################################################
# 游標移動
##############################################################################
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 的字元
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 插入暫存器(內部剪貼簿編號)內容
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),快速輸入日文或符號等
##############################################################################
# 文字編輯
##############################################################################
r 替換當前字元
R 進入替換模式,直至 ESC 離開
s 替換字元(刪除游標處字元,並進入插入模式,前可接數量)
S 替換行(刪除當前行,並進入插入模式,前可接數量)
cc 改寫當前行(刪除當前行並進入插入模式),同 S
cw 改寫游標開始處的當前單詞
ciw 改寫游標所處的單詞
caw 改寫游標所處的單詞,並且包括前後空格(如果有的話)
c0 改寫到行首
c^ 改寫到行首(第一個非零字元)
c$ 改寫到行末
ci" 改寫雙引號中的內容
ci' 改寫單引號中的內容
ci) 改寫小括號中的內容
ci] 改寫中括號中內容
ci} 改寫大括號中內容
cit 改寫 xml tag 中的內容
cis 改寫當前句子
c2w 改寫下兩個單詞
ct( 改寫到小括號前
x 刪除當前字元,前面可以接數字,3x代表刪除三個字元
X 向前刪除字元
dd 刪除當前行
d0 刪除到行首
d^ 刪除到行首(第一個非零字元)
d$ 刪除到行末
D 刪除到行末(同 d$)
dw 刪除當前單詞
diw 刪除游標所處的單詞
daw 刪除游標所處的單詞,幷包含前後空格(如果有的話)
di" 刪除雙引號中的內容
di' 刪除單引號中的內容
di) 刪除小括號中的內容
di] 刪除中括號中內容
di} 刪除大括號中內容
dit 刪除 xml tag 中的內容
dis 刪除當前句子
d2w 刪除下兩個單詞
dt( 刪除到小括號前
dgg 刪除到檔案頭部
dG 刪除到檔案尾部
d} 刪除下一段
d{ 刪除上一段
u 撤銷
U 撤銷整行操作
CTRL-R 重複
J 連結多行為一行
. 重複上一次操作
~ 替換大小寫
g~iw 替換當前單詞的大小寫
gUiw 將單詞轉成大寫
guiw 將當前單詞轉成小寫
<< 減少縮排
>> 增加縮排
== 自動縮排
CTRL-a 增加數字
CTRL-x 減少數字
##############################################################################
# 複製貼上
##############################################################################
p 貼上到游標後
P 貼上到游標前
v 開始標記
y 複製標記內容
V 開始按行標記
CTRL-v 開始列標記
y$ 複製當前位置到本行結束的內容
Y 複製到行末,同 yy
yy 複製當前行
yiw 複製當前單詞
3yy 複製游標下三行內容
v0 選中當前位置到行首
v$ 選中當前位置到行末
viw 選中當前單詞
vi) 選中小括號內的東西
vi] 選中中括號內的東西
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 交換兩行內容:先刪除當前行復制到暫存器,並貼上
##############################################################################
# 文字物件 - c,d,v,y 等命令後接文字物件,一般為:<範圍 i/a><型別>
##############################################################################
$ 到行末
0 到行首
^ 到行首非空字元
tx 游標位置到字元 x 之前
fx 游標位置到字元 x 之處
iw 整個單詞(不包括分隔符)
aw 整個單詞(包括分隔符)
iW 整個 WORD(不包括分隔符)
aW 整個 WORD(包括分隔符)
is 整個句子(不包括分隔符)
is 整個句子(不包括分隔符)
i) 小括號內
a) 小括號內(包含小括號本身)
i] 中括號內
a] 中括號內(包含中括號本身)
i} 大括號內
a} 大括號內(包含大括號本身)
i' 單引號內
a' 單引號內(包含單引號本身)
i" 雙引號內
a" 雙引號內(包含雙引號本身)
##############################################################################
# 查詢替換
##############################################################################
/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
:%s/1\\2\/3/123/g 將“1\2/3” 替換為 “123”(特殊字元使用反斜槓標註)
##############################################################################
# 位置跳轉
##############################################################################
CTRL-o 跳轉到上一個位置
CTRL-i 跳轉到下一個位置
CTRL-^ 跳轉到 alternate file (當前視窗的上一個檔案)
% 跳轉到 {} () [] 的匹配
gd 跳轉到定義
[[ 跳轉到上一個頂層函式(比如C語言以大括號分隔)
]] 跳轉到下一個頂層函式(比如C語言以大括號分隔)
[m 跳轉到上一個成員函式
]m 跳轉到下一個成員函式
[{ 跳轉到上一處未匹配的 {
]} 跳轉到下一處未匹配的 }
[( 跳轉到上一處未匹配的 (
]) 跳轉到下一處未匹配的 )
[c 上一個不同處(diff時)
]c 下一個不同處(diff時)
[/ 跳轉到 C註釋開頭
]/ 跳轉到 C註釋結尾
##############################################################################
# VISUAL MODE - 由 v, V, CTRL-v 進入的可視模式
##############################################################################
> 增加縮排
< 減少縮排
d 刪除文字
c 改寫文字
y 拷貝文字
~ 轉換大小寫
o 跳轉到標記區的另外一端
O 跳轉到標記塊的另外一端
u 標記區轉換為小寫
U 標記區轉換為大寫
<Esc> 退出可視模式
##############################################################################
# 檔案操作
##############################################################################
:w 儲存檔案
:w <filename> 按名稱儲存檔案
:e <filename> 開啟檔案並編輯
:saveas <filename> 另存為檔案
:r <filename> 讀取檔案並將內容插入到游標後
:r !dir 將 dir 命令的輸出捕獲並插入到游標後
:close 關閉檔案
:q 退出
:q! 強制退出
:wa 儲存所有檔案
:cd <path> 切換 Vim 當前路徑
:pwd 顯示 Vim 當前路徑
gf 開啟名稱為游標下檔名的檔案
: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 關閉預覽視窗
##############################################################################
# 標籤頁
##############################################################################
:tabs 顯示所有標籤頁
:tabe <filename> 在新標籤頁中開啟檔案 filename
:tabn 下一個標籤頁
:tabp 上一個標籤頁
:tabc 關閉當前標籤頁
:tabo 關閉其他標籤頁
:tabn n 切換到第n個標籤頁,比如 :tabn 3 切換到第三個標籤頁
:tabm n 標籤移動
ngt 切換到第n個標籤頁,比如 2gt 將會切換到第二個標籤頁
gt 下一個標籤頁
gT 上一個標籤頁
##############################################################################
# 書籤
##############################################################################
:marks 顯示所有書籤
ma 儲存當前位置到書籤 a ,書籤名可以用 a-z 26個字母
'a 跳轉到書籤 a所在的行
`a 跳轉到書籤 a所在位置
`. 跳轉到上一次編輯的行
'A 跳轉到全文書籤 A
##############################################################################
# 常用設定
##############################################################################
: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 list 設定顯示製表符和換行符
:set number 設定顯示行號,禁止顯示行號可以用 :set nonumber
: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 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 set-termcap 檢視如何設定按鍵掃描碼
: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 摺疊所有程式碼,設定 foldlevel=0,設定 foldenable
zR 開啟所有程式碼,設定 foldlevel 為最大值
zn 摺疊 none,重置 foldenable 並開啟所有程式碼
zN 摺疊 normal,重置 foldenable 並恢復所有摺疊
zo 開啟一層程式碼
zO 開啟游標下所有程式碼摺疊
##############################################################################
# 巨集錄製
##############################################################################
qa 開始錄製名字為 a 的巨集
q 結束錄製巨集
@a 播放名字為 a 的巨集
@: 播放上一個巨集
##############################################################################
# 其他命令
##############################################################################
CTRL-E 向上卷屏
CTRL-Y 向下卷屏
CTRL-G 顯示正在編輯的檔名,以及大小和位置資訊
zz 調整游標所在行到螢幕中央
zt 調整游標所在行到螢幕上部
zb 調整游標所在行到螢幕下部
ga 顯示游標下字元的 ascii 碼或者 unicode 編碼
K 查詢游標下單詞的幫助
:set ff=unix 設定換行為 unix
:set ff=dos 設定換行為 dos
:set ff? 檢視換行設定
:set nohl 清除搜尋高亮
:earlier 15m 回退到15分鐘前的檔案內容
:.!date 在當前視窗插入時間
:%!xxd 開始二進位制編輯
:%!xxd -r 儲存二進位制編輯
:r !curl -sL {URL} 讀取 url 內容新增到游標後
##############################################################################
# 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/godlygeek/tabular
##############################################################################
:Tabularize /, 按逗號對齊
:Tabularize /= 按等於號對齊
:Tabularize /\| 按豎線對齊
:Tabularize /\|/r0 按豎線靠右對齊
##############################################################################
# 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/vim-scripts/argtextobj.vim
##############################################################################
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
五分鐘指令碼入門 http://andrewscala.com/vimscript/
指令碼精通 http://learnvimscriptthehardway.stevelosh.com/
中文指令碼幫助 vimcdoc.sourceforge.net/doc/eval.html
##############################################################################
# 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/
# vim: set ts=4 sw=4 tw=0 noet noautoindent :
# VIM CHEATSHEET (中文速查表) - by skywind (created on 2017/10/12)
# Version: 20, Last Modified: 2018/02/24 14:30
# https://github.com/skywind3000/awesome-cheatsheets
##############################################################################
##############################################################################
# 游標移動
##############################################################################
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 的字元
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 插入暫存器(內部剪貼簿編號)內容
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),快速輸入日文或符號等
##############################################################################
# 文字編輯
##############################################################################
r 替換當前字元
R 進入替換模式,直至 ESC 離開
s 替換字元(刪除游標處字元,並進入插入模式,前可接數量)
S 替換行(刪除當前行,並進入插入模式,前可接數量)
cc 改寫當前行(刪除當前行並進入插入模式),同 S
cw 改寫游標開始處的當前單詞
ciw 改寫游標所處的單詞
caw 改寫游標所處的單詞,並且包括前後空格(如果有的話)
c0 改寫到行首
c^ 改寫到行首(第一個非零字元)
c$ 改寫到行末
ci" 改寫雙引號中的內容
ci' 改寫單引號中的內容
ci) 改寫小括號中的內容
ci] 改寫中括號中內容
ci} 改寫大括號中內容
cit 改寫 xml tag 中的內容
cis 改寫當前句子
c2w 改寫下兩個單詞
ct( 改寫到小括號前
x 刪除當前字元,前面可以接數字,3x代表刪除三個字元
X 向前刪除字元
dd 刪除當前行
d0 刪除到行首
d^ 刪除到行首(第一個非零字元)
d$ 刪除到行末
D 刪除到行末(同 d$)
dw 刪除當前單詞
diw 刪除游標所處的單詞
daw 刪除游標所處的單詞,幷包含前後空格(如果有的話)
di" 刪除雙引號中的內容
di' 刪除單引號中的內容
di) 刪除小括號中的內容
di] 刪除中括號中內容
di} 刪除大括號中內容
dit 刪除 xml tag 中的內容
dis 刪除當前句子
d2w 刪除下兩個單詞
dt( 刪除到小括號前
dgg 刪除到檔案頭部
dG 刪除到檔案尾部
d} 刪除下一段
d{ 刪除上一段
u 撤銷
U 撤銷整行操作
CTRL-R 重複
J 連結多行為一行
. 重複上一次操作
~ 替換大小寫
g~iw 替換當前單詞的大小寫
gUiw 將單詞轉成大寫
guiw 將當前單詞轉成小寫
<< 減少縮排
>> 增加縮排
== 自動縮排
CTRL-a 增加數字
CTRL-x 減少數字
##############################################################################
# 複製貼上
##############################################################################
p 貼上到游標後
P 貼上到游標前
v 開始標記
y 複製標記內容
V 開始按行標記
CTRL-v 開始列標記
y$ 複製當前位置到本行結束的內容
Y 複製到行末,同 yy
yy 複製當前行
yiw 複製當前單詞
3yy 複製游標下三行內容
v0 選中當前位置到行首
v$ 選中當前位置到行末
viw 選中當前單詞
vi) 選中小括號內的東西
vi] 選中中括號內的東西
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 交換兩行內容:先刪除當前行復制到暫存器,並貼上
##############################################################################
# 文字物件 - c,d,v,y 等命令後接文字物件,一般為:<範圍 i/a><型別>
##############################################################################
$ 到行末
0 到行首
^ 到行首非空字元
tx 游標位置到字元 x 之前
fx 游標位置到字元 x 之處
iw 整個單詞(不包括分隔符)
aw 整個單詞(包括分隔符)
iW 整個 WORD(不包括分隔符)
aW 整個 WORD(包括分隔符)
is 整個句子(不包括分隔符)
is 整個句子(不包括分隔符)
i) 小括號內
a) 小括號內(包含小括號本身)
i] 中括號內
a] 中括號內(包含中括號本身)
i} 大括號內
a} 大括號內(包含大括號本身)
i' 單引號內
a' 單引號內(包含單引號本身)
i" 雙引號內
a" 雙引號內(包含雙引號本身)
##############################################################################
# 查詢替換
##############################################################################
/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
:%s/1\\2\/3/123/g 將“1\2/3” 替換為 “123”(特殊字元使用反斜槓標註)
##############################################################################
# 位置跳轉
##############################################################################
CTRL-o 跳轉到上一個位置
CTRL-i 跳轉到下一個位置
CTRL-^ 跳轉到 alternate file (當前視窗的上一個檔案)
% 跳轉到 {} () [] 的匹配
gd 跳轉到定義
[[ 跳轉到上一個頂層函式(比如C語言以大括號分隔)
]] 跳轉到下一個頂層函式(比如C語言以大括號分隔)
[m 跳轉到上一個成員函式
]m 跳轉到下一個成員函式
[{ 跳轉到上一處未匹配的 {
]} 跳轉到下一處未匹配的 }
[( 跳轉到上一處未匹配的 (
]) 跳轉到下一處未匹配的 )
[c 上一個不同處(diff時)
]c 下一個不同處(diff時)
[/ 跳轉到 C註釋開頭
]/ 跳轉到 C註釋結尾
##############################################################################
# VISUAL MODE - 由 v, V, CTRL-v 進入的可視模式
##############################################################################
> 增加縮排
< 減少縮排
d 刪除文字
c 改寫文字
y 拷貝文字
~ 轉換大小寫
o 跳轉到標記區的另外一端
O 跳轉到標記塊的另外一端
u 標記區轉換為小寫
U 標記區轉換為大寫
<Esc> 退出可視模式
##############################################################################
# 檔案操作
##############################################################################
:w 儲存檔案
:w <filename> 按名稱儲存檔案
:e <filename> 開啟檔案並編輯
:saveas <filename> 另存為檔案
:r <filename> 讀取檔案並將內容插入到游標後
:r !dir 將 dir 命令的輸出捕獲並插入到游標後
:close 關閉檔案
:q 退出
:q! 強制退出
:wa 儲存所有檔案
:cd <path> 切換 Vim 當前路徑
:pwd 顯示 Vim 當前路徑
gf 開啟名稱為游標下檔名的檔案
: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 關閉預覽視窗
##############################################################################
# 標籤頁
##############################################################################
:tabs 顯示所有標籤頁
:tabe <filename> 在新標籤頁中開啟檔案 filename
:tabn 下一個標籤頁
:tabp 上一個標籤頁
:tabc 關閉當前標籤頁
:tabo 關閉其他標籤頁
:tabn n 切換到第n個標籤頁,比如 :tabn 3 切換到第三個標籤頁
:tabm n 標籤移動
ngt 切換到第n個標籤頁,比如 2gt 將會切換到第二個標籤頁
gt 下一個標籤頁
gT 上一個標籤頁
##############################################################################
# 書籤
##############################################################################
:marks 顯示所有書籤
ma 儲存當前位置到書籤 a ,書籤名可以用 a-z 26個字母
'a 跳轉到書籤 a所在的行
`a 跳轉到書籤 a所在位置
`. 跳轉到上一次編輯的行
'A 跳轉到全文書籤 A
##############################################################################
# 常用設定
##############################################################################
: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 list 設定顯示製表符和換行符
:set number 設定顯示行號,禁止顯示行號可以用 :set nonumber
: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 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 set-termcap 檢視如何設定按鍵掃描碼
: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 摺疊所有程式碼,設定 foldlevel=0,設定 foldenable
zR 開啟所有程式碼,設定 foldlevel 為最大值
zn 摺疊 none,重置 foldenable 並開啟所有程式碼
zN 摺疊 normal,重置 foldenable 並恢復所有摺疊
zo 開啟一層程式碼
zO 開啟游標下所有程式碼摺疊
##############################################################################
# 巨集錄製
##############################################################################
qa 開始錄製名字為 a 的巨集
q 結束錄製巨集
@a 播放名字為 a 的巨集
@: 播放上一個巨集
##############################################################################
# 其他命令
##############################################################################
CTRL-E 向上卷屏
CTRL-Y 向下卷屏
CTRL-G 顯示正在編輯的檔名,以及大小和位置資訊
zz 調整游標所在行到螢幕中央
zt 調整游標所在行到螢幕上部
zb 調整游標所在行到螢幕下部
ga 顯示游標下字元的 ascii 碼或者 unicode 編碼
K 查詢游標下單詞的幫助
:set ff=unix 設定換行為 unix
:set ff=dos 設定換行為 dos
:set ff? 檢視換行設定
:set nohl 清除搜尋高亮
:earlier 15m 回退到15分鐘前的檔案內容
:.!date 在當前視窗插入時間
:%!xxd 開始二進位制編輯
:%!xxd -r 儲存二進位制編輯
:r !curl -sL {URL} 讀取 url 內容新增到游標後
##############################################################################
# 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/godlygeek/tabular
##############################################################################
:Tabularize /, 按逗號對齊
:Tabularize /= 按等於號對齊
:Tabularize /\| 按豎線對齊
:Tabularize /\|/r0 按豎線靠右對齊
##############################################################################
# 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/vim-scripts/argtextobj.vim
##############################################################################
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
五分鐘指令碼入門 http://andrewscala.com/vimscript/
指令碼精通 http://learnvimscriptthehardway.stevelosh.com/
中文指令碼幫助 vimcdoc.sourceforge.net/doc/eval.html
##############################################################################
# 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/
# vim: set ts=4 sw=4 tw=0 noet noautoindent :