將neovim打造成IDE | neovim(vim) + lsp + gtags + xx


概述

最近疫情封鎖在家無事,匯總整理下自己使用的neovim插件,以及這些插件都具備哪些功能:

功能 插件
1. 代碼視圖:文件和目錄樹,標簽視圖,狀態欄 vim-airline-themes,vim-airline,nerdtree,taglist.vim,tagbar,
1.1 代碼視圖/語法高亮: sheerun/vim-polyglot, kanagawa ,vim-colorschemes
1.2 代碼視圖/代碼顯示: Yggdroot/indentLine(對齊線),luochen1990/rainbow(嵌套括號高亮)
1.3 代碼高亮:高亮多個關鍵詞 inkarkat/vim-mark
2. 代碼跳轉:
2.1 代碼跳轉/基於標簽跳轉: jsfaint/gen_tags.vim,
2.2 代碼跳轉/跨文件跳轉:歷史文件,子目錄文件 yegappan/mru,junegunn/fzf,junegunn/fzf.vim
2.3 代碼跳轉/頁面內跳轉:行間、列間 easymotion/vim-easymotion
2.4 代碼跳轉/窗口跳轉: nvim內置,tmux內置
3. 代碼閱讀:(代碼定義,代碼引用等) neovim/nvim-lspconfig,jsfaint/gen_tags.vim
3.1 代碼編輯/自動補全: 內置補全功能,neovim/nvim-lspconfig
3.2 代碼編輯/語法檢查: neovim/nvim-lspconfig
3.3 代碼編輯/代碼片段: hrsh7th/nvim-cmp,L3MON4D3/LuaSnip,rafamadriz/friendly-snippets
3.4 代碼編輯/代碼搜索: rking/ag.vim

插件介紹

Nerdtree

概述

【左邊欄顯示目錄結構】

image

技巧

  • 切換根目錄:返回上級u;當前目錄作為根目錄C
  • 更新顯示:r
  • 重命名文件:mm
  • 顯示隱藏文件:I
  • 顯示當前打開文件的位置::NERDTreeFind( 可以自定義快捷鍵 )
  • 開啟和關閉窗口:NERDTreeToggle

vim-airline

概述

【頂欄部分顯示已打開的文件,可以進行切換】

image

配置

羅列部分airline配置

" 設置切換tab的快捷鍵 <\> + <i> 切換到第i個 tab
nmap <leader>1 <Plug>AirlineSelectTab1
nmap <leader>2 <Plug>AirlineSelectTab2
nmap <leader>3 <Plug>AirlineSelectTab3
nmap <leader>4 <Plug>AirlineSelectTab4
nmap <leader>5 <Plug>AirlineSelectTab5
nmap <leader>6 <Plug>AirlineSelectTab6
nmap <leader>7 <Plug>AirlineSelectTab7
nmap <leader>8 <Plug>AirlineSelectTab8
nmap <leader>9 <Plug>AirlineSelectTab9

tagbar

概述

tagbar是一個taglist的替代品,比taglist更適合c++使用,函數能夠按類區分,支持按類折疊顯示等,顯示結果清晰簡潔。

【右邊欄顯示文中的tag】

image

mru、fzf

概述

插件組合后可以實現文件間的選擇和跳轉:

  1. 打開並搜索最近的的文件
  2. 搜索當前目錄的文件
  3. 過濾文件行中內容

image

fzf在bash中的使用,最常用的就是獲取歷史輸入命令:ctrl + r --> 輸入字符進行搜索匹配 --> ctrl + j/k進行上下切換 --> Enter 選中

image

配置

cd ~/.config/nvim/plugged/fzf
./install
全過程Y

上面方式配置完成后,在bash中也能使用

vim-easymotion

概述

可以在當前文件中快速跳轉,行間跳轉和單詞間跳轉。

  1. 默認的快捷鍵:行間跳轉<leader><leader>+j/k; 單詞間跳轉<leader><leader>+w
  2. 輸入上面按鍵后每行或每個單詞會出現個索引符號,直接按對應的按鍵即可跳轉到對應位置

image

gen_tags.vim

概述

該插件可以自動生成tags,使用gtags替代cscope了,可以查看代碼的定義和應用。該組件特點

  1. 支持的語言多:該組件配置插件支持分析的語言達154多種
  2. 屬於靜態分析,可能存在多種引用關系,后面的nvim-lspconfig是動態分析,需要編譯生成引用關系,會更智能

image

配置

安裝gtags(gun global)軟件

進入~/.config/nvim/gtags/執行install

安裝位置:~/bin/gtags,~/.bashrc 和 ~/.config/nvim/init.vim

參考

vim中使用gtags - whilewell - 博客園 (cnblogs.com)

nvim-marks

概述

可以高亮多個單詞,方便閱讀代碼
image

nvim-lspconfig

概述

lspconfig將neovim內置的lsp api進行封裝(這里指的是lsp client,lsp server需要單獨安裝),從而可以通過簡單的配置即可使用lsp。需要使用該功能還涉及很多其它的組件,這里就不贅述了。

lspconfig支持哪些功能:

  • go-to-definition
  • find-references
  • hover
  • completion:auto-completion和 snippets support,需要額外插件
  • rename
  • format:未研究
  • refactor:未研究

功能演示

查看定義,引用,幫助

image

代碼片段

代碼片段基於friendly-snippets 插件實現,有需要可以進行自定義

  1. 輸入特定字符串,會匹配到自動補全中的snippet類型
  2. 然后<C-p/n>進行上下選擇,或者進行模糊匹配輸入選擇
  3. 選中后<CR> 即回車鍵
  4. 然后在片段中按<tab>鍵, 實現不同位置內容的編輯

image

自動補全

nvim內置補全功能

preview

LSP實現補全功能

代碼的補全是基於nvim-lspconfig 和 不同語言的lsp server實現的。

當前軟件內部開啟的有: clangd:C / pyright:Python / lua-language-server:lua,前面是lsp server后面是對應的語言,當打開c, pyhton和lua后就會自動在項目根目錄(.git)打開lsp server。可以通過:LspInfo查看配置和運行狀態

image

代碼補全演示
image

代碼診斷

python文件診斷功能

1. 通過']e'和'[e'實現診斷內容的上下跳轉
2. 通過'<space> + jq' 獲取所有diagnosetics的列表
3. 通過'<space> + jf' 打開diagnosetics內容

image

c文件診斷功能:增加錯誤的語法
image

重命名

下面演示了通過lsp將add_checksum替換成add_wsk,中間通過ag.vim和ag分別進行了搜索匹配,可以看到替換的過程非常的快捷

image

配置

pyhton語言

sudo npm i -g pyright

c語言

  1. 安裝bear,用來生成clangd依賴的配置文件'compile_commands.json'
sudo apt-get install bear

bear 后面跟編譯命令即可
bear $make
  1. 安裝clangd,直接使用二進制即可,自制的軟件包中已經包含

參考

Home · neovim/nvim-lspconfig Wiki · GitHub | lsp wiki

nvim-autopairs

概述

自動補齊括號,是通過lua重寫后的autopairs。會自動補齊括號
image

參考

Vim括號/引號自動補齊插件auto-pairs的安裝和使用方法 | vim教程網 (vimjc.com)

vim-translator

概述

翻譯軟件,默認中文翻譯

  1. 默認翻譯引擎:['bing', 'haici', 'youdao']
  2. 翻譯快捷鍵:<leader> + w

kanagawa

概述

vim 顏色主題,顯示效果很不錯
image

配置

針對tmux下colorscheme失效的問題需要如下配置:
~/.bashrc 中配置

alias tmux="TERM=screen-256color-bce tmux"

~/.tmux.conf 中配置

set -g default-terminal "xterm"

source ~/.bashrc重啟tmux即可生效

軟件安裝

環境要求:Ubuntu 18.04 server版本

1.軟件包下載路徑

mkdir -p ~/.config/

git clone https://gitee.com/whilewell/nvim.git  ~/.config/nvim

注:部分軟件已經內置到bin目錄下,內置的軟件有:

  • clangd
  • node
  • nvim
  • lua-language-server

2.安裝依賴軟件

安裝 clangd 依賴(clangd是c代碼的lsp).

sudo apt-get install bear

1. 生成方法
bear $build_cmd
2. nvim在'compile_commands.json'對應的目錄下打開文件,

安裝gen_tags依賴

# 1. 會將global默然安裝到~/bin/gtags; 安裝pyhton的語法解析包pygments
# 2. 並配置環境變量到~/.bashrc 和 ~/.config/nvim/init.vim

cd ~/.config/nvim/gtags
./install

安裝lsp依賴: 不同的語言需要安裝不同的lsp server

npm i -g pyright

安裝fzf

cd ~/.config/nvim/plugged/fzf
./install
全過程Y

3.配置后的.bashrc

# 配置后的.bashrc
export PYTHONDONTWRITEBYTECODE=1
export PATH=~/.config/nvim/bin:$PATH
export GTAGSCONF=/home/wsk/bin/gtags/data/gtags/gtags.conf
export GTAGSLABEL=pygments
alias nv='nvim'

使用技巧

  • 查看綁定的快捷鍵:verbose imap <tab>

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM