net.lua (1408B)
1 vim.g.loaded_remote_file_loader = true 2 3 --- Callback for BufReadCmd on remote URLs. 4 --- @param args { buf: integer } 5 local function on_remote_read(args) 6 if vim.fn.executable('curl') ~= 1 then 7 vim.api.nvim_echo({ 8 { 'Warning: `curl` not found; remote URL loading disabled.', 'WarningMsg' }, 9 }, true, {}) 10 return true 11 end 12 13 local bufnr = args.buf 14 local url = vim.api.nvim_buf_get_name(bufnr) 15 local view = vim.fn.winsaveview() 16 17 vim.api.nvim_echo({ { 'Fetching ' .. url .. ' …', 'MoreMsg' } }, true, {}) 18 19 vim.net.request( 20 url, 21 { retry = 3 }, 22 vim.schedule_wrap(function(err, content) 23 if err then 24 vim.notify('Failed to fetch ' .. url .. ': ' .. tostring(err), vim.log.levels.ERROR) 25 vim.fn.winrestview(view) 26 return 27 end 28 29 local lines = vim.split(content.body, '\n', { plain = true }) 30 vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, lines) 31 vim.api.nvim_exec_autocmds('BufRead', { group = 'filetypedetect', buffer = bufnr }) 32 vim.bo[bufnr].modified = false 33 34 vim.fn.winrestview(view) 35 vim.api.nvim_echo({ { 'Loaded ' .. url, 'Normal' } }, true, {}) 36 end) 37 ) 38 end 39 40 vim.api.nvim_create_autocmd('BufReadCmd', { 41 group = vim.api.nvim_create_augroup('nvim.net.remotefile', {}), 42 pattern = { 'http://*', 'https://*' }, 43 desc = 'Edit remote files (:edit https://example.com)', 44 callback = on_remote_read, 45 })