local cmd = vim.cmd local icons = require('config.icons') local buffers = require('utils.buffers') local telescope = require('utils.telescope') return { leader = " ", -- -- Global keymaps! Alot of stuff "borrowed" from thePrimeagen -- global = { { "n", "W", "lua vim.opt.list = not vim.opt.list._value", { silent = true, desc = "Toggle show whitespace" } }, -- -- 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 = "Focus left split" } }, { "n", "", "j", { silent = true, desc = "Focus down split" } }, { "n", "", "k", { silent = true, desc = "Focus up split" } }, { "n", "", "l", { silent = true, desc = "Focus 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", "gf", "e ", { silent = true, desc = "Open (or create) file under cursor" } }, { "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", buffers.CloseOthers, { silent = true, desc = "Close all other buffers" } }, { "n", "bD", buffers.CloseAll, { 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" } }, -- Hex formatting { "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"}}, -- Case formatting { "x", "fcsc", [[:s/\%V\([a-z]\+\)_\?/\u\1/g]], { desc = "Convert text from snake_case to CamelCase" } }, -- 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", "" }, -- NOPE }, whichkey = { mode = { "n", "v", "x" }, { "F", group = "Files" }, { "b", group = "Buffers", icon = icons.buffer }, { "c", group = "Code" }, { "d", group = "Diagnostics" }, { "f", group = "Format" }, { "fc", group = "Case" }, { "fcs", group = "snake_case" }, { "fh", group = "Hex", icon = icons.symbols.NumberHex }, { "g", group = "git" }, { "r", group = "Rename", icon = icons.edit }, { "s", group = "Search" }, }, oil = { { '.', function() require('oil').open_float() end, { desc = "Open parent directory" } } }, conform = { { 'ff', "Format", desc = 'Format file' }, { 'ff', "Format", mode = 'x', desc = 'Format selection' }, }, fugitive = { { 'gB', 'Git blame', desc = 'Git blame' }, { 'gs', 'Git status', desc = 'Git status' }, { 'gl', 'Git log', desc = 'Git log' }, { 'gL', 'Git log %', desc = 'Git log current file' }, }, gitsigns = { { 'gp', 'Gitsigns preview_hunk', desc = 'Git preview diff' }, { 'gb', 'Gitsigns blame_line', desc = 'Git blame line' }, { 'gr', 'Gitsigns reset_hunk', desc = 'Reset section where the cursor is' }, }, trouble = { { 'dt', 'Trouble diagnostics toggle', desc = 'Trouble diagnostics' }, }, -- Keybinds for buffers with an LSP client attached lsp = { { 'ca', function() vim.lsp.buf.code_action() end, mode={'n', 'x'}, 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' }, { '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', telescope.all_files, 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' }, { 'sG', 'Telescope git_status', desc = 'Search Git status' }, { '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' }, }, }