将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
概述
【左边栏显示目录结构】
技巧
- 切换根目录:返回上级
u
;当前目录作为根目录C
- 更新显示:
r
- 重命名文件:
mm
- 显示隐藏文件:
I
- 显示当前打开文件的位置:
:NERDTreeFind
( 可以自定义快捷键 ) - 开启和关闭窗口:
NERDTreeToggle
vim-airline
概述
【顶栏部分显示已打开的文件,可以进行切换】
配置
罗列部分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】
mru、fzf
概述
插件组合后可以实现文件间的选择和跳转:
- 打开并搜索最近的的文件
- 搜索当前目录的文件
- 过滤文件行中内容
fzf在bash中的使用,最常用的就是获取历史输入命令:ctrl + r
--> 输入字符进行搜索匹配 --> ctrl + j/k
进行上下切换 --> Enter
选中
配置
cd ~/.config/nvim/plugged/fzf ./install 全过程Y
上面方式配置完成后,在bash中也能使用
vim-easymotion
概述
可以在当前文件中快速跳转,行间跳转和单词间跳转。
- 默认的快捷键:行间跳转
<leader><leader>+j/k
; 单词间跳转<leader><leader>+w
- 输入上面按键后每行或每个单词会出现个索引符号,直接按对应的按键即可跳转到对应位置
gen_tags.vim
概述
该插件可以自动生成tags,使用gtags替代cscope了,可以查看代码的定义和应用。该组件特点
- 支持的语言多:该组件配置插件支持分析的语言达154多种
- 属于静态分析,可能存在多种引用关系,后面的nvim-lspconfig是动态分析,需要编译生成引用关系,会更智能
配置
安装gtags(gun global)软件
进入~/.config/nvim/gtags/执行install 安装位置:~/bin/gtags,~/.bashrc 和 ~/.config/nvim/init.vim
参考
vim中使用gtags - whilewell - 博客园 (cnblogs.com)
nvim-marks
概述
可以高亮多个单词,方便阅读代码
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:未研究
功能演示
查看定义,引用,帮助
代码片段
代码片段基于friendly-snippets
插件实现,有需要可以进行自定义
- 输入特定字符串,会匹配到自动补全中的
snippet
类型 - 然后
<C-p/n>
进行上下选择,或者进行模糊匹配输入选择 - 选中后
<CR>
即回车键 - 然后在片段中按
<tab>
键, 实现不同位置内容的编辑
自动补全
nvim内置补全功能

LSP实现补全功能
代码的补全是基于nvim-lspconfig
和 不同语言的lsp server实现的。
当前软件内部开启的有: clangd:C / pyright:Python / lua-language-server:lua
,前面是lsp server后面是对应的语言,当打开c, pyhton和lua后就会自动在项目根目录(.git)打开lsp server。可以通过:LspInfo
查看配置和运行状态
代码补全演示
代码诊断
python文件诊断功能
1. 通过']e'和'[e'实现诊断内容的上下跳转 2. 通过'<space> + jq' 获取所有diagnosetics的列表 3. 通过'<space> + jf' 打开diagnosetics内容
c文件诊断功能:增加错误的语法
重命名
下面演示了通过lsp将add_checksum替换成add_wsk,中间通过ag.vim和ag分别进行了搜索匹配,可以看到替换的过程非常的快捷
配置
pyhton语言
sudo npm i -g pyright
c语言
- 安装bear,用来生成clangd依赖的配置文件'compile_commands.json'
sudo apt-get install bear bear 后面跟编译命令即可 bear $make
- 安装clangd,直接使用二进制即可,自制的软件包中已经包含
参考
Home · neovim/nvim-lspconfig Wiki · GitHub | lsp wiki
nvim-autopairs
概述
自动补齐括号,是通过lua重写后的autopairs。会自动补齐括号
参考
Vim括号/引号自动补齐插件auto-pairs的安装和使用方法 | vim教程网 (vimjc.com)
vim-translator
概述
翻译软件,默认中文翻译
- 默认翻译引擎:['bing', 'haici', 'youdao']
- 翻译快捷键:
<leader> + w
kanagawa
概述
vim 颜色主题,显示效果很不错
配置
针对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>
参考
- learn-neovim-lua/comment.lua at main · nshen/learn-neovim-lua · GitHub | neovim配置替换成了lua方式
- nvim0.5+从0单排]图文教程、nvim配置下载
- 在 neovim 中使用 Lua_lxyoucan的博客-CSDN博客_lua neovim
- 13_[nvim0.5+从0单排]_ 自定义代码段LuaSnip入门_哔哩哔哩_bilibili | 自定义代码段
- Home · neovim/nvim-lspconfig Wiki · GitHub | lsp wiki
- Bytefluent | Vivify | vim 主题颜色在线调试
本文来自博客园,作者:whilewell,转载请注明原文链接:https://www.cnblogs.com/viiv/p/15729383.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~