前言
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 specifykeys
spec is differentrtp
can be accomplished with:
config =function(plugin)
vim.opt.rtp:append(plugin.dir .."/custom-rtp")end
其中经常用到的是
dependencies
config
这两个字段
字段说明:
dependencies
插件启动依赖配置 Packer中的after
和wants
这两个字段的功能被dependencies
字段所取代。意味着以后在Lazy中配置插件的启动顺序只需用到dependencies
这一个字段。config
用来保存插件配置opts
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,
要及时地观看文档,出现这样问题一般是当前配置与新版本不匹配导致的。
参考:
- 使用lazy.nvim作为你的Neovim插件管理器 - 知乎
- Neovim配置系列(1) - 知乎
- folkelazy.nvim 💤 A modern plugin manager for Neovim
- 群友的帮助
版权归原作者 GrowlR 所有, 如有侵权,请联系我们删除。