local buffers = require('user.utils.buffers') local telescope = require('user.utils.telescope') local indent_guidelines = require('user.utils.indent_guidelines') local whitespace = require('user.utils.whitespace') ---@diagnostic disable-next-line: inject-field vim.g.mapleader = ' ' -- NOPE vim.keymap.set('n', 'Q', '') -- -- Editing -- vim.keymap.set("n", "Sw", whitespace.Toggle, { silent = true, desc = "Toggle show whitespace" }) -- vim.keymap.set("n", "W", "lua vim.opt.list = not vim.opt.list._value", -- { silent = true, desc = "Toggle show whitespace" }) vim.keymap.set({ 'n', 'i' }, '', vim.cmd.w, { desc = 'Save current buffer' }) -- Indent vim.keymap.set('n', 'Si', indent_guidelines.toggle, { desc = 'Toggle indent guides' }) vim.keymap.set('n', '', '^=$') vim.keymap.set('x', '', '=', { desc = 'auto indent selection' }) vim.keymap.set('i', '', '', { desc = 'delete indent' }) -- Move text vim.keymap.set('n', '', [[:m -2v=]], { silent = true, desc = 'move current line one line up' }) vim.keymap.set('n', '', [[:m +1v=]], { silent = true, desc = 'move current line one line down' }) vim.keymap.set('v', '', [[:m '<-2gv=gv]], { silent = true, desc = 'move current selection one line up' }) vim.keymap.set('v', '', [[:m '>+1gv=gv]], { silent = true, desc = 'move current selection one line down' }) -- Undo tree vim.keymap.set('n', 'u', [[:UndotreeToggle:UndotreeFocus]], { desc = 'Toggle undotree' }) -- -- Editing - formatting -- vim.keymap.set('n', 'f', "noop", { desc = 'Formatting' }) vim.keymap.set('n', 'fs', [[ma:%s/\s\+$//ge`a]], { desc = 'Remove trailing spaces' }) vim.keymap.set('n', 'ff', [[:Format]], { desc = 'Format file', silent = true, }) vim.keymap.set('x', 'ff', [[:Format]], { desc = 'Format section', silent = true, }) -- Hex Formatting vim.keymap.set('x', 'fh', "noop", { desc = "Format hex" }) vim.keymap.set('x', 'fhx', [[:s/\(\x\{2\}\)/0x\1, /g]], { desc = "Format a hex string into a comma separated list with 0x prefix." }) vim.keymap.set('x', 'fha', [[:s/0x\(\x\{1\}\X\)/0x0\1/g]], { desc = "Align a hex string so that all numbers are 2 characters long (0x2 -> 0x02) " }) vim.keymap.set('x', 'fhn', [[:s/\(\(0x\x\{1,2\}, \)\{8\}\)/\1\r/g]], { desc = "Format a comma separated hex list into 8 bytes per line." }) -- Paths vim.keymap.set('x', 'fp', "noop", { desc = "Format path" }) vim.keymap.set('x', 'fpw', [[:s~/~\\\\~g]], { desc = "Format path from linux to windows" }) vim.keymap.set('x', 'fpl', [[:s~\\\\~/~g]], { desc = "Format path from windows to linux" }) -- -- Editing - Copy / Paste -- -- Maintain the cursor position when yanking a visual selection. vim.keymap.set('v', 'y', 'myy`y') vim.keymap.set('v', 'Y', 'myY`y') -- Indent and move to the end when pasting. vim.keymap.set({ 'n', 'x' }, 'p', 'p`[v`]=`>') vim.keymap.set({ 'n', 'x' }, 'y', [["+y]], {desc = "Yank into system register"}) vim.keymap.set({ 'n', 'x' }, 'p', [["+p]], {desc = "Paste system register"}) vim.keymap.set('x', 'p', [["_dP]], { silent = true, desc = "Paste without storing deleted content in register" }) -- -- Splits -- vim.keymap.set('n', '', 'vs', { desc = "Vertical split"}) -- -- Navigation -- vim.keymap.set('n', '', 'v') vim.keymap.set('n', '', 'v') vim.keymap.set('v', '', '') vim.keymap.set('v', '', '') vim.keymap.set('n', '}', '}zz', { silent = true, desc = 'jump to next paragraph' }) vim.keymap.set('n', '{', '{zz', { silent = true, desc = 'jump to previous paragraph' }) -- Make half page jumps stay in the center of screen vim.keymap.set('n', '', 'zz', { silent = true, desc = 'jump half a page up' }) vim.keymap.set('n', '', 'zz', { silent = true, desc = 'jump half a page down' }) vim.keymap.set('n', '', 'zz', { silent = true, desc = 'jump half a page up' }) vim.keymap.set('n', '', 'zz', { silent = true, desc = 'jump half a page down' }) vim.keymap.set('n', '', 'edit #', { silent = true, desc = "Goto alternative file" }) -- Git vim.keymap.set('n', 'gG', "noop", { desc = 'Git navigation' }) vim.keymap.set('n', 'gGn', 'Gitsigns nav_hunk next', { silent = true, desc = 'Goto next change' }) vim.keymap.set('n', 'gGp', 'Gitsigns nav_hunk prev', { silent = true, desc = 'Goto previous change' }) -- -- Buffers -- vim.keymap.set('n', 'b', "noop", { desc = 'Buffers' }) vim.keymap.set('n', 'bd', buffers.CloseCurrent, { silent = true, desc = 'Close current buffer' }) vim.keymap.set('n', 'bc', buffers.CloseOthers, { silent = true, desc = 'Close all other buffers' }) vim.keymap.set('n', 'bD', buffers.CloseAll, { silent = true, desc = 'Close all buffers' }) -- -- Diagnostics -- vim.keymap.set('n', 'd', "noop", { desc = 'Diagnostics' }) vim.keymap.set('n', "dk", vim.diagnostic.open_float, { desc = "Show diagnostic message under cursor" }) vim.keymap.set('n', "dn", vim.diagnostic.get_next, { desc = "Goto next" }) vim.keymap.set('n', "dp", vim.diagnostic.get_prev, { desc = "Goto previous" }) vim.keymap.set('n', "dd", "Telescope diagnostics", { desc = "Open workspace diagnostics" }) -- -- Testing -- vim.keymap.set('n', 't', "noop", { desc = 'Testing' }) vim.keymap.set('n', "tc", "Neotest run", { desc = "Test current (test near cursor)" }) vim.keymap.set('n', "tf", "Neotest run file", { desc = "Test current (file)" }) vim.keymap.set('n', "ts", "Neotest summary", { desc = "Toggle test summary" }) -- -- File explorer -- vim.keymap.set('n', ".", "NvimTreeFocus", { desc = "Toggle Nvimtree" }) -- -- Git -- vim.keymap.set('n', 'g', "noop", { desc = 'Git' }) vim.keymap.set('n', "gp", "Gitsigns preview_hunk", { desc = "Preview section at cursor" }) vim.keymap.set('n', "gr", "Gitsigns reset_hunk", { desc = "Reset section at cursor" }) vim.keymap.set('n', "gR", "Gitsigns reset_buffer", { desc = "Reset buffer" }) vim.keymap.set('n', "gv", "Gitsigns select_hunk", { desc = "Select section under cursor" }) vim.keymap.set('n', "gb", "Gitsigns blame_line", { desc = "Blame (current line)" }) vim.keymap.set('n', "gB", "Gitsigns blame", { desc = "Blame" }) -- -- LSP -- vim.keymap.set('n', 'go', 'Telescope lsp_type_definitions', { desc = 'Goto type definition' }) vim.keymap.set('n', 'gd', 'Telescope lsp_definitions', { desc = 'Goto definition' }) vim.keymap.set({ 'n', 'x' }, 'c', 'noop', { desc = 'Code' }) vim.keymap.set({ 'n', 'x' }, 'ca', 'lua vim.lsp.buf.code_action()', { desc = 'Code action' }) vim.keymap.set({ 'n', 'x' }, 'cl', 'lua vim.lsp.codelens.run()', { desc = 'Code lens' }) vim.keymap.set('n', 'r', "noop", { desc = 'Rename' }) vim.keymap.set('n', 'rs', 'lua vim.lsp.buf.rename()', { desc = 'Rename symbol' }) -- -- Search -- vim.keymap.set('n', 's', "noop", { desc = 'Search' }) vim.keymap.set('n', 'sf', 'Telescope find_files', { desc = 'Search files' }) vim.keymap.set('n', 'sF', telescope.all_files, { desc = 'Search all files' }) vim.keymap.set('n', 's.', telescope.find_in_current_dir, { desc = 'Find files in current directory' }) vim.keymap.set('n', 'sw', 'Telescope grep_string', { desc = 'Search for word under cursor' }) vim.keymap.set('n', 'sa', 'Telescope live_grep', { desc = 'Search in files' }) vim.keymap.set('n', 'sb', 'Telescope buffers', { desc = 'Search Buffers' }) -- Git vim.keymap.set('n', 'sg', 'noop', { desc = 'Git' }) vim.keymap.set('n', 'sgf', 'Telescope git_files', { desc = 'Search Git files' }) vim.keymap.set('n', 'sgs', 'Telescope git_status', { desc = 'Search Git status' }) vim.keymap.set('n', 'sgc', 'Telescope git_commits', { desc = 'Search Git commits' }) vim.keymap.set('n', 'sgb', 'Telescope git_branches', { desc = 'Search Git branches' }) vim.keymap.set('n', 'so', 'Telescope oldfiles', { desc = 'Search old files' }) vim.keymap.set('n', 'sd', 'Telescope diagnostics', { desc = 'Search Diagnostics' }) vim.keymap.set('n', 'sq', 'Telescope quickfix', { desc = 'Search Quickfix' }) vim.keymap.set('n', 'sr', 'Telescope lsp_references', { desc = 'Search Reference' }) vim.keymap.set('n', 'ss', 'Telescope lsp_document_symbols', { desc = 'Search document symbols' }) vim.keymap.set('n', 'si', 'Telescope lsp_implementations', { desc = 'Search Inplementations' }) vim.keymap.set('n', 'sp', telescope.find_workspace_symbols, { desc = 'Search Workspace symbols' }) vim.keymap.set('n', 'sj', telescope.find_classes, { desc = 'Search Classes' }) vim.keymap.set('n', 'sk', telescope.find_functions, { desc = 'Search Functions' }) vim.keymap.set('n', 'sh', 'Telescope help', { desc = 'Search Neovim help' }) vim.keymap.set('n', 'jj', require('user.utils.misc').toggle_gutter)