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。

相关推荐
winkee6 小时前
使用 neoconf 来管理项目 lsp 配置
vim
简佐义的博客1 天前
生物信息常用编辑器:轻量/强大/可定制/跨平台支持的编辑器之神 - vim
linux·编辑器·vim
第六五1 天前
VIM简要介绍
linux·编辑器·vim
fqbqrr1 天前
2409vim,vim写文件有问题
vim
小狗爱世界1 天前
vim/vi常用命令大全
linux·编辑器·vim
豆小匠Coding1 天前
Windows安装Vim,并在PowerShell中直接使用vim
linux·编辑器·vim·powershell
WZF-Sang2 天前
Linux工具的使用——yum和vim的理解和使用
linux·运维·服务器·开发语言·学习·编辑器·vim
Jerry_Chenug3 天前
VIM常用操作
linux·编辑器·vim
元素之窗4 天前
在CentOS 7上实现NFS服务挂载及Vim编辑指令指南
linux·centos·vim