Neovim插件推荐&配置

1 前言
本文所用配置以LunarVim的Nightly版本为基础。 Neovim版本: 0.9.0 插件管理器:lazy.nvim
你可以在LunarVim中,使用<leader>Lc
打开~/.config/lvim/config.lua
,将以下插件配置复制或替换到合适的位置config.lua
中,然后重启lvim自动安装插件。
本文的配置将合理使用lazy.nvim的懒加载功能,只在需要的时候加载需要的插件,加快neovim的运行和加载速度,减少资源占用。
适合阅读本文的人群:有一定的neovim配置经验
1.1 完整配置文件
你可以在 https://github.com/ADkun/my-lvim-config/blob/main/config.lua 这个网址看到我最新的config.lua完整配置文件。
1.2 【本文更好的阅读方式】(强烈推荐)
由于B站的编辑器格式化功能很差,本文原文采用markdown格式编写,请移步下面链接查看,获得更好的体验。
请访问 https://github.com/ADkun/lvim-config-suggest/blob/main/README.md 以更好的格式化方式查看本文,有任何错误也会在这个文档里更新
2 插件
2.0 预配置
这些配置是为了在config.lua中提前声明一些变量,避免冗长的写法,你可以将这些配置提前写在config.lua的前部。
2.1 filetype.nvim
推荐度:★★
主页:https://github.com/nathom/filetype.nvim
简介:
filetype.nvim对neovim的filetype进行了优化,可以使打开文件时识别文件类型的速度更快。
在某些情况下,还可以修复由文件类型识别不正确导致的高亮不全问题。(如打开
.h
文件发现没有代码高亮)
使用方式:在config.lua中配置好,然后打开文件。
配置:
上面配置中的extensions
表示将.h
后缀的文件识别为cpp
文件类型,使.h
文件被neovim识别为cpp文件,使用cpp文件的高亮。 除了extensions
以外,你还可以配置
literal
:匹配全文件名complex
:使用正则表达式匹配路径和文件名function_extensions
:对指定类型的文件设置回调函数function_literal
:对指定全文件名的文件设置回调函数function_complex
:对指定正则表达式匹配的文件设置回调函数shebang
:对于包含了指定shebang的文件视为指定的文件类型,如#! /usr/bin/dash
视为sh文件类型,以匹配不同类型的shell脚本文件。 具体配置方法见插件Github主页,里面有给出example。
2.2 trouble.nvim
推荐度:★★★
主页:https://github.com/folke/trouble.nvim
简介:
trouble.nvim实现了trouble这种预览窗口类型(类似于quickfix, loclist),这种窗口的特点是切换项目时会将打开前的窗口实时预览到对应的位置上,退出trouble窗口时会回到原来的位置。
trouble.nvim可以让你快速查看你的工作区、文件中的LSP警告列表。
使用方式:热键打开窗口
配置:
键位配置(which-key):
插件只会在你使用快捷键的时候才加载。 注:which-key的配置方式需要你以<leader>
键开头,比如上面配置的keymap["tt"]
,你需要按<leader>tt
。 LunarVim的默认<leader>
键是空格
2.3 leap.nvim
推荐度:★★★★★
主页:https://github.com/ggandor/leap.nvim
简介:
leap.nvim可以让你的光标快速在可视范围内跳转。
你只需要按下引导键(自定义的第一个键),然后输入你想跳转到的地方的相邻2个字符,如有重复,输入最后一个提示字符即可。
可以配合其它neovim快捷键一起使用,如"c", "d", "y"
使用方式:见下面的快捷键介绍,也可以配合"c", "d", "y"等neovim原本的功能键一起使用。
配置:
快捷键介绍:
r
:在当前光标往右往下查找。R
:在当前光标往左往上查找。W
:多窗口情况下,可快速跳转到其它窗口的内容。
2.4 flit.nvim
推荐度:★★★★★
主页:https://github.com/ggandor/flit.nvim
简介:
flit.nvim是leap.nvim同一个作者产出的,flit.nvim需要依赖于leap.nvim。
flit.nvim可以增强neovim的"f", "F", "t", "T"这几个键的功能,同样是一个光标跳转插件。
使用方式:按"f", "F", "t", "T",然后键入你想去的目标字符。如果本次没有到达你想去的目标,再次按下"f"或"t",光标会跳到下一个目标。
配置:
2.5 hop.nvim
推荐度:★★★★
主页:https://github.com/phaazon/hop.nvim
简介:
hop.nvim与leap.nvim一样,同样是一款可视范围内光标跳转的插件。
与leap.nvim不同,这款插件有更多功能,并且支持单字符的跳转。
使用方式:以本配置为例,按"E",然后键入可视范围内你想去的那个字符,最后输入1-2个提示字符就可以跳到目标位置了。 注:配置中以注释的方式将其它一些函数屏蔽掉了,仅保留单字符跳转功能,作为leap.nvim的补充。如有需要可去掉注释符自行配置。
配置:
2.6 nvim-ts-rainbow2
推荐度:★★★★
主页:https://github.com/HiPhish/nvim-ts-rainbow2 简介:
nvim-ts-rainbow2基于nvim-treesitter,将配对的括号进行彩色的标注,方便辨认。 使用方式:配置即用
配置:
然后在config.lua另外一个地方加上这一行(非插件的config函数里)
2.7 nvim-treesitter-context
推荐度:★★★
主页:https://github.com/nvim-treesitter/nvim-treesitter-context
简介:
nvim-treesitter-context是一款基于nvim-treesitter的上文文固定插件。
它可以将当前函数的函数头固定在neovim界面的前几行,让你知道当前在编辑的是什么类、函数或方法。 使用方式:配置即用
配置:
2.8 harpoon
推荐度:★★★
主页:https://github.com/ThePrimeagen/harpoon
简介:当前项目的文件收藏夹
使用方式:快捷键使用
<leader>ohh
:在Telescope中打开Harpoon收藏的文件<leader>oht
:打开Harpoon本身自带的收藏夹<leader>ohf
:将当前文件加入到收藏夹<leader>ohd
:将当前文件从收藏夹中删除<leader>ohn
:切换到下一个收藏夹文件<leader>ohp
:切换到上一个收藏夹文件
配置:
快捷键配置:
2.9 nvim-ts-context-commentstring
推荐度:★★★★
主页:https://github.com/JoosepAlviste/nvim-ts-context-commentstring
简介:
本插件基于nvim-treesitter,根据当前光标在文中的位置,配合Comment.nvim,自动选择合适的注释格式。
使用方式:配置即用。
配置:
2.10 goto-preview
推荐度:★★★★
主页:https://github.com/rmagatti/goto-preview
简介:本插件可以以浮动窗口的形式预览符号的定义、实现等信息。
使用方式:光标定位到目标符号,快捷键使用
gpd
:预览符号定义gpi
:预览符号实现gpr
:预览符号引用gpt
:预览类型定义
配置:
2.11 nvim-lastplace
推荐度:★★★★★
主页:https://github.com/ethanholz/nvim-lastplace
简介:自动记忆当前文件位置,在下次打开时定位到上次位置。
使用方式:配置即用
配置:
2.12 todo-comments.nvim
推荐度:★★★
主页:https://github.com/folke/todo-comments.nvim
简介:高亮注释中的关键词,按需安装。
使用方式:在注释中以以下关键词,并加上英文冒号,然后输入注释内容。
HACK
NOTE
TODO
WARN
WARNING
BUG
FIX
PREF
配置:
2.13 nvim-surround
推荐度:★★★★★
主页:https://github.com/kylechui/nvim-surround
简介:使用快捷键配合textobjects快速地添加/修改/删除各种包括符,如()、[]、{}、<>等。
使用方式:快捷键使用,下面举几个例子:
ysiw"
:将当前光标选中的单词用双引号包围,其中,ys
是本插件的触发快捷键,iw
是inner word的意思,这是neovim自带的一种textobject选中方式。ds)
:将当前光标位置相邻的最内层的小括号删除。cs)}
:将当前光标位置相邻的最内层的小括号替换为大括号。
配置:
2.14 nvim-spectre
推荐度:★★★★
主页:https://github.com/nvim-pack/nvim-spectre
简介:搜索并替换项目中所有文件/当前文件/当前选中区域的内容
使用方式:快捷键使用
在文件窗口中
<leader>osf
:在当前文件搜索<leader>oss
:在当前目录(项目)中搜索,包括子文件夹<leader>osv
:在当前选中区域搜索<leader>osw
:在当前选中区域搜索单词
在Spectre窗口中
<leader>R
:替换所有<leader>rc
:替换当前光标所在行的匹配项<cr>
:跳到该匹配项的原文件位置<leader>q
:将所有匹配项发送到quickfix中?
:查看所有按键
注:在Spectre窗口中是无法使用<leader>q
来退出窗口的,因为有快捷键冲突。需要用<C-w>c
来退出。
配置:
快捷键配置:
2.15 nvim-bqf
推荐度:★★★★
主页:https://github.com/kevinhwang91/nvim-bqf
简介:增强你的quickfix窗口
使用方式:配置即可显示增强的quickfix窗口,然后在quickfix窗口内使用对应快捷键操作quickfix
z,
:将预览窗口的切换为全屏/半屏o
:将当前quickfix条目以drop的方式(如果缓冲区没有就打开新缓冲区,如果有就切换到那个缓冲)更多快捷键请查看配置以及参考Github主页
配置(并不完美,有兴趣的可以自行修改):
2.16 vim-matchup
推荐度:★★★
主页:https://github.com/andymass/vim-matchup
简介:在你光标位置将if..else if..else等语言内的对应标签高亮。扩展你的%
键能力。
使用方式:配置即用,在if等可以配对的标签处点击%
跳到下一个匹配处
配置:
2.17 persistence.nvim
推荐度:★★★★★
主页:https://github.com/folke/persistence.nvim
简介:自动保存你的session到文件中,在下次打开相同目录/项目时,你可以手动加载session恢复之前的工作状态。
使用方式:退出即自动保存,打开后使用<leader>a
来加载session
配置:
快捷键配置:
2.18 better-escape.nvim
推荐度:★★★★★
主页:https://github.com/max397574/better-escape.nvim
简介:可以自定义任意2个按键来退出Insert模式。
使用方式:在Insert模式下,在200ms(可修改)内连续按下"jk"或"jl"(可修改)退出Insert模式。
注:如果电脑比较卡,200ms可能不够,可以修改为更长一些的时间。
配置:
2.19 tabout.nvim
推荐度:★★★
主页:https://github.com/abecodes/tabout.nvim
简介:可以在Insert模式下,按<Tab>
跳出括号。
使用方式:在Insert模式下,如果你的光标在括号或引号里面(可配置),按<Tab>
键跳出括号 注:实际使用时,因为优先级比nvim-cmp低,所以在弹出补全窗口时,需要按<C-e>
关闭补全窗口才能使用,所以体验并不是特别好。
配置:
2.20 smartyank.nvim
推荐度:★★
主页:https://github.com/ibhagwan/smartyank.nvim
简介:在"dd"等不希望将内容复制到系统剪贴板的时候不复制到系统剪贴板。支持在SSH等情况复制到系统剪贴板。
使用方式:配置即用。 注:可能是因为个人环境问题,没有实际体验到它的功能,但对性能没啥影响,还是装上吧。
配置:
2.21 marks.nvim
推荐度:★★★★★
主页:https://github.com/chentoast/marks.nvim
简介:在左侧栏中显示这一行标记的marks,可以显示当前文件/所有缓冲区的所有marks/所有缓冲区的大写marks
使用方式:
mx
:neovim原本的mark方式进行标记,x为标记名。m;
:自动对当前行按字母顺序进行小写标记dmx
:x为标记名,删除某个标记名mX
:X为大写标记名,大写的标记可以跨文件跳转。<leader>oma
:显示所有标记(包括小写大写,在所有缓冲区中)<leader>omb
:显示当前buffer中的所有标记(包括小写大写)<leader>omg
:显示所有大写标记
配置:
快捷键配置:
2.22 neodim
推荐度:★★★★★
主页:https://github.com/zbirenbaum/neodim
简介:将没有使用到的变量进行暗淡处理。
使用方式:配置即用
配置:
2.23 windows.nvim
推荐度:★★★★★
主页:https://github.com/anuvyklack/windows.nvim
简介:通过几个函数可以将当前neovim窗口进行全屏/垂直全屏/水平全屏/等分
使用方式:快捷键使用
配置:
快捷键配置:
2.24 nvim-notify
推荐度:★★★★★
主页:https://github.com/rcarriga/nvim-notify
简介:将各种提示显示为弹窗
使用方式:配置即用
<leader>onm
:显示messages(非noice功能)
注:只使用nvim-notify的话,只能将vim.notify重定向输出到notify窗口中,需要将所有消息重定向到notify的话,需要装noice.nvim 注2:为了性能,配置中将动画效果取消了,需要的可以自行开启(修改stages
项)
配置:
2.25 noice.nvim
推荐度:★★★★★
主页:https://github.com/folke/noice.nvim
简介:一个覆写了很多neovim原本UI的插件,很大幅度地提升了美观性。
将messages重定向到notify
将搜索、命令显示为独立的命令框,并去除最底部的显示栏,节省空间。
显示过往Notifications
Telescope整合
使用方式:配置即用,快捷键呼出历史窗口等功能。
<leader>onn
:显示Notifications历史<leader>ont
:在Telescope中显示Notifications历史<leader>ond
:临时禁用Noice<leader>one
:启用Noice
配置:
快捷键配置:
2.26 nvim-ufo
推荐度:★★★
主页:https://github.com/kevinhwang91/nvim-ufo
简介:启用neovim的折叠功能,在左侧栏显示可折叠的项目,并能够自定义折叠显示的内容
使用方式:快捷键使用
zm
:折叠整个文件的所有内容zM
:同上zr
:展开整个文件的所有内容zR
:同上zo
或l
:展开当前光标所在行的1层折叠zO
:展开当前光标所在行的所有折叠zc
:当前光标所在行进行折叠<leader>oud
:禁用Ufo<leader>oue
:启用Ufo
注:配置中使用了lazy=true
,意味着并不会在文件加载时加载本插件,你需要手动输入一次zm
或zr
以加载本插件。 注2:在多窗口的状态下,可能会有一些BUG,如保存时自动把另外窗口全部折叠了,这时候可以临时关闭UFO(<leader>oud
)。
2.27 nvim-window-picker
推荐度:★★★★
主页:https://github.com/s1n7ax/nvim-window-picker
简介:在打开的多个窗口快速跳转、交换。
使用方式:
键入
,w
,然后键入1个小写字母键选择窗口,跳转到对应窗口。键入
,W
,然后键入1个小写字母键选择窗口,将当前焦点窗口与对应窗口交换。
配置:
2.28 symbols-outline.nvim
推荐度:★★★★★
主页:https://github.com/simrat39/symbols-outline.nvim
简介:以右侧栏形式显示当前文件的大纲、标题、符号
使用方式:快捷键打开侧栏
<leader>oo
:打开symbols-outline侧边栏 在侧栏的快捷键:<cr>
:回车定位到符号位置,并焦点到目标窗口。o
:定位到符号位置,但焦点保留在symbols-outline窗口。<C-space>
:显示对应符号的hover窗口K
:打开当前符号的预览窗口。r
:重命名当前符号a
:代码actionh
:当前光标处折叠l
:当前光标处展开P
:折叠所有U
:展开所有折叠Q
:重置折叠
注:需要LSP支持
配置:
2.29 colorful-winsep.nvim
推荐度:★★★★
主页:https://github.com/nvim-zh/colorful-winsep.nvim
简介:打开多窗口时,在当前焦点窗口周围显示紫色的边框
使用方式:配置即用
配置:
2.30 nvim-gomove
推荐度:★★★★
主页:https://github.com/booperlv/nvim-gomove
简介:通过快捷键将当前选中区域/当前行进行移动,并遵循缩进
使用方式:
Normal模式:
<M-h/l>
:向左/右移动当前光标处的字符<M-j/k
:将当前行向下/上移动,遵循缩进
Visual模式:
<M-j/k/h/l>
:将当前选中区域向下/上/左/右移动,遵循缩进
配置:
2.31 search-replace.nvim
推荐度:★★★★★
主页:https://github.com/roobert/search-replace.nvim
简介:受够了手动输入:%s/xxx/ccc/gcI
吗?这款插件可以使用快捷键一键帮你输入这些内容。 这款插件是spectre插件的补充,你可以用这款插件或者spectre插件来达到全局文件替换的效果。
使用方式:快捷键使用
当前缓冲区:
<leader>rs
:打开选择列表(个人不会用)<leader>ro
:打开Cmdline,自动帮你键入好了:%s//gcI
<leader>rw
:打开Cmdline,自动帮你键入好了当前光标所在的word<leader>rW
:打开Cmdline,自动帮你键入好了当前光标所在WORD<leader>re
:...<leader>rf
:...
所有打开的缓冲区:同上,但是前缀是
<leader>rb
,只要多加一个b
键即可 具体快捷键见下面的“快捷键配置”
配置:
快捷键配置:
2.32 trailblazer.nvim
推荐度:★★★★
主页:https://github.com/LeonHeidelbach/trailblazer.nvim
简介:一款很强大的临时轨迹标记插件,它可以使用快捷键保存你当前的位置,然后安心地把光标移到其它地方,之后再按快捷键按顺序跳回原来记录的位置。
使用方式:快捷键使用。
<A-s>
:在当前行保存轨迹坐标<A-d>
:回到上一个保存的轨迹坐标,并删除该坐标<A-o>
:用quickfix打开所有轨迹坐标的列表<A-L>
:删除所有轨迹坐标<A-p>
:在上一个保存的轨迹坐标处粘贴<A-P>
:在所有保存的轨迹坐标处粘贴 更多快捷键见配置,以及Github文档。
配置:
2.33 nvim-recorder
推荐度:★★★★★
主页:https://github.com/chrisgrieser/nvim-recorder
简介:大幅简化和增强neovim自身的宏功能。允许你编辑、复制宏的内容以及设置断点
使用方法:快捷键使用
q
:开始/结束录制宏Q
:执行当前选择的宏<A-q>
:切换宏槽位cq
:编辑当前槽位的宏yq
:复制当前槽位的宏
注:本配置仅使用了"u", "i", "o"三个槽位,如果需要更多槽位可以自行配置slot
项。
配置:
2.34 nvim-various-textobjs
推荐度:★★★★
主页:https://github.com/chrisgrieser/nvim-various-textobjs
简介:为neovim新增很多textobjects,它们可以丰富你的快捷键选中、复制、修改等操作的体验。
使用方式:快捷键使用(以选中功能"v"来举例,可以替换为"c"(删除并修改)、"d"(删除)、"y"复制等)(i
可以替换为a
,i
表示"inner",a
表示"outer",如va}
会选中包括}
本身的内容,而vi}
则不会)
viS
:选中当前光标下的子word(如VimEnter
,我们使用viw
会选中整个VimEnter
,但viS
只会选中Enter
或Vim
)vii
:选中当前相同缩进的所有行vR
:选中当前相同缩进往后剩余的行v%
:选中当前光标下对应的括号结束位置vr
:选中剩余的段落vgG
:选中整个文件v_
:选中整行有字符的部分(除去空白字符)viv
:选中key-value的value部分vik
:选中key-value的key部分vL
:选中URLvin
:选中数字部分v!
:选中诊断部分(需要LSP)vil
:选中markdown的链接viC
:选中markdown的代码块部分vic
:选中css选择器vi/
:选中javascript的正则表达式patternviD
:选中双中括号内容[[]]
注:可以修改lookForwardLines
的数量来改变我们使用textobjects时以当前光标为起点查找的行数。
配置:
2.35 nvim-treesitter-textobjects
推荐度:★★★★
主页:https://github.com/nvim-treesitter/nvim-treesitter-textobjects
简介:基于nvim-treesitter的textobjects,可以帮你选中class、function等语法内容
使用方式:快捷键使用,类似于nvim-various-textobjs(以选中模式v
举例)
选择
vaf
:选中当前函数vac
:选中当前类内容vas
:选中当前scopevad
:选中当前条件(if..else)
跳转
]m
:跳到下一个函数的开始处]]
:跳到下一个类的开始处]s
:跳到下一个scope的开始处]z
:跳到下一个fold的开始处]M
:跳到下一个函数的结尾处][
:跳到下一个类的结尾处[m
:跳到上一个函数的开始处[[
:跳到上一个类的开始处[M
:跳到上一个函数的结尾处[]
:跳到上一个类的结尾处]d
:跳到下一个条件[d
:跳到上一个条件
注:更多配置和用法见Github主页
配置:
2.36 nvim-treesitter-textsubjects
推荐度:★★★
主页:https://github.com/RRethy/nvim-treesitter-textsubjects
简介:根据光标位置自动决定要选中什么textobject
使用方式:快捷键使用(以v选中模式举例)
v.
:根据光标位置,智能选择v,
:选中上一次选中的范围v;
:选中容器外围vi;
:选中容器内
注:在某些情况下貌似有点卡,可能是因为nvim-treesitter的树比较长的缘故,但是小文件还是很快的
配置:
3 其它配置
3.1 snip
在~/.config/lvim
下创建一个snippets
目录,然后在里面创建一个package.json
,配置好指定格式的内容,之后编辑对应的json文件就可以为对应的文件类型添加snippets了
参照 https://github.com/ADkun/my-lvim-config 的snippets
目录
3.2 formatter和linter
在Mason插件中下载的formatter和linter,需要我们手动将它们对应到文件类型上。 以下是我的配置项,可以参考配置。