From 54a6c0a2bfe883f70704a3010a82c58c4c9e1ce6 Mon Sep 17 00:00:00 2001 From: Thomas Vanbesien Date: Sun, 7 Jun 2026 14:20:06 +0200 Subject: feat(nvim): add transform_text plugin With mappings to URL-encode/decode visual selection. --- .config/nvim/plugin/50-transform_text.lua | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .config/nvim/plugin/50-transform_text.lua diff --git a/.config/nvim/plugin/50-transform_text.lua b/.config/nvim/plugin/50-transform_text.lua new file mode 100644 index 0000000..9ec74d5 --- /dev/null +++ b/.config/nvim/plugin/50-transform_text.lua @@ -0,0 +1,25 @@ +local function get_visual_selection_text() + return table.concat(vim.fn.getregion(vim.fn.getpos("v"), vim.fn.getpos("."), { type = vim.fn.mode() }), "\n") +end + +local function delete_visual_selection() + local mode = vim.fn.mode() + local eovisual_pos, cur_pos = vim.fn.getpos("v"), vim.fn.getpos(".") + local region = vim.fn.getregionpos(eovisual_pos, cur_pos, { type = mode })[1] + local start_row, start_col = unpack(region[1], 2, 3) + local end_row, end_col = mode == "v" and region[2][2] or math.max(eovisual_pos[2], cur_pos[2]), region[2][3] + vim.api.nvim_buf_set_text(0, start_row - 1, start_col - 1, end_row - 1, end_col, {}) +end + +local function transform_visual_selection(transform) + local selection = get_visual_selection_text() + delete_visual_selection() + vim.api.nvim_put({ transform(selection) }, "c", true, true) +end + +vim.keymap.set("x", "tue", function() + transform_visual_selection(vim.uri_encode) +end, { desc = "URL-encode selection" }) +vim.keymap.set("x", "tud", function() + transform_visual_selection(vim.uri_decode) +end, { desc = "URL-decode selection" }) -- cgit v1.3.1