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 }, } local default_keys = { insert_mode = { -- I hate escape { "jk", "" }, { "kj", "" }, { "jj", "" }, -- Move current line / block with Alt-j/k ala vscode. { "", ":m .+1==gi" }, { "", ":m .-2==gi" }, -- navigation { "", "h" }, { "", "j" }, { "", "k" }, { "", "l" }, }, normal_mode = { -- Better window movement { "", "h" }, { "", "j" }, { "", "k" }, { "", "l" }, -- Resize with arrows { "", ":resize -2" }, { "", ":resize +2" }, { "", ":vertical resize -2" }, { "", ":vertical resize +2" }, -- Tab switch buffer -- { "", ":bnext" }, -- { "", ":bprevious" }, -- Move current line / block with Alt-j/k a la vscode. { "", ":m .+1==" }, { "", ":m .-2==" }, -- QuickFix { "]q", ":cnext" }, { "[q", ":cprev" }, { "", ":call QuickFixToggle()" }, -- {'', 'compe#complete()', {noremap = true, silent = true, expr = true}}, }, term_mode = { -- Terminal window navigation { "", "h" }, { "", "j" }, { "", "k" }, { "", "l" }, }, visual_mode = { -- Better indenting { "<", "", ">gv" }, -- { "p", '"0p', { silent = true } }, -- { "P", '"0P', { silent = true } }, }, visual_block_mode = { -- Move selected line / block of text in visual mode { "K", ":move '<-2gv-gv" }, { "J", ":move '>+1gv-gv" }, -- Move current line / block with Alt-j/k ala vscode. { "", ":m '>+1gv-gv" }, { "", ":m '<-2gv-gv" }, }, } if vim.fn.has "mac" == 1 then -- TODO: fix this default_keys.normal_mode[5][1] = "" default_keys.normal_mode[6][1] = "" default_keys.normal_mode[7][1] = "" default_keys.normal_mode[8][1] = "" end if O.keys.leader_key == " " or O.keys.leader_key == "space" then vim.g.mapleader = " " else vim.g.mapleader = O.keys.leader_key end local function get_user_keys(mode) if O.keys[mode] == nil then return default_keys[mode] else return O.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") -- navigate tab completion with and -- runs conditionally vim.cmd 'inoremap pumvisible() ? "\\" : "\\"' vim.cmd 'inoremap pumvisible() ? "\\" : "\\"'