0


使用Lazy.nvim插件管理器,让你的Nvim懒惰起来(从Packer迁移到Lazy记录)

前言

Lazy.nvim作为Neovim新的插件管理器,因其速度和懒加载的特性收到很大的欢迎。Lazy的其他特性网上已有文章说明,此处已不再赘述。

关于从Packer迁移到Lazy在Lazy的READMD.md中已有教程,这甚至是经过Packer作者亲自校对的。不过在我迁移的过程中,有些插件的配置改完之后不会生效,甚至会报错。

本次就说说从Packer迁移到Lazy都需要注意什么。

配置Lazy的时候我最大的感触就是多看看README和LazyNvim。

从 Packer 到 Lazy.nvim

将你的nvim配置和插件文件打包备份。

1. 将Packer换成Lazy

首先将Pakcer生成的文件

packer_compiled.lua

和下载的nvim插件全部删除。
将Packer的设置换成Lazy:

local ensure_packer =function()local fn = vim.fn
  local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'if fn.empty(fn.glob(install_path))>0then
    fn.system({'git','clone','--depth','1','https://github.com/wbthomason/packer.nvim', install_path})
    vim.cmd [[packadd packer.nvim]]returntrueendreturnfalseendlocal packer_bootstrap =ensure_packer()

换成:

local lazypath = vim.fn.stdpath("data").."/lazy/lazy.nvim"ifnot 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
vim.opt.rtp:prepend(lazypath)

然后将

returnrequire('packer').startup(function(use)-- ...if packer_bootstrap thenrequire('packer').sync()endend)

换成

require("lazy").setup({-- ...})

2. 字段替换

其实从 Packer 到 Lazy.nvim 最简单的方法就是替换字段,再将require中的配置移动到config中,接下来从字段替换说起。

以下是要替换的字段:

  • setup ➡️ init
  • requires ➡️ dependencies
  • as ➡️ name
  • opt ➡️ lazy
  • run ➡️ build
  • lock ➡️ pin
  • disable=true ➡️ enabled = false
  • tag= ➡️ version=
  • after ℹ️ not needed for most use-cases. Use dependencies otherwise.
  • wants ℹ️ not needed for most use-cases. Use dependencies otherwise.
  • config don’t support string type, use fun(LazyPlugin) instead. module is auto-loaded. No need to specify
  • keys spec is different
  • rtp can be accomplished with:
config =function(plugin)
    vim.opt.rtp:append(plugin.dir .."/custom-rtp")end

其中经常用到的是

  • dependencies
  • config

这两个字段

字段说明:

  1. dependencies 插件启动依赖配置 Packer中的 afterwants 这两个字段的功能被 dependencies 字段所取代。意味着以后在Lazy中配置插件的启动顺序只需用到 dependencies 这一个字段。
  2. config 用来保存插件配置
  3. opts
  4. enabled 字段用来配置插件是否启用。 在Packer中禁用插件会将插件文件删除,但Lazy突破了这个限制,禁用插件不会删除,而是会被保留给下次启用,这样就不用一次次地重复下载插件了。

然后Packer配置中用到的

use

字段在Lazy中也不再需要了。

最简单的迁移就是配置好启动依赖之后,将其余的配置统统塞到:

config =function(plugin)--- 塞到这里end

这部分工作用nvim自带的字符串替换功能足以完成。将

use

替换成

,

其余字段按照上述列表配置就行。

3. 字段替换实例

use{'nvim-lualine/lualine.nvim',
  requires ={'kyazdani42/nvim-web-devicons', opt =true}}require('lualine').setup({
    options ={
        theme ='tokyonight'}})

换成:

{'nvim-lualine/lualine.nvim',
    dependencies ={'kyazdani42/nvim-web-devicons', opt =true},
    opts ={-- 这将自动调用 `require("lualine").setup(opts)`
        theme ='tokyonight'},}

4. 让Lazy管理你的插件配置文件

在完成上面的字段替换之后,再次启动差不多就能完成从 Packer 到 Lazy.nvim 的简单迁移。但既然都迁移到Lazy了那为什么不让Lazy也把我们的插件配置文件一起管理起来呢?

首先,将包含Lazy的lua文件从你的

plugins

文件夹(插件文件夹)中移动到你的

core

文件夹中。
并在

init.lua

中添加 :

require("lazy").setup({
    spec ={ import ="plugins"},
    ui ={
        border ="rounded"},})

这样就能自动加载位于

lua/plugins

文件夹中的配置文件了。
接下来就是改造插件配置文件了,因为这样的lazy自动加载要求配置文件返回一个两层

table

示例配置文件模板:

plugins/plugin.lua
return{"..",-- 插件安装路径
    opts ={-- ..},-- ..}

文件示例:

return{"nvim-treesitter/nvim-treesitter",
    opts ={--添加不同语言
        ensure_installed ={"c","lua","cpp","vim","help","json","python","rust"},
        highlight ={ enable =true},
        indent ={ enable =true},-- 不同括号颜色区分
        rainbow ={
            enable =true,
            extended_mode =true,
            max_file_lines =nil,}}}

但是使用

opts

字段有个局限,因为

opts

字段内只能使用

table

。但是自己的配置中一大堆的

local

怎么弄呢?此时就要用

config

字段了,而且还可以不用

opts

字段,全都包在:


config =function()-- 放到这end,

中,就行。
示例:

return{"akinsho/bufferline.nvim",
    dependencies ={{'nvim-tree/nvim-web-devicons',}},
    config =function()
        vim.opt.termguicolors =truerequire("bufferline").setup({
        options ={-- TODO: 改成lazy样式。-- 使用 nvim 内置lsp
            diagnostics ="nvim_lsp",-- 标题同时显示错误和警告
            diagnostics_indicator =function(count, level, diagnostics_dict, context)local s =" "for e, n inpairs(diagnostics_dict)dolocal sym = e =="error"and" "or(e =="warning"and" "or"")
                    s = s .. n .. sym
                endreturn s
            end,-- 左侧让出 nvim-tree 的位置
            offsets ={{
                filetype ="NvimTree",
                text ="File Explorer",
                highlight ="Directory",
                text_align ="left"}},-- 动态显示关闭键
            hover ={
                enabled =true,
                delay =200,
                reveal ={'close'}},}})end,}

踩坑指南

1. neodev插件的启动依赖

neodev插件需要在lsp插件启动之前启动。但是将neodev放到

dependencies

中时,neodev不会生效。
解决方法:

        dependencies ={{"folke/neodev.nvim",
                config =true,--需要加上这个},
config = true

表示启用默认配置。

2.

opts

config

字段一同存在,但

opts

中的设置不生效。

config

中添加:

config =function(_,opts)-- 。。。require("bufferline").setup(opts)-- 。。。end,

这样设置即可让

opts

config

字段一同生效。
但这会导致一些插件出现错误,例如

bufferline

插件。
解决方法:多套一层层级,用options包起来

opts ={
        options ={-- TODO: 改成lazy样式。-- 使用 nvim 内置lsp
            diagnostics ="nvim_lsp",-- 标题同时显示错误和警告
            diagnostics_indicator =function(count, level, diagnostics_dict, context)local s =" "for e, n inpairs(diagnostics_dict)dolocal sym = e =="error"and" "or(e =="warning"and" "or"")
                    s = s .. n .. sym
                endreturn s
            end,-- 左侧让出 nvim-tree 的位置
            offsets ={{
                filetype ="NvimTree",
                text ="File Explorer",
                highlight ="Directory",
                text_align ="left"}},-- 动态显示关闭键
            hover ={
                enabled =true,
                delay =200,
                reveal ={'close'}},},},
 config =function(_,opts)
        vim.opt.termguicolors =truerequire("bufferline").setup(opts)end,

要及时地观看文档,出现这样问题一般是当前配置与新版本不匹配导致的。


参考:

  1. 使用lazy.nvim作为你的Neovim插件管理器 - 知乎
  2. Neovim配置系列(1) - 知乎
  3. folkelazy.nvim 💤 A modern plugin manager for Neovim
  4. 群友的帮助
标签: vim linux

本文转载自: https://blog.csdn.net/GrowlR/article/details/129781782
版权归原作者 GrowlR 所有, 如有侵权,请联系我们删除。

“使用Lazy.nvim插件管理器,让你的Nvim懒惰起来(从Packer迁移到Lazy记录)”的评论:

还没有评论