简明Neovim插件开发指南
非保姆级教程,相信每一个vimer都是乐意折腾的。
写插件需要什么
- Lua编程环境
luajit
,lua-language-server
,自力更生。
- 调试器
mfussenegger/nvim-dap
,jbyuki/one-small-step-for-vimkind
,有能力的配置一下,没办法的用
一般的插件长什么样
lua/
plugin_name/
init.lua
plugin/
plugin_name.lua
lua目录下的lua文件可使用require导入,插件加载时plugin目录下的lua文件会被执行。
这两个目录都不是必须的,但至少要有一个,否则这个插件什么都干不了。
怎么加载本地的插件
所有插件管理器都可以从本地加载插件,lazy.nvim
更方便一点,设置一下dev=true
,dir=path_to_plugin
即可。
插件内部的模块是怎么管理的
在任何地方都可以通过require("plugin_name")
导入lua/plugin_name/init.lua
。以此类推,导入lua/plugin_name/xxx.lua
使用require("plugin_name.xxx")
。
不要试图通过相对路径导入模块。
搞个简单的例子看一下
niuiic/cp-image.nvim,这是一个从剪贴板生成图片并在当前缓冲区中插入引用代码的插件。无需细看逻辑实现,关注插件函数的导出与使用即可。
光有lua怎么和编辑器交互
neovim内置了不少lua函数,可以调用这些函数与编辑器和系统进行交互。所有函数都挂在全局变量vim
上。
一般的开发熟悉一下vim.fn
、vim.api
、vim.lsp
和vim.loop
这几个模块下的函数即可。
vim.fn
昔日vimscript函数的lua实现。vim.api
另起炉灶的lua api。vim.lsp
lsp lua api。vim.loop
lua uv库。
被折腾得半死,能不能有个现成的开发环境
niuiic/modern-neovim-configuration,个人配置,不负责稳定性,不定时破坏性更新,不介意的话可参考配置。
写了些插件,推荐一下,也算是案例
-
- 格式化插件
- 可在一次格式化操作中同时应用多个程序,比如执行
perttier
之后再执行eslint fix
解决一下冲突 - 易配置,易扩展,只要知道怎么用命令格式化文件即可应用该程序
- 异步格式化
- 局部格式化
-
- 分割线插件
- 正则匹配自定义代码分割线
- 高亮、跳转、定位
-
nvim-dap
工具集- 保存/复原/切换/搜索断点
- 保存/复原watches
- 安全地在调试启动前注入自定义操作
-
- 翻译插件
- 支持任意命令行翻译工具
- 支持多种输入输出方式
- 异步
-
- 独立编辑文件的一部分
- 比如将markdown文件中的代码块抽离到独立的buffer中编辑,避免lsp等配置的冲突
-
- session管理器
- 自动保存/恢复session
- 多session自由切换
- 自由扩展功能,如保存/恢复断点、watches、quickfix、undo记录等
-
- 从剪贴板生成图片并插入引用代码
- 用于实现截图并插入markdown文档的功能