Neovim 插件管理工具

2024-06-12 linux vim

历史曾经推荐使用 Packer.nvim 作为插件管理工具,不过该插件从 2023.08 开始不再维护,所以就有了 lazy.nvim 插件。

这里详细介绍其使用。

简介

按照官方的文档,默认会安装到 ~/.local/share/nvim/lazy/lazy.nvim 目录下,可以手动安装。

git clone --depth 1 https://github.com/folke/lazy.nvim \
    ~/.local/share/nvim/lazy/lazy.nvim
git clone https://www.ghproxy.cn/https://github.com/folke/lazy.nvim \
    ~/.local/share/nvim/lazy/lazy.nvim

mv ~/.local/share/nvim{,.bak}
mv ~/.local/state/nvim{,.bak}

插件维护

维护了一些常用的插件,其中有几个原则:A) 尽量简单有效,很多插件会有功能重叠,尤其是随着版本的演进,可能会出现新功能;B) 如果某个作者比较厉害,那么很多插件就尽量使用该作者相关插件,这里特指 Folke Lemaitre 提供了很多不错的插件。

>>> 基础(最基础的依赖)
nvim-web-devicons             *****   美化图标显示,基于 NerdFonts 字体
gruvbox.nvim                  ****    配色,有很多不错的配色可供参考
pretty-fold.nvim              **      折叠,当前 Treesitter 能力基本够用

>>> VIM优化(常见操作、状态可视化)
==== 界面美化
lualine.nvim                  *****   底层状态显示,支持buffer/tab/window显示
noice.nvim                    ****    各种接口的美化,支持 telescope 历史 ???
bufferline.nvim               ***     支持Buffer的Hover、关闭、Pin等操作(可用于鼠标操作)
indent-blankline.nvim         ***     含类似set list显示,以及Tab/Space对齐显示 Tips#3
==== 操作优化
which-key.nvim                *****   快捷键提示,防止某些快捷键遗忘
flash.nvim                    ****    优化文件内的搜索体验,包括传统 f t F T 快捷键体验优化

>>> 搜索
telescope.nvim                *****   搜索引擎

>>> LSP
nvim-treesitter               *****   增量语法解析,效率极高
nvim-treesitter-textobjects   *****   根据语法对 textobject 进行扩展
nvim-lint                     ****    异步静态检查工具 Linters ???
conform.nvim                  ****    格式化工具 [formatter.nvim] Tips#1 ???
===== DAP
===== 其它
comment.nvim                  *****   用来快速注释 Tips#4
nvim-ts-context-commentstring ***     如上,优化 multi-languge 场景 TODO
trouble.nvim                  ****    美化 LSP 相关内容 [lspsaga.nvim] Tips#2
fidget.nvim                   *       用于显示 LSP 进度,选择 noice.nvim

>>> 其它
nvim-tree                     ****    目录树显示 [neo-tree.nvim]

Note:
[]     为备选插件
Tips#N 查看后续备注
???    验证阶段

*****  五星推荐,必装软件
****   推荐同时有其它软件可以选择
***    部分场景推荐,但个人并未使用,可能不太符合纯键盘操作,例如 bufferline
**     可以使用,但是部分其它插件或者基础功能基本满足诉求
*      不推荐,有其它软件完全替换,基本是包含关系,例如 fidget
  1. 除了 Ctrl-f 格式化外,还支持 Ctrl-Alt-l 通过 vim.lsp.buf.format 格式化,前者使用指定插件,后者是 LSP 内部机制。
  2. 两者选其一即可,可以在 LSP 映射命令时选择,严格来说大部分可替换,不过可能出现部分有所区别。
  3. 前者可以通过 :set list 显示,而后者可以通过输入光标的显示来替代,尤其是类似 Python 这种的强诉求。
  4. 对 TS 支持不太好,主要是因为多语言,可以通过 Hook 和上述的插件优化;另外,尽量只通过少量快捷键完成注释/取消切换。

快捷键配置

  • 快捷键是有记忆成本的,尤其是在不同的环境上使用时,此时就需要能尽量简化、通用。
  • 遵循常规使用,例如 Ctrl-s 通常用于保存文件。
  • 使用场景尽量统一,例如 Ctrl-p/n 用于上翻或者下翻。
  • 尽量不要与 VIM 默认快捷键冲突,根据习惯部分不常用的可以替换,例如 c
>>> 基础操作
Ctrl-s        文件保存,支持 normal、insert、visual 模式
Ctrl-u        保存并退出当前窗口,等价于 ZZ ZQ(不保存),默认是 <Esc> 的别名
Ctrl-Alt-u    保存并退出所有窗口,本来打算用 Ctrl-M 但是莫名在 ts/md 文件中不生效
===== 代码折叠
<Space>       用于当前代码的折叠 Toggle 查看,对 za 进行了映射
zM/zR         折叠/展开所有的代码 TODO: 可以通过 <Ctrl-Space> 作 Toggle 映射

>>> LSP
===== 跳转

===== 注释 Commont.nvim 会依赖 gc* gdc* 快捷键,暂未屏蔽
+++++ 统一行、块注释,支持多行选择注释
Ctrl-/        行级别注释,配置时采用 <C-_>
Ctrl-\        块级别注释,配置时采用 <C-\\>
===== 选择 Treesitter(增量)
<Enter>       开始和 Node 增量选择
<Tab>         Scope 增量选择,相比上述 Node 范围更大
<Backspace>   范围缩小

其中的 Ctrl-] 用来基于 tags 的跳转,也就是常规的 cscope ctags 的使用,只是目前通过 lsp 实现,可以通过 :help tags/Ctrl-]/cscopetag 查看帮助。注意,当通过 set cscopetag 设置之后,源有的 :tag 调用转换为了 :cstag 调用。

另外,并非所有的 Ctrl-* 都可以使用,只支持可打印字符和部分特殊字符,详见 FAQ 中的介绍,例如 <C-.><C-,> 是无法使用的。

参考