整合開發環境(IDE,Integrated Development Environment )是用於提供程式開發環境的應用程式,不管是Java、C還是Python,使用IDE程式設計可以幫你檢查語法、自動補全、後臺編譯等,寫程式碼就變得容易許多。另外,如果經常在伺服器上工作的小夥伴一定知道Vim在進行文字編輯的時候是多麼的方便。那麼當vim的高效編輯性和IDE輔助程式設計性相融合,豈不是天下無敵?
下面介紹7款常用外掛,幫你打造高可用性的VIM-IDEヾ(◍°∇°◍)ノ゙
Vim-plug
既然是要安裝外掛,自然是少不了外掛管理工具。當沒有外掛管理器時,Vim 使用者必須手動下載 tarball 包形式的外掛,並將它們解壓到 ~/.vim 目錄中。在少量外掛的時候可以。但當他們安裝更多的外掛時,就會變得一團糟。所有外掛檔案分散在單個目錄中,使用者無法找到哪個檔案屬於哪個外掛。此外,他們無法找到他們應該刪除哪個檔案來解除安裝外掛。這時 Vim 外掛管理器就可以派上用場。外掛管理器將安裝外掛的檔案儲存在單獨的目錄中,因此管理所有外掛變得非常容易。
Vim-plug 是一個自由、開源、速度非常快的、極簡的 vim 外掛管理器。它可以並行地安裝或更新外掛。你還可以回滾更新。它建立shallow clone最小化磁碟空間使用和下載時間。它支援按需載入外掛以加快啟動時間。其他值得注意的特性是支援分支/標籤/提交、post-update 鉤子、支援外部管理的外掛等[1]。
1.安裝
安裝和使用起來非常容易。你只需開啟終端並執行以下命令:
$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
2.配置
要安裝外掛,你必須如下所示首先在 Vim 配置檔案中宣告它們。一般 Vim 的配置檔案是~/.vimrc。請記住,當你在配置檔案中宣告外掛時,列表應該以 call plug#begin(PLUGIN_DIRECTORY) 開始,並以 plug#end() 結束。
例如,我們安裝 “lightline.vim” 外掛。為此,請在 ~/.vimrc 的頂部新增以下行
call plug#begin('~/.vim/plugged')Plug 'itchyny/lightline.vim'call plug#end()
3.使用
$ vim #開啟vim:PlugStatus #檢視外掛狀態:PlugInstall #安裝之前在配置檔案中宣告的外掛
安裝完的狀態如下所示
還有一些常用操作如下:
:PlugUpdate #更新外掛:PlugDiff #檢視外掛的變化狀態,簡單地回滾有問題的外掛。:PlugClean #刪除外掛
更多詳細細節參考: https://github.com/junegunn/vim-plug
coc.nvim
智慧補全類的外掛有很多,常見的有YouCompleteMe、deoplete.nvim、coc.nvim等,其中YCM被譽為傳說中最智慧的vim補全外掛了,其包括語法智慧補全、語法檢錯、函式跳轉等功能。但是其依賴環境複雜,而公司內網的開發機無法連線外網,一個個手動升級/安裝依賴實在傷不起?,逐放棄。最終在對比多款智慧補全外掛後,為同時兼顧易安裝性和易用性的前提下,選擇了智慧補全新秀coc.nvim。該外掛亮點如下[2]:
- 多種觸發方式,同時支援手工觸發。預設使用 always 自動模式表示輸入單詞首字母以及 trigger character 時觸發補全,可配置為 trigger 模式,表示僅在輸入 trigger character 時觸發,或者配置為 none,表示禁用自動觸發。任何觸發模式下都可使用繫結的快捷鍵進行手工觸發。
- 模糊匹配,智慧大小寫。同 YCM 等知名外掛。
- 多 source非同步併發獲取。同時非同步獲取不同 source 結果,效率更高。
- 支援透過刪除字元糾正錯誤輸入。為了提高過濾的效率,除非清空當前過濾字元,否則刪除過多的字元不會導致補全停止,而是觸發一次針對已有補全快取的重新過濾。
來看看補全效果吧~
1.安裝
coc.nvim依賴nodejs,所以首先要安裝nodejs
curl -sL install-node.now.sh/lts | bash
安裝coc.nvim,同樣需要用到vim-plug,在~/.vimrc檔案中配置
Plug 'neoclide/coc.nvim', {'branch': 'release'}
在vim命令列中輸入:CocInfo,若有類似以下資訊彈出表示外掛安裝成功
2.配置
coc.nvim只是一個平臺,它能夠允許你安裝各種語言外掛,達到不同語言的補全效果。因此我們只有安裝了對應的語言外掛才能實現補全。以C/C++為例:
透過在vim內的命令模式輸入:CocConfig來配置coc.nvim的配置檔案coc-settings.json
{"languageserver": { "clangd": { "command": "clangd", "rootPatterns": ["compile_flags.txt", "compile_commands.json"], "filetypes": ["c", "cc", "cpp", "c++", "objc", "objcpp"] } }}
Ps:這種配置模式下,coc主要是依賴clangd進行程式碼自動化補全,所以需要事先安裝好clangd。
對更多其他語言的支援可以參考:https://github.com/neoclide/coc.nvim/wiki/Language-servers#supported-features
配置完成後,就可以直接進行自動補全啦。
3.進階
剛才說了coc.nvim作為一個平臺,其本身也包含各種擴充套件,可以透過如下命令安裝一些該平臺的高階擴充套件外掛。比如,你不想配置上文說的CocConfig,也可以直接透過安裝coc-clangd外掛,就可以完成對C/C++的自動補全了。
安裝命令:CocInstall 外掛名
移除命令:CocUninstall 外掛名
檢視已安裝:CocList extensions
更新命令:CocUpdate
更多有趣的coc外掛參考 https://github.com/neoclide/coc.nvim
進一步的,你可以對coc進行對映擴充套件,使得更符合你的操作習慣。在~/.vimrc中進行如下配置
" Use `[g` and `]g` to navigate diagnosticsnmap <silent> [g <Plug>(coc-diagnostic-prev)nmap <silent> ]g <Plug>(coc-diagnostic-next)" GoTo code navigation.nmap <silent> gd <Plug>(coc-definition)nmap <silent> gy <Plug>(coc-type-definition)nmap <silent> gi <Plug>(coc-implementation)nmap <silent> gr <Plug>(coc-references)" Use K to show documentation in preview window.nnoremap <silent> K :call <SID>show_documentation()<CR>function! s:show_documentation() if (index(['vim','help'], &filetype) >= 0) execute 'h '.expand('<cword>') else call CocAction('doHover') endifendfunction
NERDTree
這個外掛是幾乎所有研發人員都會安裝的一個外掛——目錄樹,可以支援在不退出vim的編輯器的前提下,在檔案中快速切換,同時能讓開發人員快速掌握專案目錄結構,是提升開發效率必不可少的工具。預覽結果如下圖所示:
1.安裝
有了plug-vim安裝外掛就是如此的簡單
call plug#begin()Plug 'preservim/nerdtree'call plug#end()
2.配置
NERDTree預設無須配置即可直接使用,當然更改部分對映後,可以使得目錄樹試用起來更加得心應手。最常見的配置在~/.vimrc新增如下命令,即可使用Ctrl+n快速開啟目錄樹。
map <C-n> :NERDTreeToggle<CR>
3.使用
目錄樹的使用主要透過在vim的command模式下鍵入如下命令,即可達到相應的效果。
?: 快速幫助文件
o: 開啟一個目錄或者開啟檔案,建立的是 buffer,也可以用來開啟書籤
go: 開啟一個檔案,但是游標仍然留在 NERDTree,建立的是 buffer
t: 開啟一個檔案,建立的是Tab,對書籤同樣生效
T: 開啟一個檔案,但是游標仍然留在 NERDTree,建立的是 Tab,對書籤同樣生效
i: 水平分割建立檔案的視窗,建立的是 buffer
gi: 水平分割建立檔案的視窗,但是游標仍然留在 NERDTree
s: 垂直分割建立檔案的視窗,建立的是 buffer
gs: 和 gi,go 類似
x: 收起當前開啟的目錄
X: 收起所有開啟的目錄
e: 以檔案管理的方式開啟選中的目錄
D: 刪除書籤
leaderF
提到vim的模糊查詢外掛,很多人第一反應是ctrlp.vim,ctrlp知名度很高,但跟其它的同類外掛相比,它的唯一優點是用vimL編寫(這讓它的效能在同類外掛中並不算優秀)。這裡向大家推薦一款模糊查詢外掛——LeaderF,無論是從效能還是匹配精度上,都遠遠超越ctrlp[3]。
LeaderF是一個用Python寫的vim外掛,可以在成千上萬數十萬個檔案中,透過模糊查詢的方式,快速找到目標檔案。它還有很多衍生功能:快速開啟或定位某個buffer、最近使用的檔案(mru)、tags(包括函式、類、變數等)、命令歷史、檔案中的某一行、vim的help、marks等等。
1.安裝
安裝一如既往的簡單
Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }
2.使用
leaderF幾乎所有的搜尋特性都不需要額外的配置,只要裝好LeaderF外掛就可以使用了,不像有的外掛,配置就像一門新的指令碼語言。下面說一下常用的命令:LeaderfFile搜尋當前目錄下的檔案:LeaderfBuffer搜尋當前的Buffer:LeaderfMru 搜尋最近使用過的檔案( search most recently used files)就是Mru
:LeaderfLine 搜尋當前檔案中有的某個單詞
:LeaderfFunction 搜尋當前檔案的函式(這個很有意思,如下圖列出該檔案中所有的函式和變數)
auto-pairs
這個就是外掛的功能簡單而實用:在輸入/刪除左括號時,能自動補上/刪除右括號。
具體功能如下:
1.安裝
Plug 'jiangmiao/auto-pairs'
2.使用
開箱即用的外掛,無需過多的配置。
au Filetype FILETYPE let b:AutoPairs = {"(": ")"}au FileType php let b:AutoPairs = AutoPairsDefine({'<?' : '?>', '<?php': '?>'})
vim-airline
vim-airline是vim的底部狀態增強/美化外掛,很好的貫徹了程式碼能力怎麼樣我們先不提,這個逼格一定要先上來。
具體效果如圖所示,值得一提的是,當該外掛搭配具備程式碼檢測功能的外掛時,可以實時提示該檔案有多少個報錯和警告等有用資訊。
1.安裝
Plug 'vim-airline/vim-airline'Plug 'vim-airline/vim-airline-themes'
其中vim-airline-themes是主題外掛,可以使得狀態列的顏色更加豐富。
2.配置
set laststatus=2 "永遠顯示狀態列let g:airline_powerline_fonts = 1 " 支援 powerline 字型let g:airline#extensions#tabline#enabled = 1 “ 顯示視窗tab和bufferlet g:airline_theme='moloai' " murmur配色不錯if !exists('g:airline_symbols')let g:airline_symbols = {}endiflet g:airline_left_sep = '▶'let g:airline_left_alt_sep = '❯'let g:airline_right_sep = '◀'let g:airline_right_alt_sep = '❮'let g:airline_symbols.linenr = '¶'let g:airline_symbols.branch = '⎇'
NerdCommenter
如果你是一個酷愛寫註釋的程式設計師的話,那麼你一定要用一下nerdcommenter(當然,如果你不希望你的程式碼被後人吐槽的話,還是多寫註釋吧)。
NerdCommenter和Vim的Visual模式結合可以快速的註釋/取消註釋多行程式碼,同時在行尾追加註釋並自動進入Insert模式可以方便的進行行內註釋[4]。
1.安裝
Plug 'preservim/nerdcommenter'
2.配置
" Add spaces after comment delimiters by defaultlet g:NERDSpaceDelims = 1" Use compact syntax for prettified multi-line commentslet g:NERDCompactSexyComs = 1" Align line-wise comment delimiters flush left instead of following code indentationlet g:NERDDefaultAlign = 'left'" Set a language to use its alternate delimiters by defaultlet g:NERDAltDelims_java = 1" Add your own custom formats or override the defaultslet g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' }" Allow commenting and inverting empty lines (useful when commenting a region)let g:NERDCommentEmptyLines = 1" Enable trimming of trailing whitespace when uncommentinglet g:NERDTrimTrailingWhitespace = 1" Enable NERDCommenterToggle to check all selected lines is commented or not let g:NERDToggleCheckAllLines = 1
3.使用
\cc 註釋當前行和選中行\cn 沒有發現和\cc有區別\c<空格> 如果被選區域有部分被註釋,則對被選區域執行取消註釋操作,其它情況執行反轉註釋操作\cm 對被選區域用一對註釋符進行註釋,前面的註釋對每一行都會新增註釋\ci 執行反轉註釋操作,選中區域註釋部分取消註釋,非註釋部分新增註釋\cs 新增性感的註釋,程式碼開頭介紹部分通常使用該註釋\cy 新增註釋,並複製被新增註釋的部分\c$ 註釋當前游標到改行結尾的內容\cA 跳轉到該行結尾新增註釋,並進入編輯模式\ca 轉換註釋的方式,比如:/**/和//\cl \cb 左對齊和左右對其,左右對其主要針對/**/\cu 取消註釋
更多功能參考:https://github.com/preservim/nerdcommenter
參考文獻
[1]: Vim-plug:極簡 Vim 外掛管理器 https://linux.cn/article-9751-1.html
[2]:Coc.nvim 系列:為了更好的補全體驗 https://zhuanlan.zhihu.com/p/39302327
[3]:讓人相見恨晚的vim外掛:模糊查詢神器LeaderF https://www.jianshu.com/p/