-- # vim:fileencoding=utf-8:foldmethod=marker local set = vim.opt local opt = { noremap = true } local opts = { noremap = true, silent = true } local term_opts = { silent = true } local keymap = vim.api.nvim_set_keymap -- {{{ Leader Key (moved to init.lua) -- vim.g.mapleader = " " -- set as leader key -- vim.g.maplocalleader = " " -- set as local leader key -- }}} -- {{{ Basic Mappings keymap("n", ";", ":", opt) -- remap ; to : keymap("n", ":", ";", opt) -- remap : to ; keymap("n", "w", ":w", opts) -- save keymap("n", "q", ":q", opts) -- quit keymap("n", "wq", ":wq", opts) -- save and quit keymap("n", "W", ":w!", opts) -- force save keymap("n", "Q", ":q!", opts) -- force quit keymap("n", "WQ", ":wq!", opts) -- force save and quit -- }}} -- {{{ Navigation keymap("n", "j", "gj", opts) -- move visually down wrapped lines keymap("n", "k", "gk", opts) -- move visually up wrapped lines -- Keep arrow key navigation (non-standard but you requested it) keymap("n", "", "h", opts) -- move to left window keymap("n", "", "l", opts) -- move to right window keymap("n", "", "k", opts) -- move to upper window keymap("n", "", "j", opts) -- move to lower window keymap("n", "", ":bnext", opts) -- next buffer keymap("n", "", ":bprevious", opts) -- previous buffer -- }}} -- {{{ Window Splitting keymap("n", "sv", ":vsplit", opts) -- split vertically keymap("n", "sh", ":split", opts) -- split horizontally keymap("n", "sc", ":close", opts) -- close current split keymap("n", "so", ":only", opts) -- close all other splits -- }}} -- {{{ Window Resizing keymap("n", "+", ":resize +5", opts) -- increase window height keymap("n", "-", ":resize -5", opts) -- decrease window height keymap("n", "<", ":vertical resize -5", opts) -- decrease window width keymap("n", ">", ":vertical resize +5", opts) -- increase window width keymap("n", "=", "=", opts) -- equalize window sizes -- }}} -- {{{ Visual Mode / Text, Clipboard keymap("v", ">", ">gv", opts) -- indent right, stay in visual mode keymap("v", "<", "", ":move '>+1gv-gv", opts) -- move selected block down keymap("x", "", ":move '<-2gv-gv", opts) -- move selected block up keymap("n", "Q", "gq", opts) -- format paragraph keymap("x", "Q", "gq", opts) -- format selection keymap("x", "Y", '"+y', opt) -- yank to system clipboard keymap("n", "", [[:%s/\<=expand("")\>/]], opt) -- replace word under cursor -- }}} -- {{{ Editing / Behavior keymap("n", "q", "", opts) -- disable q (record macro) keymap("n", "qq", "q", opts) -- if you really want to record macro use qq keymap("n", "c", '"_c', opts) -- change without yanking to default register keymap("n", "C", '"_C', opts) -- change line without yanking to default register vim.keymap.set("n", "n", function() -- toggle line numbers 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" }) keymap("n", "c", ":set cursorcolumn! cursorline! ", opts) -- toggle cursor column and line keymap("n", "", ":nohlsearch", opts) -- clear search highlight -- }}} -- {{{ Spellcheck keymap("n", "se", ":setlocal spell! spelllang=en_us", opts) -- toggle English spell check keymap("n", "sd", ":setlocal spell! spelllang=de_at", opts) -- toggle Austrian German spell check keymap("n", "ss", ":setlocal spell! spelllang=es", opts) -- toggle Spanish spell check -- }}} -- {{{ Timestamp / Date keymap("n", "dt", [[i=strftime("%d.%m.%Y")]], opts) -- insert current date keymap("n", "tt", [[i=strftime("%H:%M")]], opts) -- insert current time -- }}} -- {{{ External / System keymap("n", "x", [[:!open %]], opts) -- open current file with system default app keymap("c", "w!!", [[w !sudo tee %]], opt) -- save file with sudo -- }}} -- {{{ Diff / Git keymap("n", "gd", ":Gvdiffsplit", opts) -- git diff split (requires fugitive) keymap("n", "gs", ":Git", opts) -- open git status tree (requires fugitive) keymap("n", "gr", ":terminal git log --graph --oneline --decorate --alli", opts) -- show git log graph in terminal -- GitSigns toggles vim.keymap.set('n', 'gt', function() require('gitsigns').toggle_signs() end, { desc = 'Toggle git signs' }) vim.keymap.set('n', 'gb', function() require('gitsigns').toggle_current_line_blame() end, { desc = 'Toggle git blame' }) vim.keymap.set('n', 'gx', function() require('gitsigns').toggle_deleted() end, { desc = 'Toggle git deleted' }) vim.keymap.set('n', 'gn', function() require('gitsigns').toggle_numhl() end, { desc = 'Toggle git number highlights' }) vim.keymap.set('n', 'gc', function() require('gitsigns').toggle_linehl() end, { desc = 'Toggle git line colors' }) -- LSP diagnostic toggle vim.keymap.set('n', 'ld', function() local config = vim.diagnostic.config() vim.diagnostic.config({ virtual_text = not config.virtual_text, signs = not config.signs, underline = not config.underline, }) end, { desc = 'Toggle LSP diagnostics' }) -- Toggle fold column vim.keymap.set("n", "un", function() vim.wo.foldcolumn = vim.wo.foldcolumn == "0" and "1" or "0" end, { desc = "Toggle fold column" }) keymap("n", "si", ":source $MYVIMRC", opts) -- source init.lua ($MYVIMRC is auto path to your init.lua) -- }}} -- {{{ Plugins -- Yazi (keeping this here since it's a simple command keymap) keymap("n", "y", ":Yazi", opt) -- open Yazi file manager -- mkdx checkbox toggle (disable default space key, use leader+t instead) vim.g["mkdx#settings"] = { checkbox = { toggles = {' ', 'x', '-'}, toggle_key = '' } } keymap("n", "t", "(mkdx-checkbox-next-n)", opt) -- toggle markdown checkbox -- }}} -- {{{ Whole Document Select keymap("n", "a", "ggVG", opt) -- select entire document -- }}}