-- Ñ master race vim.keymap.set('n', 'ñ', ';') vim.keymap.set('n', 'Ñ', ',') vim.keymap.set('n', '{q', ':cprevzz', { silent = true, desc="[Q]uickfix backward" }) vim.keymap.set('n', '{Q', ':cfirst', { silent = true }) vim.keymap.set('n', '{l', ':lprevzz', { silent = true, desc="[L]oclist backward" }) vim.keymap.set('n', '{o', ':call append(line(".")-1, "")', { silent = true }) vim.keymap.set('n', '{b', ':bprev', { silent = true, desc = 'Previous buffer' }) vim.keymap.set('n', '{t', ':tabfirst', { silent = true, desc = 'First Tab' }) vim.keymap.set('n', '}q', ':cnextzz', { silent = true, desc="[Q]uickfix forward" }) vim.keymap.set('n', '}Q', ':clast', { silent = true }) vim.keymap.set('n', '}l', ':lnextzz', { silent = true, desc="[L]oclist forward" }) vim.keymap.set('n', '}o', ':call append(line("."), "")', { silent = true }) vim.keymap.set('n', '}b', ':bnext', { silent = true, desc = 'Next buffer' }) vim.keymap.set('n', '}t', ':tablast', { silent = true, desc = 'Last Tab' }) vim.keymap.set('i', '', '', { silent = true }) -- Splits vim.keymap.set('n', '', 'h', { desc = 'Go to left window' }) vim.keymap.set('n', '', 'l', { desc = 'Go to right window' }) vim.keymap.set('n', '', 'j', { desc = 'Go to lower window' }) vim.keymap.set('n', '', 'k', { desc = 'Go to upper window' }) vim.keymap.set('n', '', 'H', { silent = true, desc = 'Move window to the left' }) vim.keymap.set('n', '', 'L', { silent = true, desc = 'Move window to the right' }) vim.keymap.set('n', '', 'J', { silent = true, desc = 'Move window to the bottom' }) vim.keymap.set('n', '', 'K', { silent = true, desc = 'Move window to the top' }) vim.keymap.set('n', '', ':vertical resize -1', { silent = true, desc = 'Decrease window width' }) vim.keymap.set('n', '', ':vertical resize +1', { silent = true, desc = 'Increase window width' }) vim.keymap.set('n', '', ':resize +1', { silent = true, desc = 'Decrease window height' }) vim.keymap.set('n', '', ':resize -1', { silent = true, desc = 'Increase window height' }) vim.keymap.set('n', '|', ':vnew', { silent = true, desc = 'Split window below' }) vim.keymap.set('n', '-', ':new', { silent = true, desc = 'Split window right' }) vim.keymap.set('i', '', 'h', { desc = 'Go to left window' }) vim.keymap.set('i', '', 'l', { desc = 'Go to right window' }) vim.keymap.set('i', '', 'j', { desc = 'Go to lower window' }) vim.keymap.set('i', '', 'k', { desc = 'Go to upper window' }) -- Faster vim.keymap.set('n', 's', ':w!', { silent = true, desc = 'Save' }) vim.keymap.set('n', 'q', ':q!', { silent = true, desc = 'Quit' }) vim.keymap.set('n', 'Q', ':qa!', { silent = true, desc = 'Quit all' }) vim.keymap.set('n', 'p', ':Lazy', { desc = 'Lazy' }) vim.keymap.set({ 'n', 'v' }, '', 'gg', { silent = true, desc = 'Go to top of the file' }) vim.keymap.set({ 'n', 'v' }, '¿', 'G', { silent = true, desc = 'Go to bottom of the file' }) -- Centering vim.keymap.set({ 'n', 'v' }, 'J', 'mzJ`z') local center_keys = { 'n', 'N', '{', '}', '*', '[g', ']g', '[s', ']s', '[m', ']m' } for _, key in ipairs(center_keys) do vim.keymap.set({ 'n', 'x' }, key, key .. 'zzzv', { desc = 'center after ' .. key }) end vim.keymap.set({ 'n', 'x', 'o' }, 'n', "'Nn'[v:searchforward]", { expr = true, desc = 'Next search result' }) vim.keymap.set({ 'n', 'x', 'o' }, 'N', "'nN'[v:searchforward]", { expr = true, desc = 'Next search result' }) vim.keymap.set('n', '', 'zz') vim.keymap.set('n', '', 'zz') -- Formatting vim.keymap.set('n', '=', 'ggVGgq', { silent = true }) vim.keymap.set('n', '0', 'vapJgqap', { silent = true }) vim.keymap.set('n', 'Q', 'gqap', { silent = true }) vim.keymap.set('x', 'Q', 'gq', { silent = true }) -- Line movements vim.keymap.set('n', 'j', ':m .+1==', { silent = true }) vim.keymap.set('n', 'k', ':m .-2==', { silent = true }) 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 }) vim.keymap.set({ 'n', 'v' }, '', 'g', { silent = true }) vim.keymap.set({ 'n', 'v' }, '', 'g', { silent = true }) vim.keymap.set({ 'n', 'v' }, 'y', 'y$', { silent = true }) vim.keymap.set({ 'n', 'v' }, 'Y', 'yg_', { silent = true }) vim.keymap.set({ 'n', 'x' }, 'H', 'g^', { silent = true }) vim.keymap.set({ 'n', 'x' }, 'L', 'g$', { silent = true }) vim.keymap.set('i', '', ':m .+1==gi') vim.keymap.set('i', '', ':m .-2==gi') vim.keymap.set('i', '', 'g', { silent = true }) vim.keymap.set('i', '', 'g', { silent = true }) vim.keymap.set('v', '', ":m '>+1gv=gv") vim.keymap.set('v', '', ':m <-2gv=gv') -- Reverse ctrl+u vim.keymap.set('i', '', 'u') vim.keymap.set('i', '', 'u') vim.keymap.set('i', ',', ',u') vim.keymap.set('i', '.', '.u') vim.keymap.set('i', ':', ':u') vim.keymap.set('i', ';', ';u') vim.keymap.set('i', '!', '!u') vim.keymap.set('i', '?', '?u') -- Visual indentation vim.keymap.set('v', '>', '>gv', { silent = true }) vim.keymap.set('v', '<', '', '>>', { silent = true }) vim.keymap.set('n', '<', '<<', { silent = true }) -- Keep cursor at the bottom of the visual selection after you yank it. vim.keymap.set('v', 'y', 'ygv', { remap = true }) -- Don't overwrite register when pasting over visual selection. vim.keymap.set('x', 'p', function() return 'pgv"' .. vim.v.register .. 'y' end, { remap = false, expr = true }) -- Allow for repeating commands in visual mode vim.keymap.set('x', '.', ':normal.', { silent = true }) -- Select all vim.keymap.set('n', '', 'ggVG', { silent = true }) vim.keymap.set('i', '', 'ggVG', { silent = true }) -- Terminal vim.keymap.set('t', '', '') vim.keymap.set('t', '', 'h') vim.keymap.set('t', '', 'j') vim.keymap.set('t', '', 'k') vim.keymap.set('t', '', 'l') vim.keymap.set('t', '', '') vim.keymap.set('t', '', '') -- Map and to scroll up and down autocompletion list in command mode vim.keymap.set('c', '', '', { remap = true, silent = true }) vim.keymap.set('c', '', '', { remap = true, silent = true }) -- Loupe vim.keymap.set({ 'n', 'x' }, '/', '/\\v') vim.keymap.set({ 'n', 'x' }, '?', '?\\v') -- Reselect latest changed, put, or yanked text vim.keymap.set( 'n', 'gV', '"`[" . strpart(getregtype(), 0, 1) . "`]"', { expr = true, desc = 'Visually select changed text' } ) -- Search inside visually highlighted text. vim.keymap.set('x', 'g/', '/\\%V', { silent = false, desc = 'Search inside visual selection' }) -- Search visually selected text vim.keymap.set('x', '*', [[y/\V=escape(@", '/\')]]) vim.keymap.set('x', '#', [[y?\V=escape(@", '?\')]]) -- diff mode vim.keymap.set('n', 'gh', ':diffget //2') vim.keymap.set('n', 'gl', ':diffget //3') vim.keymap.set({ 'n', 'x' }, 'g}', ':diffput') vim.keymap.set({ 'n', 'x' }, '{g', ':diffget') -- Write and quit typos local typos = { 'W', 'Wq', 'WQ', 'Wqa', 'WQa', 'WQA', 'WqA', 'Q', 'Qa', 'QA' } for _, cmd in ipairs(typos) do vim.api.nvim_create_user_command(cmd, function(opts) vim.api.nvim_cmd({ cmd = cmd:lower(), bang = opts.bang, mods = { noautocmd = true }, }, {}) end, { bang = true }) end -- Bye vim.api.nvim_set_keymap('', 'q', '', {})