-- [[ Basic Keymaps ]] -- NOTE: See `:help vim.keymap.set()` -- vim.keymap.set( required, required, required, not required) -- Set highlight on search, but clear on pressing in normal mode vim.keymap.set('n', '', 'nohlsearch', { desc = 'Remove higlight after search is done' }) -- Diagnostic keymaps vim.keymap.set('n', '[d', function() vim.diagnostic.goto({ direction = 'prev', float = false }) end, { desc = 'Go to previous [D]iagnostic message' }) vim.keymap.set('n', ']d', function() vim.diagnostic.goto({ direction = 'next', float = false }) end, { desc = 'Go to next [D]iagnostic message' }) vim.keymap.set('n', 'e', vim.diagnostic.open_float, { desc = 'Show diagnostic [E]rror messages' }) vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' }) -- netrw remaps vim.keymap.set('n', 'pv', vim.cmd.Ex, { desc = 'Open netrw' }) -- open netrw -- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier -- for people to discover. Otherwise, you normally need to press , which -- is not what someone will guess without a bit more experience. -- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping -- or just use to exit terminal mode vim.keymap.set('t', '', '', { desc = 'Exit terminal mode' }) -- TIP: Disable arrow keys in normal mode, i don use them vim.keymap.set('n', '', 'echo "Use h to move!!"') vim.keymap.set('n', '', 'echo "Use l to move!!"') vim.keymap.set('n', '', 'echo "Use k to move!!"') vim.keymap.set('n', '', 'echo "Use j to move!!"') -- Keybinds to make split navigation easier. -- NOTE: Use CTRL+ to switch between windows -- See `:help wincmd` for a list of all window commands vim.keymap.set('n', '', '', { desc = 'Move focus to the left window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the right window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) -- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes vim.keymap.set("n", "", "H", { desc = "Move window to the left" }) vim.keymap.set("n", "", "L", { desc = "Move window to the right" }) vim.keymap.set("n", "", "J", { desc = "Move window to the lower" }) vim.keymap.set("n", "", "K", { desc = "Move window to the upper" }) -- copy pasting vim.keymap.set('n', 'Y', 'y$', { desc = 'Yank till the end of the line' }) vim.keymap.set('n', 'J', 'mzJ`z', { desc = 'Marks the point (mz), joins the lines (J) and gets back to the marked place (`z)' }) vim.keymap.set({ 'n', 'v' }, 'y', '"+y', { desc = 'Prefix y with leader to send to system clipboard' }) vim.keymap.set({ 'n', 'v' }, 'Y', '"+Y', { desc = 'Prefix Y with leader to send to system clipboard' }) vim.keymap.set('x', 'p', '"+p', { desc = 'Paste from clipboard over the selection, without chaging the clipboard registry("+).' }) vim.keymap.set('x', 'P', '"_dP', { desc = 'Deletes to void registry("_) to avoid changing registry("0) content, and then pastes from clipboard' }) -- Search remaps vim.keymap.set('n', 'n', 'nzzzv', { desc = 'n = next search, zz = center cursor on screen, zv = open fold if exist' }) vim.keymap.set('n', 'N', 'Nzzzv', { desc = 'N = previous search, zz = center cursor on screen, zv = open fold if exist' }) -- Add additional undo breakpoints on these simbols, makes undo more granular vim.keymap.set('i', ',', ',u', { desc = 'Add undo breakpoint on a ,' }) vim.keymap.set('i', '.', '.u', { desc = 'Add undo breakpoint on a .' }) vim.keymap.set('i', '!', '!u', { desc = 'Add undo breakpoint on a !' }) vim.keymap.set('i', '?', '?u', { desc = 'Add undo breakpoint on a ?' }) -- Moving text around vim.keymap.set('v', 'J', ":m '>+1gv=gv", { desc = 'Move selection down in visual mode' }) vim.keymap.set('v', 'K', ":m '<-2gv=gv", { desc = 'Move selection up in visual mode' }) vim.keymap.set('i', '', ':m .-2==', { desc = 'Move line up in insert mode' }) vim.keymap.set('i', '', ':m .+1==', { desc = 'Move line down in insert mode' }) vim.keymap.set('n', 'j', ':m .+1==', { desc = 'Move line up in in normal mode' }) vim.keymap.set('n', 'k', ':m .-2==', { desc = 'Move line down in in normal mode' }) -- Window management vim.keymap.set('n', '', '', { desc = 'Close window with ctrl+c' }) -- Save file vim.keymap.set({ 'i', 'v', 'n', 's' }, '', 'w', { desc = 'Save file' }) -- Function and remap to toggle relative numbers. vim.keymap.set('n', 'nr', function() vim.o.nu = false vim.opt.relativenumber = false end, { desc = 'Disable number and relative number' }) vim.keymap.set('n', 'rn', function() vim.o.nu = true vim.opt.relativenumber = true end, { desc = 'Enable number and relative number' }) -- Clean up vim.keymap.set('n', 'dw', ':%s/\\s\\+$//e', { desc = 'Clean trailing whitespace in the document' }) vim.keymap.set('n', 'dn', ':%s/\\n\\+\\%$//e', { desc = 'Clean trailing newlines in the document' }) vim.keymap.set('n', 'ds', ':%s/\\^\\[\\+\\%$//e', { desc = 'Clean trailing escape sequences in the document' }) -- Code runner keymaps vim.keymap.set('n', 'rr', ':RunCode', { noremap = true, silent = false, desc = 'Run code based on file type.' }) vim.keymap.set('n', 'rf', ':RunFile', { noremap = true, silent = false, desc = 'Run code in current file.' }) vim.keymap.set('n', 'rft', ':RunFile tab', { noremap = true, silent = false, desc = 'Run code in current file on a tab.' }) vim.keymap.set('n', 'rp', ':RunProject', { noremap = true, silent = false, desc = 'Run code in project.' }) vim.keymap.set('n', 'rc', ':RunClose', { noremap = true, silent = false, desc = 'Close runner.' }) vim.keymap.set('n', 'crf', ':CRFiletype', { noremap = true, silent = false, desc = 'Open json with supported files.' }) vim.keymap.set('n', 'crp', ':CRProjects', { noremap = true, silent = false, desc = 'Open json with list of projects.' }) -- Testing remaps and functions -- better indenting -- vim.keymap.set('v', '<', '', '>gv') -- Markdown preview haven't setup this plugin -- vim.keymap.set('n', 'mp', ':Glow', { desc = 'Remap glow to show markdown preview' }) -- vim.keymap.set('n', 'mq', ':Glow!', { desc = 'Remap glow to close markdown preview' })