lazy.nvim 和 LazyVim 入口函数简单分析

介绍

**lazy.nvim ** 是最流行的插件管理工具,它具有高度的结构化,简单易用,并且稳定高效,完全超越了上一代流行的 packer.nvim 。

LazyVim 则是应运而生的插件配置集合,它集成了 Neovim 生态下最常见的插件及流行的配置,极大的方便了 Neovim 的新人上手使用。

为了更好的对自己的 Neovim 进行定制化,了解这两个项目的一些基础运作原理是非常有帮助的。这篇文章以 lazy.nvim 的 setup() 入口函数为视角,对它进行简单的剖析,为以后更深入的定制化操作打好基础。

案例

下面是一个最典型的配置方式:

lua 复制代码
require("lazy").setup({
  spec = {
    { "LazyVim/LazyVim", import = "lazyvim.plugins" }, 
    { import = "v.plugins" },
  },
  defaults = {
    lazy = true,
    version = false, -- always use the latest git commit
  },
  install = { colorscheme = { "tokyonight", "habamax" } },
}
解释:

当我们在 spec 中指定了 spec 为 { "LazyVim/LazyVim", import = "lazyvim.plugins" } 后,这个 spec 会传给 lazy.nvim 解析并处理,lazy.nvim 会把 LazyVim 作为模块名(module name),并且在 rtp 中加入该项目路径。

我们可以看下 require("lazy.core.config").spec.plugins 的结构是怎么样的:

可以看到,我们可以通过 require("lazy.core.config").spec.plugins.LazyVim 的方式访问到 LazyVim 项目的信息,包括 dir, name 等信息。

而对于其他的安装的 plugins,我们也是可以看到的:

可以看到,一旦 lazy.nvim 的 setup() 流程完成,那么所有 plugins 目录中的插件配置信息都会被载入到 lazy.core.config.spec.plugins 字段中,我们可以用 lazy.plugins() 的方法打印出来,比如:

lua 复制代码
-- for debug purpose
local function debug_plugins()
  vim.api.nvim_create_autocmd("VimEnter", {
    callback = function()
      vim.schedule(function()
        local lazy = require("lazy")
        local plugins = lazy.plugins()
        local file = io.open(vim.fn.stdpath("data") .. "/lazy/all_plugins.lua", "w")
        if file then
          file:write(vim.inspect(plugins))
          file:close()
          print("Plugins data written to " .. vim.fn.stdpath("data") .. "/lazy/all_plugins.lua")
        else
          print("Failed to write plugins data")
        end
      end)
    end,
  })
end

spec 字段中的 import 语句解析

  • The import field tells lazy.nvim to load plugin specifications from the "lazyvim.plugins" module.

  • This module is typically a directory containing multiple Lua files, each defining one or more plugins.

后面的 "lazyvim.plugins" 是表示要处理的模块的名字,它是一个具体的目录,比如,这里就是 LazyVim/lua/lazyvim/plugins 目录。这个目录里面的每个文件都返回一个 table,表示每个 plugin 的 specification。所有的 tables 都保存在

lazy.core.config.spec.plugins 中,以你具体的 plugin name 为每个 table 的 name。

需要注意的是:所有 plugins 最终 spec 都是 normalize 之后的样子。 另外,lazy.core.cache.plugins 中也会保存一份,方便快速导入。

好了,入口函数就先简单介绍到这里,后续会继续更新相关的文章,深入探索这两个工具。

如果你喜欢我的文章,请关注我的公众号 deliverit。

相关推荐
CSND7402 天前
Ubuntu vi(vim)编辑器配置一键补全main函数
linux·c语言·ubuntu·编辑器·vim
susu10830189115 天前
vi或vim进行替换
linux·编辑器·vim
Hu_go__5 天前
vim的使用
linux·编辑器·vim
计算小屋5 天前
Vim 使用基本操作总结
编辑器·vim·excel
云计算DevOps-韩老师7 天前
【网络云计算】2024第50周-每日【2024/12/13】小测-理论-写10个Bash Shell脚本-解析
运维·网络·云计算·vim·bash·负载均衡·perl
蓝影铁哥7 天前
Linux实操篇-远程登录/Vim/开机重启
java·linux·运维·spring boot·spring·vim
大隐隐于野7 天前
vimdc
vim
让学习成为一种生活方式7 天前
常用vim命令行-linux008
编辑器·vim·excel
果汁分你一半l9 天前
day3 构造数据类型,数据结构基础
c语言·数据结构·vim
qq_3775727710 天前
vim save
linux·vim