手把手教你开发一个neovim插件

项目结构与插件路径

插件路径

这里差不多也是废话,理论上来说,vim的插件可以在任何位置,插件的方式也可以是各种形式,不过为了这里面还是有一些潜规则的.
首先就是插件的路径,一般来说,neovim会默认加载一些路径,可以在neovim中执行echo &rtp(rtp:runtime path)来查看默认的加载路径有哪些,不过由于我们是
自己开发的插件,就暂时不要放在这些路径里面了,避免启动时报错,假设我现在放在了~/temp/neovim/lua/lowb这个目录下进行开发lowb插件,然后在启动neovim的时候使用nvim --cmd "set rtp+=~/temp/neovim"启动就可以加载lowb插件了,
插件名就是lua路径下的文件夹名,如果你的插件比较简单,可以不用新建一个文件夹,直接搞一个lowb.lua就可以加载了,不过按照约定一般是有一个文件夹的,方便发布,供其他人使用

这里需要注意,一定放在lua的子目录下,否则neovim是不会进行加载这个插件的,参考

项目结构

init.lua

neovim会自动加载目录下的init.lua作为neovim的默认加载文件

开始开发

加载

确定了插件路径和项目结构,就可以开发lowb插件了,在~/temp/neovim/lua/lowb,先新建一个init.lua文件,文件内容如下:

1
print("Hello lowb")

然后使用nvim -c "set rtp+=~/temp/neovim"启动neovim

进入neovim的命令模式执行:lua require('lowb')
可以看到会打印Hello lowb
OK,现在插件成功加载了

导出函数

插件肯定不能简单的加载,还要导出一些函数供用户使用,更新init.lua

1
2
3
4
5
6
local M = {}
function M.say_lowb()
print("hello lowb")
end

return M

保存插件,重新使用命令nvim -c "set rtp+=~/temp/neovim"启动neovim
进入neovim的命令模式执行:lua require('lowb').say_lowb()

现在lowb插件基本完成,还有一项功能就是给用户设置的能力

setup函数

neovim插件一般是通过向外暴露一个setup函数来给用户设定,这倒不是强制规定,只是一个默认约定,像一些插件管理工具,比如lazy.vim一般就是默认使用setup来进行初始化插件,

现在再改一下init.lua文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
local default_config = {
name = "狗蛋"
}

local M = {
config = default_config
}
function M.say_lowb()
print("hello lowb "..M.config.name)
end



function M.setup(config)
M.config = config
vim.print(M)
end

return M

保存退出,重新使用命令:nvim -c "set rtp+=~/temp/neovim" 启动neovim,

进入命令模式执行以下命令

1
2
lua require('lowb').setup({name=finger})
lua require('lowb').say_lowb()

就会看到打印的信息从”狗蛋”更新为”finger”

Author

finger

Posted on

2023-10-12

Updated on

2025-06-11

Licensed under

Comments