vim 编程常用的指令和快捷键
文章目錄
- 移動(dòng)光標(biāo)
- 修改、剪切或復(fù)制配對(duì)符之間的內(nèi)容
- ctags
- cscope
- gtags
- 編譯
- 快速修改窗口
- 自動(dòng)補(bǔ)全
- 多行縮進(jìn)縮出
- 折疊
移動(dòng)光標(biāo)
| gd | 跳轉(zhuǎn)到局部變量的定義處 |
| gD | 跳轉(zhuǎn)到全局變量的定義處,從當(dāng)前文件開(kāi)頭開(kāi)始搜索 |
| g; | 上一個(gè)修改過(guò)的地方 |
| g, | 下一個(gè)修改過(guò)的地方 |
| [[ | 跳轉(zhuǎn)到上一個(gè)函數(shù)塊開(kāi)始,需要有單獨(dú)一行的 { |
| ]] | 跳轉(zhuǎn)到下一個(gè)函數(shù)塊開(kāi)始,需要有單獨(dú)一行的 { |
| [] | 跳轉(zhuǎn)到上一個(gè)函數(shù)塊結(jié)束,需要有單獨(dú)一行的 } |
| ][ | 跳轉(zhuǎn)到下一個(gè)函數(shù)塊結(jié)束,需要有單獨(dú)一行的 } |
| [{ | 跳轉(zhuǎn)到當(dāng)前塊開(kāi)始處 |
| ]} | 跳轉(zhuǎn)到當(dāng)前塊結(jié)束處 |
| [/ | 跳轉(zhuǎn)到當(dāng)前注釋塊開(kāi)始處 |
| ]/ | 跳轉(zhuǎn)到當(dāng)前注釋塊結(jié)束處 |
| % | 不僅能移動(dòng)到匹配的 (),{} 或 [] 上,而且能在 #if,#else, #endif 之間跳躍 |
注:上述命令是在普通命令模式輸入
修改、剪切或復(fù)制配對(duì)符之間的內(nèi)容
| ci'、di'、yi' | 修改、剪切或復(fù)制 ' 之間的內(nèi)容。 |
| ca'、da'、ya' | 修改、剪切或復(fù)制 ' 之間的內(nèi)容,包含 '。 |
| ci"、di"、yi" | 修改、剪切或復(fù)制 " 之間的內(nèi)容。 |
| ca"、da"、ya" | 修改、剪切或復(fù)制 " 之間的內(nèi)容,包含 "。 |
| ci(、di(、yi( | 修改、剪切或復(fù)制 () 之間的內(nèi)容。 |
| ca(、da(、ya( | 修改、剪切或復(fù)制 () 之間的內(nèi)容,包含 ()。 |
| ci[、di[、yi[ | 修改、剪切或復(fù)制 [] 之間的內(nèi)容。 |
| ca[、da[、ya[ | 修改、剪切或復(fù)制 [] 之間的內(nèi)容,包含 []。 |
| ci{、di{、yi{ | 修改、剪切或復(fù)制 {} 之間的內(nèi)容。 |
| ca{、da{、ya{ | 修改、剪切或復(fù)制 {} 之間的內(nèi)容,包含 {}。 |
| ci<、di<、yi< | 修改、剪切或復(fù)制 <> 之間的內(nèi)容。 |
| ca<、da<、ya< | 修改、剪切或復(fù)制 <> 之間的內(nèi)容,包含 <>。 |
注:上述命令是在普通命令模式輸入
ctags
| ctags -R | 這不是 ex 命令,而是 shell 命令,生成 tag 文件,-R 表示也為子目錄中的文件生成 tags |
| set tags=path/tags | 告訴 ctags 使用哪個(gè) tag 文件 |
| tag xyz | 跳到xyz 的定義處,或者將光標(biāo)放在 xyz 上按 C-],返回用 C-t |
| stag xyz | 用分割的窗口顯示 xyz 的定義,或者 C-w ], 如果用 C-w n ],就會(huì)打開(kāi)一個(gè) n 行高的窗口 |
| ptag xyz | 在預(yù)覽窗口中打開(kāi) xyz 的定義,熱鍵是 C-w } |
| pclose | 關(guān)閉預(yù)覽窗口。熱鍵是 C-w z |
| pedit abc.h | 在預(yù)覽窗口中編輯 abc.h |
| psearch abc | 搜索當(dāng)前文件和當(dāng)前文件 include 的文件,顯示包含 abc 的行 |
注:以上命令是在底行命令模式下輸入。
有時(shí)一個(gè) tag 可能有多個(gè)匹配,如函數(shù)重載,一個(gè)函數(shù)名就會(huì)有多個(gè)匹配。 這種情況會(huì)先跳轉(zhuǎn)到第一個(gè)匹配處。
| [n]tnext | 下一 [n] 個(gè)匹配 |
| [n]tprev | 上一 [n] 個(gè)匹配 |
| tfirst | 第一個(gè)匹配 |
| tlast | 最后一個(gè)匹配 |
| tselect tagname | 打開(kāi)選擇列表 |
注:以上命令是在底行命令模式下輸入。
tab 鍵補(bǔ)齊:
| tag xyz<tab> | 補(bǔ)齊以 xyz 開(kāi)頭的 tag 名,繼續(xù)按 tab 鍵,會(huì)顯示其他的。 |
| tag /xyz<tab> | 會(huì)用名字中含有 xyz 的 tag 名補(bǔ)全。 |
注:以上命令是在底行命令模式下輸入。
cscope
| cscope -Rbq | 此命令不是 ex 命令,而是 shell 指令。生成 cscope.out 文件 |
| cs add /path/to/cscope.out /your/work/dir | |
| cs find c func | 查找 func 在哪些地方被調(diào)用 |
| cw | 打開(kāi) quickfix 窗口查看結(jié)果 |
注:以上命令是在底行命令模式下輸入。
gtags
Gtags 綜合了 ctags 和 cscope 的功能。 使用 Gtags 之前,你需要安裝 GNU Gtags。 然后在工程目錄運(yùn)行 gtags 。
| Gtags funcname | 定位到 funcname 的定義處 |
| Gtags -r funcname | 查詢 funcname被引用的地方 |
| Gtags -s symbol | 定位 symbol 出現(xiàn)的地方 |
| Gtags -g string Goto string | 出現(xiàn)的地方。 |
| Gtags -gi string | 忽略大小寫(xiě) |
| Gtags -f filename | 顯示 filename 中的函數(shù)列表。 |
| Gtags -f % | 顯示當(dāng)前文件 |
| Gtags -P pattern | 顯示路徑中包含特定模式的文件。 如 Gtags -P .h$ 顯示所有頭文件,Gtags -P /vm/ 顯示 vm 目錄下的文件 |
注:以上命令是在底行命令模式下輸入。
編譯
vim 提供了 make 來(lái)編譯程序,默認(rèn)調(diào)用的是 make, 如果你當(dāng)前目錄下有 makefile,在底行命令模式直接輸入 make 即可。
如果你沒(méi)有 make 程序,你可以通過(guò)配置 makeprg 選項(xiàng)來(lái)更改 make 調(diào)用的程序。 如果你只有一個(gè) abc.java 文件,你可以在底行命令模式下輸入以下命令:
set makeprg=javac\ abc.java然后在底行命令模式下輸入 make 即可。如果程序有錯(cuò),可以通過(guò) quickfix 窗口查看錯(cuò)誤。 不過(guò)如果要正確定位錯(cuò)誤,需要設(shè)置好errorformat,讓 vim 識(shí)別錯(cuò)誤信息。 在底行命令模式下輸入:
setl efm=%A%f:%l:\ %m、%-Z%p^、%-C%.%#%f 表示文件名,%l 表示行號(hào), %m 表示錯(cuò)誤信息,其它的還不能理解。 請(qǐng)?jiān)诘仔忻钅J较螺斎?help errorformat 查看幫助文檔。
快速修改窗口
其實(shí)是 quickfix 插件提供的功能, 對(duì)編譯調(diào)試程序非常有用。
| copen | 打開(kāi)快速修改窗口 |
| cclose | 關(guān)閉快速修改窗口 |
注:上述命令是在底行命令模式下輸入。
快速修改窗口在 make 程序時(shí)非常有用,當(dāng) make 之后:
| cl | 在快速修改窗口中列出錯(cuò)誤 |
| cn | 定位到下一個(gè)錯(cuò)誤 |
| cp | 定位到上一個(gè)錯(cuò)誤 |
| cr | 定位到第一個(gè)錯(cuò)誤 |
注:上述命令是在底行命令模式下輸入。
自動(dòng)補(bǔ)全
| C-x C-s | 拼寫(xiě)建議。 |
| C-x C-v | 補(bǔ)全vim選項(xiàng)和命令。 |
| C-x C-l | 整行補(bǔ)全。 |
| C-x C-f | 自動(dòng)補(bǔ)全文件路徑。彈出菜單后,按C-f循環(huán)選擇,當(dāng)然也可以按 C-n和C-p。 |
| C-x C-p 和C-x C-n | 用文檔中出現(xiàn)過(guò)的單詞補(bǔ)全當(dāng)前的詞。 直接按C-p和C-n也可以。 |
| C-x C-o | 編程時(shí)可以補(bǔ)全關(guān)鍵字和函數(shù)名啊。 |
| C-x C-i | 根據(jù)頭文件內(nèi)關(guān)鍵字補(bǔ)全。 |
| C-x C-d | 補(bǔ)全宏定義。 |
| C-x C-n | 按緩沖區(qū)中出現(xiàn)過(guò)的關(guān)鍵字補(bǔ)全。 直接按C-n或C-p即可。 |
當(dāng)彈出補(bǔ)全菜單后:
| C-p | 向前切換成員 |
| C-n | 向后切換成員 |
| C-e | 退出下拉菜單,并退回到原來(lái)錄入的文字 |
| C-y | 退出下拉菜單,并接受當(dāng)前選項(xiàng) |
多行縮進(jìn)縮出
| >> | 將光標(biāo)所在行右移 8 個(gè)空格。如果在 >> 命令之前給出一個(gè)數(shù)字 n,例如 4,則表示光標(biāo)當(dāng)前行及其下面的 3 行(共 4 行)都右移 8 個(gè)空格 |
| << | 其使用與>>命令相同,只是移動(dòng)方向相反 |
注:以上命令在普通命令模式下輸入。
| > | 被選中的行向右移動(dòng) 8 個(gè)空格,并返回到“普通命令模式”下 |
| < | 被選中的行向左移動(dòng) 8 個(gè)空格,并返回到“普通命令模式”下 |
| = | 如果在編輯代碼文件,選擇要調(diào)整的代碼塊,按 =,代碼會(huì)按書(shū)寫(xiě)規(guī)則縮排好。或者 n =,調(diào)整 n 行代碼的縮排 |
注:以上命令在可視模式下輸入。
折疊
| zf | 創(chuàng)建折疊的命令,可以在一個(gè)可視區(qū)域上使用該命令 |
| zd | 刪除當(dāng)前行的折疊 |
| zD | 刪除當(dāng)前行的折疊 |
| zfap | 折疊光標(biāo)所在的段 |
| zo | 打開(kāi)折疊的文本 |
| zc | 收起折疊 |
| za | 打開(kāi)/關(guān)閉當(dāng)前折疊 |
| zr | 打開(kāi)嵌套的折行 |
| zm | 收起嵌套的折行 |
| zR (zO) | 打開(kāi)所有折行 |
| zM (zC) | 收起所有折行 |
| zj | 跳到下一個(gè)折疊處 |
| zk | 跳到上一個(gè)折疊處 |
| zi | enable/disable fold |
注:以上命令在“普通命令模式”下輸入。
總結(jié)
以上是生活随笔為你收集整理的vim 编程常用的指令和快捷键的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: snapchat怎么注册(snapcha
- 下一篇: 方舟生存进化睡觉快捷键(方舟生存进化快捷