有一个词叫 DRY(Don't Repeat Yourself),社区有很多 NeoVim 的高质量插件,这节我们来了解如何利用开源资源来,毕竟自己写一个 Lua 版的 NeoVim 插件,需要了解大量 NeoVim 的 API。
Lazy.nvim
我们首先来了解第一个 NeoVim 的插件,它就是 lazy.nvim,利用这个插件可以管理其他插件。可以简单查看下这个插件仓库的 README,我们要做得就是把它的安装代码整合到当前的配置结构中。先回顾一下之前的结构
bash
.
├── README.md
├── init.lua
├── lua
│ └── common
│ ├── basic.lua
│ └── init.lua
└── stylua.toml
我们在 lua 文件夹下建一个 utils 文件夹,然后创建个 global.lua 文件,里面的内容就写下面这些(这些代码来自 lazy.nvim 的仓库 README)
lua
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or 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)
然后继续在入口文件引入,于是入口文件就变成
lua
require "utils.global"
require "common.init"
整个配置的结构就变成
bash
.
├── README.md
├── init.lua
├── lua
│ ├── common
│ │ ├── basic.lua
│ │ └── init.lua
│ └── utils
│ └── global.lua
└── stylua.toml
通过 Lazy.nvim 安装其他插件
根据上面的描述,不出意外 Lazy.nvim 已经配好,先别急着退出 NeoVim,先配置一下用它安装其他插件。
继续在 common 目录创建个 plugins.lua 文件,我在里面已经写上了一些基础常用插件,这些字符串表示的是 GitHub 的用户名跟仓库名,如果不信可以随意拼上 https://github.com/
到对应仓库主页看看
lua
require("lazy").setup {
"folke/which-key.nvim",
"tpope/vim-surround",
{
"nvimdev/hlsearch.nvim",
event = "BufRead",
config = function()
require("hlsearch").setup()
end,
},
{ "catppuccin/nvim", name = "catppuccin" },
}
更多关于 Lazy.nvim 的用户可以查看插件的 README。
同理我们需要在 common 的 init.lua 加上刚才新建的文件,加完后的内容长这样
lua
require "common.basic"
require "common.plugins"
现在我们再来看看当前的配置目录结构
bash
.
├── README.md
├── init.lua
├── lua
│ ├── common
│ │ ├── basic.lua
│ │ ├── init.lua
│ │ └── plugins.lua
│ └── utils
│ └── global.lua
└── stylua.toml
此时只要重启一下 NeoVim,等待一段时间,就会自动安装好 lazy,如果期间没啥反应,我的建议是开一下那啥上网工具,要记得让终端也走那啥上网,除非你知道其他一些操作方式,总之就是能上那啥就行。
简单介绍一些插件
上面已经给出了一些我认为相当常用的插件,但事实上,除了 tpope/vim-surround
、nvimdev/hlsearch.nvim
,其他插件都是不生效的,前者是加载就自动配置好,后者是已经在 config 回调里建立了默认配置。
vim-surround 是一个什么插件,它是神奇到一个叫 Helix 的编辑器在其默认实现里就包含类似功能的一个插件,举个例子,你有一段代码
rust
let a = 10 * 3 + 2;
你想改变四则运算的顺序,让 3 + 2 先执行,你会想到把代码变成
rust
let a = 10 * (3 + 2);
实际操作就变成你把光标移动到 3 的前面加了一个 (
,然后把光标移到 2 的后面加了一个 )
。此时如果 vim-surround 安装没出问题,你就可以用 Vim 的 Visual 模式把 3 + 2
选中再按大写 s 再按 (
或者 )
,它会把光标选中的内容改成 (3 + 2)
,当然还有其他的玩法,可以看看插件的 README 详细了解。