local function get_visual_selection() local start_pos = vim.fn.getpos('v') local end_pos = vim.fn.getpos('.') local text = vim.fn.getregion(vim.fn.getpos('v'), vim.fn.getpos('.'), { type = vim.fn.mode() }) return { start_pos = start_pos, end_pos = end_pos, text = text } end vim.keymap.set('x', '', function() local sel = get_visual_selection() vim.print(sel) vim.api.nvim_buf_set_text( sel.start_pos[1], -- bufnum sel.start_pos[2] - 1, -- vim.api funcs use 0-based indexing sel.start_pos[3] - 1, sel.end_pos[2] - 1, sel.end_pos[3], { '' .. table.concat(sel.text, '') .. '' } ) vim.api.nvim_input('') end, { desc = 'html: make link' })