From 4672cef3f5017989f85c318f5a2b98138f22176f Mon Sep 17 00:00:00 2001 From: Michal Date: Wed, 26 Mar 2025 07:26:00 +0100 Subject: [PATCH] Add custom keymaps --- init.lua | 1 + lua/custom/core/keymaps.lua | 120 ++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 lua/custom/core/keymaps.lua diff --git a/init.lua b/init.lua index 97d4ea05..948349ba 100644 --- a/init.lua +++ b/init.lua @@ -1,4 +1,5 @@ require 'custom.core.options' +require 'custom.core.keymaps' --[[ diff --git a/lua/custom/core/keymaps.lua b/lua/custom/core/keymaps.lua new file mode 100644 index 00000000..e41892ad --- /dev/null +++ b/lua/custom/core/keymaps.lua @@ -0,0 +1,120 @@ +-- Keymaps for better default experience + +-- Set leader key +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' + +-- For conciseness +local opts = { noremap = true, silent = true } + +-- Disable the spacebar key's default behavior in Normal and Visual modes +vim.keymap.set({ 'n', 'v' }, '', '', { silent = true }) + +-- Allow moving the cursor through wrapped lines with j, k +vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) +vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) + +-- clear highlights +vim.keymap.set('n', '', ':noh', opts) + +-- save file +vim.keymap.set('n', '', ' w ', opts) + +-- save file without auto-formatting +vim.keymap.set('n', 'sn', 'noautocmd w ', opts) + +-- quit file +vim.keymap.set('n', '', ' q ', opts) + +-- delete single character without copying into register +vim.keymap.set('n', 'x', '"_x', opts) + +-- Vertical scroll and center +vim.keymap.set('n', '', 'zz', opts) +vim.keymap.set('n', '', 'zz', opts) + +-- Find and center +vim.keymap.set('n', 'n', 'nzzzv') +vim.keymap.set('n', 'N', 'Nzzzv') + +-- Resize with arrows +vim.keymap.set('n', '', ':resize -2', opts) +vim.keymap.set('n', '', ':resize +2', opts) +vim.keymap.set('n', '', ':vertical resize -2', opts) +vim.keymap.set('n', '', ':vertical resize +2', opts) + +-- Buffers +vim.keymap.set('n', '', ':bnext', opts) +vim.keymap.set('n', '', ':bprevious', opts) +vim.keymap.set('n', 'x', ':Bdelete!', opts) -- close buffer +vim.keymap.set('n', 'b', ' enew ', opts) -- new buffer + +-- Increment/decrement numbers +vim.keymap.set('n', '+', '', opts) -- increment +vim.keymap.set('n', '-', '', opts) -- decrement + +-- Window management +vim.keymap.set('n', 'v', 'v', opts) -- split window vertically +vim.keymap.set('n', 'h', 's', opts) -- split window horizontally +vim.keymap.set('n', 'se', '=', opts) -- make split windows equal width & height +vim.keymap.set('n', 'xs', ':close', opts) -- close current split window + +-- Navigate between splits +vim.keymap.set('n', '', ':wincmd k', opts) +vim.keymap.set('n', '', ':wincmd j', opts) +vim.keymap.set('n', '', ':wincmd h', opts) +vim.keymap.set('n', '', ':wincmd l', opts) + +-- Tabs +vim.keymap.set('n', 'to', ':tabnew', opts) -- open new tab +vim.keymap.set('n', 'tx', ':tabclose', opts) -- close current tab +vim.keymap.set('n', 'tn', ':tabn', opts) -- go to next tab +vim.keymap.set('n', 'tp', ':tabp', opts) -- go to previous tab + +-- Toggle line wrapping +vim.keymap.set('n', 'lw', 'set wrap!', opts) + +-- Press jk fast to exit insert mode +vim.keymap.set('i', 'jk', '', opts) +vim.keymap.set('i', 'kj', '', opts) + +-- Stay in indent mode +vim.keymap.set('v', '<', '', '>gv', opts) + +-- Move text up and down +vim.keymap.set('v', '', ':m .+1==', opts) +vim.keymap.set('v', '', ':m .-2==', opts) + +-- Keep last yanked when pasting +vim.keymap.set('v', 'p', '"_dP', opts) + +-- Replace word under cursor +vim.keymap.set('n', 'j', '*``cgn', opts) + +-- Explicitly yank to system clipboard (highlighted and entire row) +vim.keymap.set({ 'n', 'v' }, 'y', [["+y]]) +vim.keymap.set('n', 'Y', [["+Y]]) + +-- Toggle diagnostics +local diagnostics_active = true + +vim.keymap.set('n', 'do', function() + diagnostics_active = not diagnostics_active + + if diagnostics_active then + vim.diagnostic.enable(0) + else + vim.diagnostic.disable(0) + end +end) + +-- Diagnostic keymaps +vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' }) +vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' }) +vim.keymap.set('n', 'd', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' }) +vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' }) + +-- Save and load session +vim.keymap.set('n', 'ss', ':mksession! .session.vim', { noremap = true, silent = false }) +vim.keymap.set('n', 'sl', ':source .session.vim', { noremap = true, silent = false })