local function map(mode, lhs, rhs, opts) opts = opts or {} opts.silent = opts.silent ~= false vim.keymap.set(mode, lhs, rhs, opts) end local opts = { noremap = true, silent = true } local icons = require('lib.icons') -- Space as leader map('n', '', '', opts) vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' -- Modes -- normal_mode = "n", insert_mode = "i", visual_mode = "v", -- visual_block_mode = "x", term_mode = "t", command_mode = "c", -- Save File map({ "i", "v", "n", "s" }, "", "w", { desc = "Save file" }) -- ctrl a to selected all text in file map({ "n", "i", "v" }, "", "ggVG") -- Copy whole file map("n", "", "%y+", { desc = "Copy whole file" }) -- Paste map("n", "]p", "op", { desc = "Paste below" }) map("n", "[P", "Op", { desc = "Paste above" }) map("i", "", '"+pa', { desc = "Paste from clipboard" }) map({ "n", "x" }, "", '"+y', { desc = "Copy to clipboard" }) -- Better escape using jk in insert and terminal mode map("i", "jk", "") map("i", "kj", "") map("i", "jj", "") -- Terminal Mappings map("t", "jk", "") map("t", "kj", "") map("t", "", "") -- Visual overwrite paste map({ 'v', 'x' }, 'p', '"_dP', opts) -- Do not copy on x map({ 'v', 'x' }, 'x', '"_x', opts) -- Increment/decrement map({ 'n', 'v', 'x' }, '-', '', opts) map({ 'n', 'v', 'x' }, '=', '', opts) -- Move to line beginning and end map({ 'n', 'v', 'x' }, 'gl', '$', { desc = 'End of line' }) map({ 'n', 'v', 'x' }, 'gh', '^', { desc = 'Beginning of line' }) -- Center Cursors map('n', 'J', 'mzJ`z', opts) map('n', '', 'zz', opts) map('n', '', 'zz', opts) map('n', 'n', 'nzzzv', opts) map('n', 'N', 'Nzzzv', opts) -- Better up/down vim.keymap.set({ "n", "x" }, "j", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) vim.keymap.set({ "n", "x" }, "", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) vim.keymap.set({ "n", "x" }, "k", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) vim.keymap.set({ "n", "x" }, "", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) -- Move text up and down vim.keymap.set("n", "", "m .+1==", { desc = "Move Down" }) vim.keymap.set("n", "", "m .-2==", { desc = "Move Up" }) vim.keymap.set("i", "", "m .+1==gi", { desc = "Move Down" }) vim.keymap.set("i", "", "m .-2==gi", { desc = "Move Up" }) vim.keymap.set("v", "", ":m '>+1gv=gv", { desc = "Move Down" }) vim.keymap.set("v", "", ":m '<-4gv=gv", { desc = "Move Up" }) -- Clear search, diff update and redraw map({ 'i', 'n' }, '', 'noh', { desc = 'Escape and clear hlsearch' }) -- Consistent n/N search navigation map('n', 'n', "'Nn'[v:searchforward]", { expr = true, desc = 'Next search result' }) map('x', 'n', "'Nn'[v:searchforward]", { expr = true, desc = 'Next search result' }) map('o', 'n', "'Nn'[v:searchforward]", { expr = true, desc = 'Next search result' }) map('n', 'N', "'nN'[v:searchforward]", { expr = true, desc = 'Prev search result' }) map('x', 'N', "'nN'[v:searchforward]", { expr = true, desc = 'Prev search result' }) map('o', 'N', "'nN'[v:searchforward]", { expr = true, desc = 'Prev search result' }) -- Better indenting map('v', '<', '', '>gv') -- Add undo breakpoints map('i', ',', ',u') map('i', '.', '.u') map('i', ';', ';u') -- Search map({ "n", "x" }, "gw", "*N", { desc = "Search word under cursor" }) -- Insert empty line in insert mode map("i", "", "o", { desc = "Insert empty line below" }) map("i", "", "O", { desc = "Insert empty line above" }) -- Insert empty line without entering insert mode map('n', '[o', ':call append(line("."), repeat([""], v:count1))', { desc = "Insert empty line below" }) map('n', ']o', ':call append(line(".")-1, repeat([""], v:count1))', { desc = "Insert empty line above" }) -- go to beginning and end in insert mode map("i", "", "^i", { desc = "Go to beginning of line" }) map("i", "", "", { desc = "Go to end of line" }) -- navigate within insert mode map("i", "", "", { desc = "Move Left" }) map("i", "", "", { desc = "Move Right" }) map("i", "", "", { desc = "Move Down" }) map("i", "", "", { desc = "Move Up" }) -- Move to window using the hjkl keys vim.keymap.set("n", "", "h", { desc = "Go to Left Window", remap = true }) vim.keymap.set("n", "", "j", { desc = "Go to Lower Window", remap = true }) vim.keymap.set("n", "", "k", { desc = "Go to Upper Window", remap = true }) vim.keymap.set("n", "", "l", { desc = "Go to Right Window", remap = true }) -- Move with shift-arrows map("n", "", "", { desc = "Move window to the left" }) map("n", "", "", { desc = "Move window down" }) map("n", "", "", { desc = "Move window up" }) map("n", "", "", { desc = "Move window to the right" }) -- Resize window using arrow keys vim.keymap.set("n", "", "resize +2", { desc = "Increase Window Height" }) vim.keymap.set("n", "", "resize -2", { desc = "Decrease Window Height" }) vim.keymap.set("n", "", "vertical resize -2", { desc = "Decrease Window Width" }) vim.keymap.set("n", "", "vertical resize +2", { desc = "Increase Window Width" }) -- Codeium map('i', '', function () return vim.fn['codeium#Accept']() end, { expr = true, silent = true }) map('i', '', function() return vim.fn['codeium#CycleCompletions'](1) end, { expr = true, silent = true }) map('i', '', function() return vim.fn['codeium#CycleCompletions'](-1) end, { expr = true, silent = true }) map('i', '', function() return vim.fn['codeium#Clear']() end, { expr = true, silent = true }) -- Oil Explorer map('n', 'e', function() require("oil").toggle_float() end, { desc = icons.documents.OpenFolder .. 'Oil File Explorer' }) map('n', 'mu', function() require("notify").dismiss({ silent = true, pending = true }) end, { desc = 'Dismiss All Notifications' }) -- Tab management --keymap.set("n", "to", ":tabnew") -- open a new tab --keymap.set("n", "tx", ":tabclose") -- close a tab --keymap.set("n", "tn", ":tabn") -- next tab --keymap.set("n", "tp", ":tabp") -- previous tab map("n", 'jo', function() if vim.bo.filetype == 'java' then require('jdtls').organize_imports(); end end) map("n", 'ju', function() if vim.bo.filetype == 'java' then require('jdtls').update_projects_config(); end end) map("n", 'jc', function() if vim.bo.filetype == 'java' then require('jdtls').test_class(); end end) map("n", 'jm', function() if vim.bo.filetype == 'java' then require('jdtls').test_nearest_method(); end end)