VIM常用技巧总结
其實(shí)早就想整這篇總結(jié)了,一直沒有時(shí)間寫,鑒于李老板的強(qiáng)烈要求,今天更新上來。
VIM作為linux環(huán)境下一個(gè)非常強(qiáng)大的工具,其實(shí)是非常實(shí)用了,尤其是對(duì)于代碼量龐大的項(xiàng)目來講,簡(jiǎn)直就是福音。無法想象在一個(gè)集成IDE里面添加幾萬甚至百萬個(gè)文件個(gè)文件時(shí),你還能指望IDE能夠快速的進(jìn)行代碼的快速瀏覽跳轉(zhuǎn),但是VIM就可以輕松做到。
在默認(rèn)安裝的VIM中,其實(shí)沒有帶多少插件,但其自帶的基本功能,也能滿足普通的文本編輯需求。但是如果是經(jīng)常使用VIM來查看閱讀代碼,那必須對(duì)默認(rèn)的VIM進(jìn)行一些強(qiáng)化,才能使其用起來更加順手和方便。
本文所描述的一些使用技巧,很多都是在各種VIM插件的基礎(chǔ)上進(jìn)行操作的,如果沒有這些操作的支持,你可能無法在你的機(jī)器上面進(jìn)行這些操作。不過沒有關(guān)系,我已經(jīng)把自己的VIM配置上傳到github上,你可以直接下載下來使用,也可以對(duì)其進(jìn)行修改以適配你自己的使用習(xí)慣。下面我分兩部分來介紹vim的基本操作,當(dāng)前這里不會(huì)介紹VIM的所有功能,只是介紹一些平常經(jīng)常使用的基本操作。
1. VIM基本功能
其實(shí)VIM本身就已經(jīng)自帶的非常多的功能,這些操作基本是純鍵盤操作,對(duì)應(yīng)習(xí)慣了Window環(huán)境的人來說,其實(shí)是很難習(xí)慣的。但是,一旦你習(xí)慣vim的操作后,將會(huì)發(fā)現(xiàn)它直接非常的實(shí)用,非常強(qiáng)大。
1.1 VIM的常用模式
- 正常(normal)模式:默認(rèn)的編輯模式;下面如果不加特殊說明,提到的命令都直接在正常模式下輸入“:”,任何其它模式中都可以通過鍵盤上的 Esc 鍵回到正常模式。
- 命令(command)模式:用于執(zhí)行較長(zhǎng)、較復(fù)雜的命令;在正常模式下輸入“:”(一般命令)、“/”(正向搜索)或“?”(反向搜索)即可進(jìn)入該模式;命令模式下的命令要輸入回車鍵(Enter)才算完成。
- 插入(insert)模式:輸入文本時(shí)使用;在正常模式下鍵入“i”(insert)或“a”(append)即可進(jìn)入插入模式(也有另外一些命令,如“c”,也可以進(jìn)入插入模式,但這些命令有其它的作用)。
- 可視(visual)模式:用于選定文本塊;可以在正常模式下輸入“v”(小寫)來按字符選定,輸入“V”(大寫)來按行選定,或輸入“Ctrl-V”來按方塊選定
1.2 基本移動(dòng)
下面幾個(gè)命令需要在normal模式執(zhí)行
- h:光標(biāo)左移一個(gè)位置
- j:光標(biāo)右移一個(gè)位置
- k:光標(biāo)上移一個(gè)位置
- l:光標(biāo)下稱一個(gè)位置
- gg:光標(biāo)跳轉(zhuǎn)到文件首行
- G:光標(biāo)跳轉(zhuǎn)文件最后一行
- _:光標(biāo)移到當(dāng)前行第一個(gè)非空字符位置
- 行號(hào)+gg:快速移動(dòng)到指定行號(hào)
- 數(shù)字+h/j/k/l:快速將光標(biāo)向左、下、上、右移動(dòng)指定個(gè)位置
1.3 窗口操作
窗口分割
- :vsp:橫向窗口分割
- :sp:縱向窗口分割
- ctrl+w+h:將光標(biāo)切換到左邊窗口
- ctrl+w+j:將光標(biāo)切換到下邊窗口
- ctrl+w+k:將光標(biāo)切換到上邊窗口
- ctrl+w+l:將光標(biāo)切換到右邊窗口
- ctrl+w:在已打開窗口中循環(huán)切換光標(biāo)
- :resize +3:縱向擴(kuò)大窗口大小
- :resize -3:縱向減小窗口大小
- :vertical resize +3:橫向擴(kuò)大窗口大小
- :vertical resize -3:橫向減小窗口大小
調(diào)整窗口大小
- :resize +3:縱向擴(kuò)大窗口大小
- :resize -3:縱向減小窗口大小
- :vertical resize +3:橫向擴(kuò)大窗口大小
- :vertical resize -3:橫向減小窗口大小
1.4 粘貼與復(fù)制
normal模式下,撤下 i 鍵進(jìn)入insert模式,此時(shí)可以直接編輯當(dāng)前文件。 normal模式下的幾個(gè)基本文件編輯操作:
- y:復(fù)制當(dāng)前光標(biāo)所在處字符
- yy:復(fù)制當(dāng)前光標(biāo)所在行
- p:在當(dāng)前位置粘貼上一次復(fù)制的內(nèi)容
先按下v鍵進(jìn)入view模式,通過移動(dòng)h/j/k/l鍵選擇要復(fù)制的內(nèi)容,再按下y鍵可復(fù)制單詞或整段文件,然后移動(dòng)光標(biāo)至目標(biāo)位置,再使用p進(jìn)行粘貼。
1.5 文件瀏覽
- :Explore或:E:打開VIM默認(rèn)的文件瀏覽器
1.6 VIM快捷鍵大全
網(wǎng)上搜集的VIM常用快捷鍵匯總圖,非常實(shí)用。
?
?
2. VIM私人定制
前面介紹了VIM的一些常用的基本的操作,其實(shí)這些只是VIM的基本入門操作,它還有很多其他的操作和功能,這里不詳細(xì)介紹,有需要的朋友,可以直接:help查看VIM的幫忙以學(xué)習(xí)更多的操作方法。
下面開始我們的定制部分,這一部分主要介紹一些常用的VIM插件。沒有安裝插件的VIM已經(jīng)為我們提供了相當(dāng)多的功能,但是有些功能用起來非常難受。好在大牛們針對(duì)VIM開發(fā)了很多實(shí)用插件,這大大簡(jiǎn)化了VIM的操作。下面主要介紹一些平常開發(fā)中常用的插件的使用方法。
我的VIM配置:https://github.com/tshfut/tSuai_vim
我自己設(shè)置的幾個(gè)常用快捷鍵:
- F2:打開左側(cè)的文件列表
- F3:打開類視圖,即查看當(dāng)前文件的類及其成員屬性(在右側(cè))
- F4:查看當(dāng)前已打開的文件列表
- F5:在當(dāng)前文件中快速查找函數(shù)并
- F6:在當(dāng)前目錄中快速查找文件(模糊搜索)
- \+m:(取消)高亮光標(biāo)當(dāng)前所在詞
- \+n:取消所有高亮詞
- \+nm:設(shè)置不顯示行號(hào)
- \+mn:設(shè)置顯示行號(hào)
- \+rr:將左側(cè)的文件目錄樹切換到當(dāng)前文件所在目錄
- \+ff:從vim進(jìn)入命令行狀態(tài),以exit命令兩次回到vim狀態(tài)
- \+jj:切換到深色模式
- \+ll:切換至淺色模式
- \+s:查看當(dāng)前光標(biāo)所在行的git提交記錄(changeid,author,time等)
- :ag:在當(dāng)前目錄中搜索光標(biāo)所在處詞出現(xiàn)的地方
- w+,:橫向減小窗口
- w+.:橫向擴(kuò)大窗口
- w+=:縱向增大窗口
- w+-:縱向減小窗口
- ctrl+\+s/g/c/t/e/f/i/d:快速代碼跟蹤命令,依賴cscope插件創(chuàng)建的tag文件
- g+]:跳轉(zhuǎn)到函數(shù)出現(xiàn)的地方,依賴于ctag創(chuàng)建的tags文件
?
2.1 主題定制
VIM默認(rèn)提供了很多主題,但我獨(dú)愛Visual studio的默認(rèn)淺色主題,而這個(gè)主題VIM里面卻沒有,無賴只能自己動(dòng)手定制,只需要找一個(gè)已經(jīng)存在的vim主題,copy一份放到.vim/colors目錄下,然后根據(jù)里面的配置選項(xiàng),設(shè)置自己喜歡的顏色即可。
配置好后,直接在.vimrc文件里面將自己的VIM主題設(shè)置為默認(rèn)即可: ?colorscheme Porsche
colorscheme space-vim-dark
我自己的經(jīng)常使用的vim主題主要有兩個(gè),一個(gè)淺色(類似Visual Studio),一個(gè)深色(space-vim-dark),都放下github上面了地址:
https://github.com/tshfut/Porsche
????上兩個(gè)配色截圖:
??
2.2 NERDTree文件瀏覽
????前面介紹了,使用:Explore命令可以查看文件目錄樹,但仍然覺得不方便,可以使用NERDTree插件來替代,NERDTree提供了非常好的文件目錄可視化操作,支持文件展開、文件夾/文件區(qū)分標(biāo)識(shí)等。
????相關(guān)的配置如下:
"let g:NERDTree_title='NERD Tree' "let g:winManagerWindowLayout='NERDTree|TagList,Tarbar' nmap <silent> mt :if IsWinManagerVisible() <BAR> WMToggle<CR> <BAR> else <BAR> WMToggle<CR>:q<CR> endif "<CR> nmap wm :NERDTreeToggle<cr> autocmd vimenter * NERDTree autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") ) | q | endiffunction! NERDTree_Start()exec 'NERDTree' endfunctionfunction! NERDTree_IsValid()return 1 endfunction?
????使用效果如下圖所示:
?
2.3 EasyMotion快速移動(dòng)
如果只使用h/j/k/l進(jìn)行移動(dòng),難免顯得有些慢,當(dāng)然,可以也VIM的鼠標(biāo)控制,利用鼠標(biāo)來移動(dòng)光標(biāo),但是這就失去了鍵盤操作帶來的一致性。EasyMotion這個(gè)插件很好的解決了屏幕顯示范圍內(nèi),精準(zhǔn)快速移動(dòng)光標(biāo)的問題。其他使用方法很簡(jiǎn)單:
1. 首先按 s 鍵,然后輸入想要跳轉(zhuǎn)的位置的前兩個(gè)字母,此時(shí)屏幕會(huì)高亮提示所有匹配的位置
2. 根據(jù)屏幕提示,輸入目標(biāo)位置對(duì)應(yīng)的標(biāo)記,就可以直接跳轉(zhuǎn)到對(duì)應(yīng)位置
?使用效果圖如下,我先是查找了有ng關(guān)鍵字的位置,下面:
2.3 mark單詞高亮
這里的單詞高亮,不是vim里面的語法高亮,高亮指定詞。插件mark.vim提供了非常棒的單詞高亮,默認(rèn)支持5個(gè)高亮顏色,其實(shí)可以自己再添加,我又添加了5個(gè),10個(gè)基本上已經(jīng)夠用。
使用方法:
- \+m:高亮(或取消高亮)光標(biāo)所在詞
- \+n:取消所有高亮詞
??? 使用效果如下圖所示,高亮了函數(shù)的3個(gè)入?yún)?#xff0c;極大的方便了代碼閱讀:
?
2.4? fzf文件模糊搜索
對(duì)于類似android源碼這樣的巨型項(xiàng)目來講,在眾多的源文件中搜索某個(gè)文件是非常痛苦的。然而,fzf這個(gè)模糊搜索工具很好的解決了這個(gè)問題,fzf并不是vim插件,但是他可以無縫的與vim進(jìn)行配合使用。
安裝好fzf后,直接在vim中執(zhí)行:fzf命令,即可進(jìn)行快速文件查找。
?
2.5 bufexplorer已打開文件列表查詢
通常,我們需要在vim中同時(shí)打開多個(gè),在多個(gè)文件之間進(jìn)行來回切換時(shí),vim自帶的功能可以實(shí)現(xiàn),但是并不是很方便,幸好有bufexplorer.vim,他可以幫忙我們快速地查看已經(jīng)打開了的文件列表,如下圖所示:
bufexplorer下載地址:https://www.vim.org/scripts/script.php?script_id=42
?
2.6 airline標(biāo)題和狀態(tài)欄
?????? 一般的IDE工具,都會(huì)有一個(gè)tab列表,標(biāo)識(shí)不同的文件;還有一個(gè)狀態(tài)欄,顯示當(dāng)前編輯文件或項(xiàng)目的一些狀態(tài)信息。Airline給VIM帶來了一個(gè)非常漂亮的狀態(tài)欄,該狀態(tài)可以顯示很多信息:當(dāng)前文件所有的git分支、文件名、光標(biāo)所在函數(shù)名、文件總行數(shù)、當(dāng)前光標(biāo)所在行,當(dāng)前vim所處模式等等,最上面還有一個(gè)已經(jīng)打開的文件buffer列表(可惜無法直接用鼠標(biāo)點(diǎn)擊進(jìn)行切換)。使用效果如下圖所示:
?
2.7?Ctrlp
Ctrlp是Vim的模糊搜索工具,支持文件,緩沖區(qū),MRU(Most Recently Used)文件和標(biāo)簽等的搜索,也支持通過正則表達(dá)式搜索(Ctrl-r進(jìn)行切換),同類軟件還有 command-t,fzf等。ctrlp在速度上雖然有些遜色,但擴(kuò)展性好,而且因?yàn)槭怯杉僾imscript實(shí)現(xiàn)的,因此依賴少配置簡(jiǎn)單。
?
2.8 Ctags和Cscope
待補(bǔ)充
?
轉(zhuǎn)載于:https://www.cnblogs.com/tsts/p/10467251.html
總結(jié)
- 上一篇: FFmpeg command line
- 下一篇: 智能化招聘管理系统Moka完成B轮1.8