Run An External Process Every Time You Save A File In Neovim

Code
local do_the_thing = function()
  local Job = require 'plenary.job'
  Job:new({
    command = 'bash',
    args = { '-c', 'echo "Doing The Thing"'},
    on_exit = function(job, return_val)
      print(vim.inspect(job:result()))
    end,
  }):start()
end

vim.api.nvim_create_autocmd("BufWritePost", {
  group = vim.api.nvim_create_augroup("DoTheThingGroup", { clear = true }),
  callback = function()
    do_the_thing()
  end,
})
Notes
  • This uses `BufWritePost`lua` to pickup when files are saved and then runs whatever is in the callback

  • I tried `callback = do_the_thing()`lua` directly but it didn't work without the wrapper `function()`lua`

  • This runs the command asycn and prints the response when it finishes

  • There's no error handling in this example, that would depend on the response in `on_exit`lua`

  • TBD on accessing STDERR from on_exit