local set = vim.opt local opt = { noremap = true } local opts = { noremap = true, silent = true } local term_opts = { silent = true } -- shorten function name local keymap = vim.api.nvim_set_keymap -- Modes -- normal_mode = 'n', -- insert_mode = 'i', visual_mode = 'v', visual_block_mode = 'x', -- term_mode = 't', -- command_mode = 'c', ------------------------------------------------------------------------------- -- set space as leader key vim.g.mapleader = " " -- Set space as the leader key vim.g.maplocalleader = " " -- Optional: set local leader key to space as well -- switch colon to semicolon keymap("n", ";", ":", opt) keymap("n", ":", ";", opt) -- no arrows, move the vim way -- keymap("n", "", "", opts) -- keymap("n", "", "", opts) -- keymap("n", "", "", opts) -- keymap("n", "", "", opts) -- keymap("i", "", "", opts) -- keymap("i", "", "", opts) -- keymap("i", "", "", opts) -- keymap("i", "", "", opts) -- lazy write / quit keymap("n", "w", ":w", opts) keymap("n", "q", ":q", opts) keymap("n", "wq", ":wq", opts) keymap("n", "W", ":w!", opts) keymap("n", "Q", ":q!", opts) keymap("n", "WQ", ":wq!", opts) -- navigate properly when lines are wrapped keymap("n", "j", "gj", opts) keymap("n", "k", "gk", opts) -- toggle linenumber vim.keymap.set("n", "n", function() if vim.wo.number and vim.wo.relativenumber then vim.wo.number = false vim.wo.relativenumber = false elseif vim.wo.number then vim.wo.relativenumber = true else vim.wo.number = true end end, { desc = "Toggle line number modes" }) -- maintaining visual mode after shifting > and < keymap("v", ">", ">gv", opts) keymap("v", "<", "", ":move '>+1gv-gv", opts) keymap("x", "", ":move '<-2gv-gv", opts) -- navigate buffers keymap("n", "", ":bnext", opts) keymap("n", "", ":bprevious", opts) -- scrolling command-line history keymap("c", "", "", opts) keymap("c", "", "", opts) -- open the current file in the default program keymap("n", "x", [[:!xdg-open %]], opts) -- -- no ex mode for me - Q reformats long lines (auto-wrap) keymap("n", "Q", "gq", opts) keymap("x", "Q", "gq", opts) -- prevent accidentally record functionality keymap("n", "q", "", opts) keymap("n", "qq", "q", opts) -- redirect change operations to blackhole avoid spoiling 'y' register content keymap("n", "c", '"_c', opts) keymap("n", "C", '"_C', opts) -- toggle cursorcolumn keymap("n", "c", ":set cursorcolumn! cursorline! ", opts) -- clear highlighting from the search keymap("n", "", ":nohlsearch", opts) -- toggle spell checking keymap("n", "se", ":setlocal spell! spelllang=en_us,nl", opts) keymap("n", "sd", ":setlocal spell! spelllang=de_at,nl", opts) -- date time stamp keymap("n", "dt", [[i=strftime("%d.%m.%Y")]], opts) keymap("n", "tt", [[i=strftime("%H:%M")]], opts) -- double space over word to find and replace keymap("n", "", [[:%s/\<=expand("")\>/]], opt) -- write file if you forgot to give it sudo permission keymap("c", "w!!", [[w !sudo tee %]], opt) -- diff since last save keymap("n", "df", [[:w !diff % -]], opt) keymap("x", "df", [[:w !diff % -]], opt) -- Yank to System Clipbpard keymap("x", "Y", '"+y', opt) keymap("n", "y", ':Yazi', opt) local hop = require('hop') local directions = require('hop.hint').HintDirection vim.keymap.set('', 'f', function() hop.hint_char1({ direction = directions.AFTER_CURSOR, }) end, {remap=true}) vim.keymap.set('', 'F', function() hop.hint_char1({ direction = directions.BEFORE_CURSOR, }) end, {remap=true}) vim.keymap.set('', 't', function() hop.hint_char1({ direction = directions.AFTER_CURSOR, hint_offset = -1 }) end, {remap=true}) vim.keymap.set('', 'T', function() hop.hint_char1({ direction = directions.BEFORE_CURSOR, hint_offset = 1 }) end, {remap=true}) vim.keymap.set('n', '', 'h', { noremap = true }) vim.keymap.set('n', '', 'l', { noremap = true }) vim.keymap.set('n', '', 'k', { noremap = true }) vim.keymap.set('n', '', 'j', { noremap = true })