diff options
-rw-r--r-- | init.lua | 6 | ||||
-rw-r--r-- | lua/keymappings.lua | 44 | ||||
-rw-r--r-- | lua/utils/init.lua | 26 | ||||
-rw-r--r-- | lua/utils/keymap.lua | 31 |
4 files changed, 48 insertions, 59 deletions
@@ -22,8 +22,10 @@ end require("settings").load_commands() autocmds.define_augroups(lvim.autocommands) -require "keymappings" --- require("lsp").setup_default_bindings() +local keymap = require "utils.keymap" +local default_keymaps = require "keymappings" +keymap.load(default_keymaps.keymaps, default_keymaps.opts) +keymap.load(lvim.keys, default_keymaps.opts) local plugins = require "plugins" local plugin_loader = require("plugin-loader").init() diff --git a/lua/keymappings.lua b/lua/keymappings.lua index 9c0ad217..3cbe797a 100644 --- a/lua/keymappings.lua +++ b/lua/keymappings.lua @@ -1,14 +1,12 @@ -local utils = require "utils" - local opts = { - nnoremap = { noremap = true, silent = true }, - inoremap = { noremap = true, silent = true }, - vnoremap = { noremap = true, silent = true }, - xnoremap = { noremap = true, silent = true }, - generic = { silent = true }, + insert_mode = { noremap = true, silent = true }, + normal_mode = { noremap = true, silent = true }, + visual_mode = { noremap = true, silent = true }, + visual_block_mode = { noremap = true, silent = true }, + term_mode = { silent = true }, } -local default_keys = { +local keymaps = { insert_mode = { -- I hate escape { "jk", "<ESC>" }, @@ -83,33 +81,17 @@ local default_keys = { if vim.fn.has "mac" == 1 then -- TODO: fix this - default_keys.normal_mode[5][1] = "<A-Up>" - default_keys.normal_mode[6][1] = "<A-Down>" - default_keys.normal_mode[7][1] = "<A-Left>" - default_keys.normal_mode[8][1] = "<A-Right>" -end - -if lvim.leader == " " or lvim.leader == "space" then - vim.g.mapleader = " " -else - vim.g.mapleader = lvim.leader + keymaps.normal_mode[5][1] = "<A-Up>" + keymaps.normal_mode[6][1] = "<A-Down>" + keymaps.normal_mode[7][1] = "<A-Left>" + keymaps.normal_mode[8][1] = "<A-Right>" end -local function get_user_keys(mode) - if lvim.keys[mode] == nil then - return default_keys[mode] - else - return lvim.keys[mode] - end -end - -utils.add_keymap_normal_mode(opts.nnoremap, get_user_keys "normal_mode") -utils.add_keymap_insert_mode(opts.inoremap, get_user_keys "insert_mode") -utils.add_keymap_visual_mode(opts.vnoremap, get_user_keys "visual_mode") -utils.add_keymap_visual_block_mode(opts.xnoremap, get_user_keys "visual_block_mode") -utils.add_keymap_term_mode(opts.generic, get_user_keys "term_mode") +vim.g.mapleader = lvim.leader == "space" and " " or lvim.leader -- navigate tab completion with <c-j> and <c-k> -- runs conditionally vim.cmd 'inoremap <expr> <C-j> pumvisible() ? "\\<C-n>" : "\\<C-j>"' vim.cmd 'inoremap <expr> <C-k> pumvisible() ? "\\<C-p>" : "\\<C-k>"' + +return { keymaps = keymaps, opts = opts } diff --git a/lua/utils/init.lua b/lua/utils/init.lua index b4c5fca1..9eb29ad8 100644 --- a/lua/utils/init.lua +++ b/lua/utils/init.lua @@ -110,32 +110,6 @@ function utils.is_string(t) return type(t) == "string" end -function utils.add_keymap(mode, opts, keymaps) - for _, keymap in ipairs(keymaps) do - vim.api.nvim_set_keymap(mode, keymap[1], keymap[2], opts) - end -end - -function utils.add_keymap_normal_mode(opts, keymaps) - utils.add_keymap("n", opts, keymaps) -end - -function utils.add_keymap_visual_mode(opts, keymaps) - utils.add_keymap("v", opts, keymaps) -end - -function utils.add_keymap_visual_block_mode(opts, keymaps) - utils.add_keymap("x", opts, keymaps) -end - -function utils.add_keymap_insert_mode(opts, keymaps) - utils.add_keymap("i", opts, keymaps) -end - -function utils.add_keymap_term_mode(opts, keymaps) - utils.add_keymap("t", opts, keymaps) -end - function utils.unrequire(m) package.loaded[m] = nil _G[m] = nil diff --git a/lua/utils/keymap.lua b/lua/utils/keymap.lua new file mode 100644 index 00000000..121a4888 --- /dev/null +++ b/lua/utils/keymap.lua @@ -0,0 +1,31 @@ +local M = {} + +local mode_adapters = { + insert_mode = "i", + normal_mode = "n", + term_mode = "t", + visual_mode = "v", + visual_block_mode = "x", +} + +-- Load key mappings for a given mode +-- @param mode The keymap mode, can be one of the keys of mode_adapters +-- @param keymaps The list of key mappings +-- @param opts The mapping options +M.load_mode = function(mode, keymaps, opts) + mode = mode_adapters[mode] and mode_adapters[mode] or mode + for _, keymap in ipairs(keymaps) do + vim.api.nvim_set_keymap(mode, keymap[1], keymap[2], opts) + end +end + +-- Load key mappings for all provided modes +-- @param keymaps A list of key mappings for each mode +-- @param opts The mapping options for each mode +M.load = function(keymaps, opts) + for mode, mapping in pairs(keymaps) do + M.load_mode(mode, mapping, opts[mode]) + end +end + +return M |