keys = { sideeffect = {}, key = "" } setmetatable(keys, { __index = function (table, index) local modifier, key = index:match("^(.*)_"), index:match("[^_]*$") if modifier == nil then if #key > 1 then key = "<" .. key .. ">" end table.key = table.key .. key return keys end modifier = modifier:upper() if modifier == "SHIFT" then table.key = table.key .. "" elseif modifier == "CONTROL" then table.key = table.key .. "" elseif modifier == "ALT" then table.key = table.key .. "" elseif modifier == "SUPER" then table.key = table.key .. "" elseif modifier ~= nil then error("Unknown key modifier \"" .. modifier .. "\"!") end return keys end, __call = function (table, ...) return vim.keymap.set(table.sideeffect, table.key, ...) end }) map = {} setmetatable(map, { __index = function (table, index) keys.sideeffect = {} keys.key = "" for i = 1, index:len() do rawset(keys.sideeffect, i, index:sub(i, i)) end return keys end }) --vim.keymap.set(mode.n.Alt_P, "gd") map.n.Alt_p("gt") map.n.Alt_o("gT")