历史曾经推荐使用 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
- 除了
Ctrl-f
格式化外,还支持Ctrl-Alt-l
通过vim.lsp.buf.format
格式化,前者使用指定插件,后者是 LSP 内部机制。 - 两者选其一即可,可以在 LSP 映射命令时选择,严格来说大部分可替换,不过可能出现部分有所区别。
- 前者可以通过
:set list
显示,而后者可以通过输入光标的显示来替代,尤其是类似 Python 这种的强诉求。 - 对 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-,>
是无法使用的。
参考
- Awesome NeoVim 很多不错的插件可供参考。