如何在退出Neovim终端时运行指定的Lua函数
Neovim终端进程退出触发自定义函数实现方案
该需求可以直接通过vim.fn.termopen()的原生参数实现,不需要额外依赖其他组件。
实现原理
vim.fn.termopen()的第二个参数接受配置表,其中on_exit字段可以指定终端进程退出时的回调函数,进程终止时Neovim会自动触发该回调。
完整实现代码
vim.fn.termopen("foo", { -- on_exit回调默认接收三个参数: -- 1. job_id: 终端对应的任务ID,和终端缓冲区号一致 -- 2. exit_code: 进程退出码,0为正常退出 -- 3. event_type: 退出类型,正常退出为0,信号终止为对应信号编号 on_exit = function(_, exit_code, _) -- 可自行加判断逻辑,比如仅进程正常退出时执行目标函数 if exit_code == 0 then require('my-plugin').someFunction() end end })
可选拓展说明
- 如果自定义函数需要用到终端缓冲区的内容,可直接通过
vim.api.nvim_buf_get_lines(job_id, 0, -1, false)读取终端的所有输出内容 - 如果需要绑定进程启动、标准输出/错误输出的回调,还可以使用配置表中的
on_stdout、on_stderr参数实现对应逻辑
内容的提问来源于stack exchange,提问作者InsertSON
相关产品推荐
相关产品推荐

