local cmd = vim.cmd return { leader = " ", -- -- Global keymaps! Alot of stuff "borrowed" from thePrimeagen -- global = { -- -- Navigation -- -- Make half page jumps stay in the center of screen { "n", "", "zz", { silent = true, desc = "jump half a page up" } }, { "n", "", "zz", { silent = true, desc = "jump half a page down" } }, { "n", "", "zz", { silent = true, desc = "jump half a page up" } }, { "n", "", "zz", { silent = true, desc = "jump half a page down" } }, -- Split windows { "n", "", "h", { silent = true, desc = "Goto left split" } }, { "n", "", "j", { silent = true, desc = "Goto down split" } }, { "n", "", "k", { silent = true, desc = "Goto up split" } }, { "n", "", "l", { silent = true, desc = "Goto right split" } }, -- Make jump to next search item stay in the center of screen. { "n", "n", "nzzzv", { silent = true, desc = "jump to next search match" } }, { "n", "N", "Nzzzv", { silent = true, desc = "jump to previous search match" } }, -- Ctrl+s saves the current buffer in normal/insert mode. { { "n", "i" }, "", cmd.w, { desc = "save current buffer" } }, -- Move text { "n", "", ":m -2v=", { silent = true, desc = "move current line one line up" } }, { "n", "", ":m +1v=", { silent = true, desc = "move current line one line down" } }, { "v", "", ":m '<-2gv=gv", { silent = true, desc = "move current selection one line up" } }, { "v", "", ":m '>+1gv=gv", { silent = true, desc = "move current selection one line down" } }, -- copy/paste { "x", "p", [["_dP]], { silent = true, desc = "Paste over selected text without losing content in \"-register" } }, { { "n", "v" }, "y", [["+y]], { desc = "Yank to system clipboard register" } }, { { "n", "v" }, "p", [["+p]], { desc = "Paste from system clipboard register" } }, -- File operations { "n", "Fe", "Ex", { silent = true, desc = "Open Netrw" } }, { "n", "Fc", ":CreateFile ", { silent = true, desc = "Create new file" } }, { "n", "Fx", "!chmod +x %", { silent = true, desc = "Set execute flag on current file" } }, -- buffers { "n", "bn", cmd.bn, { silent = true, desc = "Move to next buffer" } }, { "n", "bb", cmd.bp, { silent = true, desc = "Move to previous buffer" } }, { "n", "bd", cmd.bd, { silent = true, desc = "Close current buffer" } }, { "n", "bc", "BufferLineCloseOthers", { silent = true, desc = "Close all other buffers" } }, { "n", "bD", "%bd", { silent = true, desc = "Close all buffers" } }, -- Indent { 'n', "", "^=$" }, { 'x', "", "=", { desc = "auto indent selection" } }, { "i", "", "", { desc = "delete indent" } }, { 'n', "fs", [[:%s/\s\+$//g`']], desc = "Remove trailing spaces" }, -- fix paste -- {'n', "p", "p=$"}, -- Crazy search+replace { "n", "rw", [[:%s/\<\>//gI]], { desc = "search+replace word under cursor" } }, { { "x" }, "fhx", [[:s/\(\x\{2\}\)/0x\1, /g]], { desc = "Format hex" } }, { { "x" }, "fha", [[:s/0x\(\x\{1\}\X\)/0x0\1/g]], { desc = "Format each hex number to be 2 characters long" } }, { { "x" }, "fhn", [[:s/\(\(0x\x\{1,2\}, \)\{8\}\)/\1\r/g]], { desc = "Format hex with 8 bytes per row" } }, -- {{"x"}, "hb", [[:'<,'>s/\(\x\{2\}\)/0x\1, /g]], { desc = "Format a hex string to byte array"}}, -- diagnostics { "n", "do", vim.diagnostic.open_float, { desc = "Open diagnostics" } }, { "n", "dn", vim.diagnostic.get_next, { desc = "Goto next" } }, { "n", "dp", vim.diagnostic.get_prev, { desc = "Goto previous" } }, -- TMux { "n", "m", ":terminal tmuxsi", { desc = "Open tmux manager" } }, { "n", "Q", "" }, }, whichkey = { mode = { "n", "v" }, ["r"] = { name = "+Rename" }, ["b"] = { name = "+Buffers" }, ["f"] = { name = "+Format" }, ["F"] = { name = "+Files" }, ["d"] = { name = "+Diagnostics" }, ["s"] = { name = "+Search" }, ["g"] = { name = "+Git" }, }, oil = { { '.', function() require('oil').open_float() end, { desc = "Open parent directory" } } }, conform = { { 'ff', "Format", desc = 'Format file' }, { 'ff', "Format", mode = 'x', desc = 'Format selection' }, }, gitsigns = { { 'gp', 'Gitsigns preview_hunk', desc = 'Git preview diff' }, { 'gb', 'Gitsigns blame_line', desc = 'Git blame' } }, -- Keybinds for buffers with an LSP client attached lsp = { { 'K', function() vim.lsp.buf.hover() end, desc = '' }, { 'ca', function() vim.lsp.buf.code_action() end, desc = 'Code action' }, { 'rs', function() vim.lsp.buf.rename() end, desc = 'Rename symbol' }, { 'sr', 'Telescope lsp_references', desc = 'Search Reference' }, { 'ss', 'Telescope lsp_document_symbols', desc = 'Search document symbols' }, { 'sr', 'Telescope lsp_references', desc = 'Search Reference' }, { 'si', 'Telescope lsp_implementations', desc = 'Search Inplementations' }, { 'sp', 'Telescope lsp_workspace_symbols', desc = 'Search Workspace symbols' }, { 'go', 'Telescope lsp_type_definitions', desc = "Goto type definition" }, { 'gd', 'Telescope lsp_definitions', desc = 'Goto definition' }, }, telescope = { { 'sf', 'Telescope find_files', desc = 'Search files' }, { 'sF', 'lua require("telescope.builtin").find_files({no_ignore=true})', desc = 'Search all files' }, { 'sb', 'Telescope buffers', desc = 'Search buffers' }, { 'sa', 'Telescope live_grep', desc = 'Search in files' }, { 'sg', 'Telescope git_files', desc = 'Search Git files' }, { 'so', 'Telescope oldfiles', desc = 'Search Old files' }, { 'sw', 'Telescope grep_string', desc = 'Search for word under cursor' }, { 'sd', 'Telescope diagnostics', desc = 'Search Diagnostics' }, { 'sq', 'Telescope quickfix', desc = 'Search Quickfix' }, { 'sh', 'Telescope help', desc = 'Search Neovim help' }, }, }