首页 > 其他分享 >lazy-nvim插件管理器基础入门

lazy-nvim插件管理器基础入门

时间:2023-06-20 11:22:37浏览次数:47  
标签:插件 管理器 tree lazy lua init nvim

一篇通过使用lazy.nvim进行nvim插件管理的入门笔记。

基础安装

init.lua

路径:stdpath("config")/init.lua

stdpath("config")

macOS/Linux:~/.config/nvim

Windows:~/AppData/Local/nvim

-- bootstrap lazy.nvim
-- ./lua/lazynvim-init.lua
require("lazynvim-init")

意义作用:

nvim启动时会加载init.lua配置,然后通过require("lazynvim-init")查找当前init.lua所在目录下的lua目录下的lazynvim-init.lua文件,运行其内容。

lazynvim-init.lua

路径:stdpath("config")/lua/lazynvim-init.lua

代码内容:

-- 1. 准备lazy.nvim模块(存在性检测)
-- stdpath("data")
-- macOS/Linux: ~/.local/share/nvim
-- Windows: ~/AppData/Local/nvim-data
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
	vim.fn.system({
		"git",
		"clone",
		"--filter=blob:none",
		"https://github.com/folke/lazy.nvim.git",
		"--branch=stable", -- latest stable release
		lazypath,
	})
end
-- 
-- 2. 将 lazypath 设置为运行时路径
-- rtp(runtime path)
-- nvim进行路径搜索的时候,除已有的路径,还会从prepend的路径中查找
-- 否则,下面 require("lazy") 是找不到的
vim.opt.rtp:prepend(lazypath)

-- 3. 加载lazy.nvim模块
require("lazy").setup({})

意义作用:

该配置文件主要有3部分组成:

  1. lazy.nvim的加载与存在性验证;
  2. 将lazy.nvim模块所在目录加入到lua模块搜索路径下,以便可以require到lazy.nvim模块;
  3. 让lazy.nvim加载插件。

第一步,lazy.nvim进行存在性检查。如果不存在,则通过git clone方式,下载lazy.nvim模块代码,并存放到stdpath("data")/lazy/lazy.nvim目录下。

stdpath("data")路径为:

macOS/Linux:~/.local/share/nvim

Windows:~/AppData/Local/nvim-data

第二步,通过"vim.opt.rtp:prepend(lazypath)"代码将lazy.nvim模块所在的路径(也就是上面的变量lazypath)加入到运行时路径(runtimepath)下,只有配置了这行代码才能让下面require("lazy")执行的时候,能够从lazypath中搜索到lazy模块并加载。

在本人macOS机器上,如果第一步成功安装了lazy.nvim模块,则翻看"~/.local/share/nvim/lazy/lazy.nvim"目录,会看到以下内容:

$ cd ~/.local/share/nvim/lazy/lazy.nvim
$ tree -L 2
.
├── CHANGELOG.md
├── LICENSE
├── README.md
├── TODO.md
├── doc
├── lua(这里面还有目录lazy/init.lua文件)
├── selene.toml
├── stylua.toml
├── tests
└── vim.toml

搜索lazy模块的时候,会从~/.local/share/nvim/lazy/lazy.nvim目录下找到lua/lazy/init.lua进行加载。

如果不配置,会看到如下报错:

E5113: Error while calling lua chunk: /Users/w4ngzhen/.config/nvim/lua/lazynvim-init.lua:22: module 'lazy' not found:
        no field package.preload['lazy']
        no file './lazy.lua'
        no file '/usr/local/share/luajit-2.1.0-beta3/lazy.lua'
        no file '/usr/local/share/lua/5.1/lazy.lua'
        no file '/usr/local/share/lua/5.1/lazy/init.lua'
        no file './lazy.so'
        no file '/usr/local/lib/lua/5.1/lazy.so'
        no file '/usr/local/lib/lua/5.1/loadall.so'

第三步,通过require("lazy").setup({})代码加载下载好的lazy.nvim模块代码。当然,由于setup代码的参数是一个空的table,也就意味着我们还没有让lazy.nvim管理/加载任何的插件,后文将介绍插件的安装与加载、配置。

验证

我们的配置文件结构如下:

$ cd ~/.config/nvim
$ tree
.
├── README.md
├── init.lua
└── lua
    └── lazynvim-init.lua

上述配置完毕以后,让我们首次启动nvim,第一次启动的时候,由于会从远端下载lazy.nvim模块,所以会有一定的延迟。然后,我们就会进入正常的nvim界面。然后命令模式下输入指令:Lazy后,我们会看到nvim的界面弹出一个对话框,展示lazy的状态:

010-simple-lazynvim-config-result

至此,我们就完成了lazy.nvim的安装与加载,下面会介绍使用lazy.nvim来安装/管理插件。

插件安装配置

在这一节中,我们将基于上面的成果,尝试安装几个高频的插件(关于这些插件的功能与使用方式,本文不会详细介绍):

  1. 文件树插件:nvim-tree.lua
  2. 文件状态展示插件:lualine.nvim

方式1:直接配置

以直接配置的方式安装插件十分简单,只需要在上面的lazynvim-init.lua的中require("lazy").setup({})添加插件安装代码即可:

020-add-plugins-by-simple-way

local nvim_tree_plugin = {
    "nvim-tree/nvim-tree.lua",
    version = "*",
    dependencies = {"nvim-tree/nvim-web-devicons"},
    config = function()
        require("nvim-tree").setup {}
    end
}
local lualine_plugin = {
    'nvim-lualine/lualine.nvim',
    config = function()
        require('lualine').setup()
    end
}
require("lazy").setup({nvim_tree_plugin, lualine_plugin})

上述方式下,我们首先定义了两个插件配置的table;然后,在setup中第一个参数table中,逐个添加插件。这样lazy.nvim就能帮我们将插件进行下载、安装。

这里不验证插件安装的结果,等到下文通过更加优雅的方式配置再看效果。

方式2:plugins目录统一编排

上述方式1固然简单,但每一次想要添加一个插件就需要在lazynvim-init.lua中添加插件代码;另外,大量的插件配置势必造成lazynvim-init.lua愈发臃肿。好在lazy.nvim还支持我们以更加优雅的方式编排插件:使用plugins目录统一编排插件。具体做法为:

第一步:lazynvim-init.lua中的setup参数变为setup("plugins"),同时移除掉有关具体插件安装配置的代码;

第二步:在lazynvim-init.lua所在目录下创建一个名为"plugins"的目录;

第三步:在plugins目录中创建插件配置模块lua脚本。在这一步中,我们分别创建两个lua脚本来分别作为两个插件的配置模块:

  1. plugin-lualine.lua
return {
    {
        'nvim-lualine/lualine.nvim',
        config = function()
            require('lualine').setup()
        end
    }
}
  1. plugin-nvim-tree.lua
return {
    {
        "nvim-tree/nvim-tree.lua",
        version = "*",
        dependencies = {"nvim-tree/nvim-web-devicons"},
        config = function()
            require("nvim-tree").setup {}
        end
    }
}

这里有两个注意点:1)文件名可以随意;2)每一个脚本模块都将返回一个table,且table的每一项都是一个插件配置(这里每个文件只有一项插件配置),lazy会把这些table合并为一个插件配置的table进行加载(folke/lazy.nvim:

标签:插件,管理器,tree,lazy,lua,init,nvim
From: https://www.cnblogs.com/w4ngzhen/p/17493128.html

相关文章

  • 一文理解什么是DTO、VO、BO、PO、DO,并推荐一款IDEA转换插件
     1、什么是DTO、VO、BO、PO、DO、POJOPOJO的定义是无规则简单的对象,在日常的代码分层中pojo会被分为VO、BO、PO、DTO。通过各层POJO的使用,有助于提高代码的可读性和可维护性。概念看似简单,但是想区分好或者理解好也不容易,本文简单梳理一下。DTO(DataTransferObject)数据传......
  • js-audio-recorder 插件实现web端录音
    介绍js-audio-recorder是一个纯js实现的浏览器端录音插件。目前支持以下功能:录音,暂停,恢复,和录音播放。音频数据的压缩,支持单双通道录音。录音时长、录音大小的显示。导出录音文件,格式为pcm或wav。录音波形显示,可自己定制。相关链接GitHub地址官网主页地址项目在线演......
  • 又一开源项目爆火于GitHub,Android高级插件化强化实战
    一、插件化起源插件化技术最初源于免安装运行Apk的想法,这个免安装的Apk就可以理解为插件,而支持插件的app我们一般叫宿主。想必大家都知道,在Android系统中,应用是以Apk的形式存在的,应用都需要安装才能使用。但实际上Android系统安装应用的方式相当简单,其实就是把应用Apk......
  • vscode配置yapf格式化插件
    引言yapf比autopep8更加灵活和强大,可以考虑入手配置步骤安装yapf:pipinstallyapfvscode配置setting.json"python.formatting.provider":"yapf","python.formatting.yapfArgs":["--style={based_on_style=pep8,arithmetic_precede......
  • vue中前端实现pdf预览(含vue-pdf插件用法)
    场景:前端需要根据后端返回的线上pdf的地址,实现pdf的预览功能。情况一:后端返回的pdf地址,粘贴到浏览器的url框中,是可以在浏览器中直接进行预览的。方法(1)可以直接使用window.open('获取到的pdf地址')重新打开一个浏览器页签,通过浏览器页签直接实现预览功能(预览页面的样式,根据浏览器的不......
  • 要禁用 Windows Server 2022 2025时自动打开服务器管理器,可以通过以下批处理命令实现
    要禁用WindowsServer20222025时自动打开服务器管理器,可以通过以下批处理命令实现:首先打开记事本,输入以下命令:@echooffregadd"HKLM\Software\Microsoft\ServerManager"/vDoNotOpenServerManagerAtLogon/tREG_DWORD/d1/f保存文件,将文件名后缀改为.bat。......
  • selenium 使用本地浏览器插件
    <table><tr><tdbgcolor=orange>本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!</td></tr></table>selenium使用本地浏览器插件环境win10Python3.9seleniu......
  • dremio 24.1 Nessie 支持插件
    以前也简单说过24.1支持基于Nessie进行查询了,相关代码名称比较怪异(此代码开源了),名称为dataplane参考代码信息 说明因为dremio云版本支持基于Nessie的元数据管理,此功能代码还是值得学习参考的,整体开发上也是一个标准的存储扩展参考资料https://docs.dremio.com/software......
  • 使用以下命令来禁止 Windows Server 2022 在登录时自动启动服务器管理器
    使用以下命令来禁止WindowsServer2022在登录时自动启动服务器管理器:打开记事本,将以下命令复制粘贴到记事本中:regadd"HKLM\Software\Microsoft\ServerManager"/vDoNotOpenServerManagerAtLogon/tREG_DWORD/d1/f将文件保存为后缀名为.bat的批处理文件,比如"disabl......
  • wordpress插件:WP-UTF8-Excerpt使列表页只显示摘要(wordpress 6.2)
    一,安装WP-UTF8-Excerpt插件这个插件有点老,大家有更新及时的插件欢迎留言交流安装完成后,点击启用按钮二,查看效果说明:刘宏缔的架构森林—专注it技术的博客,网站:https://blog.imgtouch.com原文: https://blog.imgtouch.com/index.php/2023/06/18/wordpress-cha-jian-wputf......