%%
# 纲要
> 主干纲要、Hint/线索/路标
# Q&A
#### 已明确
![[05-工具/vim/lazy.nvim 插件管理器#^4q61sv]]
![[05-工具/vim/lazy.nvim 插件管理器#^md82ai]]
#### 待明确
> 当下仍存有的疑惑
**❓<font color="#c0504d"> 有什么问题?</font>**
# Buffer
## 闪念
> sudden idea
## 候选资料
> Read it later
%%
# Lazy.nvim 插件管理器
插件管理器的作用:
- **根据配置的插件名自动安装插件**
- **自动更新插件**
- **实现延迟加载**——仅在真正需要使用插件的时候才进行加载
##### GUI 界面
lazy.nvim 提供了一个 GUI 界面,可通过 `:Lazy` 命令进入
![[_attachment/05-工具/vim/lazy.nvim 插件管理器.assets/IMG-lazy.nvim 插件管理器-5AF67CBDD0215D626409E4703E318FDA.png|630]]
##### 插件自动安装
只需要**在 lazy.nvim 的配置文件中**编写好**对插件模块的引入语句**,启动 Neovim 时就会**自动安装&更新插件**。
> [!example] lazy.nvim 自动安装插件时显示界面如下:
>
> ![[_attachment/05-工具/vim/lazy.nvim 插件管理器.assets/IMG-lazy.nvim 插件管理器-83DD5400594F593F2E0F2F44BC3FB5A4.png|615]]
>
>
<br><br><br>
# Lazy.nvim 插件管理组织方式
参见官网安装说明[^1],**Neovim 配置文件目录**采用如下的**组织方式**:
![[_attachment/05-工具/vim/Neovim 说明.assets/IMG-Neovim 说明-495A2C8072F435273A590E67F1DDF666.png|325]]
基于 Lua 的**模块化配置方式**,将 **Neovim 的配置**、**lazy.nvim 的配置**、**各个独立插件的配置** 拆分成了 **==独立的配置文件==**:
- `init.lua`:**NeoVim 的配置文件**,在该文件中**引入 `lazy.nvim` 的配置文件**:`require("config.lazy")`
- `/lua/config/lazy.lua`: **lazy.nvim 的配置文件**,其中通过 lazy.nvim 的 `setup` 函数来**安装和配置插件**。
- `/lua/plugins/*.lua`:**各个插件的配置文件**
<br><br><br>
# Lazy.nvim 安装
参见官网安装说明[^1],按上文的方式进行组织,只需**手动创建并如下编写两个 ==Neovim 配置文件==**,然后**重启 Neovim** 即可:
- `~/.config/nvim/init.lua`
- `~/.config/nvim/lua/config/lazy.lua`(**lazy.nvim 的配置文件**)
![[_attachment/05-工具/vim/lazy.nvim 插件管理器.assets/IMG-lazy.nvim 插件管理器-6D86E88D3F193D6E81D1685789E0E765.png|585]]
配置文件说明:
- (1)**==检查 lazy.nvim 是否存在==,若不存在则进行安装**——`Bootstrap lazy.nvim` 部分
- (1)若不存在,则 **git clone 其仓库到 Neovim 的 Data 路径下的 `/lazy/lazy.nvim`目录中**。
- (2)将 **lazy.nvim 路径**添加到 **==Neovim 的运行时路径==**:`vim.opt.rtp:prepend(lazypath)` => 由此,`require("lazy")` 才能搜索到 lazy 模块。
- (2)**配置全局 & 本地 Leader 键**
- (3)**设置 lazy.nvim**——`Setup lazy.nvim` 部分
- `require("lazy")` 将**加载 `lazypath` 路径下的 `/lua/lazy/init.lua` 模块**[^6]:
- 指定**插入配置的导入路径**
- 指定**安装插件时使用的配色方案**
- 启用**自动检查插件更新**
编写完成上述配置文件后,进入 Neovim,执行 `:checkhealth lazy` 显示如下,表明**安装成功**:
![[_attachment/05-工具/vim/lazy.nvim 插件管理器.assets/IMG-lazy.nvim 插件管理器-46277C2C0E3EBFDDDBF4608D94D1CE24.png|669]]
<br><br><br>
# Lazy.nvim 使用方式
> ❓<font color="#c0504d">如何使用 Lazy.nvim?</font> ^4q61sv
在上文提到的模块化组织方式下,**`lazy.nvim` 配置文件**即 `~/.config/nvim/lua/config/lazy.lua`。
其中 **==`require('lazy).setup(...)`==** 语句即用于 **==引入& 设置== lazy.nvim 插件管理器**、**==指明== Neovim 所需使用的所有插件**,**Lazy.nvim 将根据指定的插件名自动进行安装**。
## 声明所需使用的插件
> ❓<font color="#c0504d">如何声明&配置所需使用的插件?</font> ^md82ai
lazy.nvim 会对**声明了配置项的插件==自动安装&追踪更新==**。
### 模块化组织方式(推荐)
![[_attachment/05-工具/vim/lazy.nvim 插件管理器.assets/IMG-lazy.nvim 插件管理器-D1360E8CB4AA77C5154865736DB94DC0.png|212]]
在模块化的组织方式下,**每个插件对应一份 "独立配置文件"** 由 **lazy.nvim 配置文件引入汇总**,写成以下形式:
```lua title:~/.config/nvim/lua/config/lazy.lua
-- Setup lazy.nvim
require("lazy").setup({
spec = {
-- import all the plugin specs: `/lua/plugins/*.lua`
{ import = "plugins" },
},
-- Configure any other settings here. See the documentation for more details.
-- colorscheme that will be used when installing plugins.
install = { colorscheme = { "habamax" } },
-- automatically check for plugin updates
checker = { enabled = true },
})
```
==**`spec = {{ import = "plugins"}}`**== 指示 lazy.nvim **加载所有 `~config/nvim/lua/plugins/*.lua` 文件**——即**各个插件的独立==插件配置文件==**,例如 `flash.lua`:
![[_attachment/05-工具/vim/lazy.nvim 插件管理器.assets/IMG-lazy.nvim 插件管理器-47DA1CFD44178928B1416493E39918D8.png|839]]
> [!important] 模块化组织方式下,**每个插件对应一份 "独立的 `.lua` 配置文件"**,以 "==**lua 模块**==" 的形式**返回一个 ==Table==,注明==插件名称、插件配置==**。
lazy.nvim 会**汇总这些插件配置文件**,自动进行**安装和处理**。
### 非模块化组织方式
`spec` 部分**直接声明所需使用的插件**,**==每个插件对应一个 "Table"==**——首项指明 **==插件名称==**,其余项为 **==插件配置==**。
```lua title:~/.config/nvim/lua/config/lazy.lua
-- Setup lazy.nvim
require("lazy").setup({
spec = {
-- add your plugins here
-- 声明使用 flash.nvim 插件
{ "folke/flash.nvim" },
-- 声明使用 nvim-treesiter 插件
{
"nvim-treesitter/nvim-treesitter",
run = ':TSUpdate'
}
-- 声明使用 Telescope 插件
{
'nvim-telescope/telescope.nvim',
requires = { {'nvim-lua/plenary.nvim'} }
},
}
-- Configure any other settings here. See the documentation for more details.
-- colorscheme that will be used when installing plugins.
install = { colorscheme = { "habamax" } },
-- automatically check for plugin updates
checker = { enabled = true },
})
```
<br><br>
## 插件配置文件声明方式
在模块化方式下,每个插件的**独立插件配置文件**中应当 **`return` 一个 Table,注明==插件名称、插件配置==**。
具体内容**参见各个插件的官方说明**。
> [!caution] 参见 lazy.nvim 文档[^1],每个插件配置文件的 Table 声明中,应当**使用 `opts = {}` 替代 `config = function() ... ebd`**。
>
> ![[_attachment/05-工具/vim/lazy.nvim 插件管理器.assets/IMG-lazy.nvim 插件管理器-08125CEF7B5FEB604BB6090602241FF7.png|512]]
>
### 插件配置文件示例
![[05-工具/vim/Neovim 插件#^qu8flb]]
![[05-工具/vim/Neovim 插件#^y04wu9]]
![[05-工具/vim/Neovim 插件#^wz0l58]]
![[05-工具/vim/Neovim 插件#^2o26dg]]
<br><br><br>
# 参考资料
##### 官方文档
- [lazy.nvim](https://lazy.folke.io/)
##### 其他
[lazy-nvim插件管理器基础入门 - w4ngzhen - 博客园](https://www.cnblogs.com/w4ngzhen/p/17493128.html)
# Footnotes
[^1]: [lazy.nvim](https://lazy.folke.io/spec)