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