From 15a7c2d8e005391d4aaac919b5776b5fa2822a41 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Thu, 14 Sep 2023 22:05:28 +0200 Subject: nvim: Preserve registers when transposing chars --- .config/nvim/lua/mango/lib.lua | 16 ++++++++++++++++ .config/nvim/lua/mango/remap.lua | 16 +++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) (limited to '.config/nvim') diff --git a/.config/nvim/lua/mango/lib.lua b/.config/nvim/lua/mango/lib.lua index 4c38986..9182a06 100644 --- a/.config/nvim/lua/mango/lib.lua +++ b/.config/nvim/lua/mango/lib.lua @@ -18,4 +18,20 @@ function M.remap(modes, from, to, opts) vim.keymap.set(ct, from, to, opts) end +function M.save_regs(regs, callback) + local rs = {} + for r in regs:gmatch('.') do + rs[r] = { + s = vim.fn.getreg(r), + t = vim.fn.getregtype(r), + } + end + + callback() + + for k, v in pairs(rs) do + vim.fn.setreg(k, v.s, v.t) + end +end + return M diff --git a/.config/nvim/lua/mango/remap.lua b/.config/nvim/lua/mango/remap.lua index a43ba19..0c4f1a9 100644 --- a/.config/nvim/lua/mango/remap.lua +++ b/.config/nvim/lua/mango/remap.lua @@ -1,4 +1,5 @@ -local remap = require('mango.lib').remap +local lib = require('mango.lib') +local remap = lib.remap vim.g.mapleader = ' ' @@ -46,5 +47,14 @@ remap('n', 'Y', '"+Y') remap('nv', "'", '`') remap('nv', '`', "'") --- Transpose characters, because ‘xp’ is kinda awkward -remap('n', 't', 'xp') +-- Transpose characters without clobbering registers +local function transpose_chars(rev) + lib.save_regs('a', function() + vim.cmd.normal('"a' .. (rev and 'X' or 'x') .. '"ap') + end) +end + +remap('n', 't', transpose_chars) +remap('n', 'T', function() + transpose_chars(true) +end) -- cgit v1.2.3