7 款優秀 Vim 插件幫你打造完美 IDE!

公衆號關注 “GitHubDaily”

設爲 “星標”,每天帶你逛 GitHub!

集成開發環境(IDE,Integrated Development Environment )是用於提供程序開發環境的應用程序,不管是 Java、C 還是 Python,使用 IDE 編程可以幫你檢查語法、自動補全、後臺編譯等,寫代碼就變得容易許多。另外,如果經常在服務器上工作的小夥伴一定知道 Vim 在進行文本編輯的時候是多麼的方便。那麼當 vim 的高效編輯性和 IDE 輔助編程性相融合,豈不是天下無敵?

今天分享 7 款 Vim 常用插件,幫你打造高可用性的 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/

[4]:Vim 十大必備插件 https://www.open-open.com/lib/view/open1414227253419.html

---

由 GitHubDaily 原班人馬打造的公衆號:GitCube,現已正式上線!
接下來我們將會在該公衆號上,爲大家分享優質的計算機學習資源與開發者工具,堅持每天一篇原創文章的輸出,感興趣的小夥伴可以關注一下哈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章