local function wrap(fn, ...) local props = vim.F.pack_len(...) return function() pcall(fn, vim.F.unpack_len(props)) end end -- goto next search and uncover line vim.keymap.set("n", "n", "nzzzv") -- goto prev search and uncover line vim.keymap.set("n", "N", "Nzzzv") -- remove shift down movement vim.keymap.set({ "n", "v" }, "", "") -- remove shift up movement vim.keymap.set({ "n", "v" }, "", "") -- quit all vim.keymap.set("n", "q", vim.cmd.quitall) -- detach vim.keymap.set("n", "", vim.cmd.detach) -- save file without autocmds vim.keymap.set( "n", "", wrap(vim._with, { noautocmd = true }, wrap(vim.cmd, "write")) ) -- edit alt file vim.keymap.set("n", "", "") vim.keymap.set("n", "gV", '"g`[" . strpart(getregtype(), 0, 1) . "g`]"', { expr = true, replace_keycodes = false, desc = "visually select changed text", }) vim.keymap.set( "x", "g/", "/\\%V", { desc = "search inside visual selection" } ) -- select inside word vim.keymap.set({ "v", "o" }, ";", "iw") -- editing vim.keymap.set({ "n", "v" }, "C", '"_c', { desc = "non-copy change" }) vim.keymap.set({ "n", "v" }, "D", '"_d', { desc = "non-copy delete" }) vim.keymap.set("o", "D", "0D", { desc = "clear current line" }) vim.keymap.set("n", "zq", function() local is_qf_open = vim .iter(vim.api.nvim_tabpage_list_wins(0)) :find(function(win) local buf = vim.api.nvim_win_get_buf(win) return vim.bo[buf].buftype == "quickfix" end) if is_qf_open then vim.cmd([[cclose]]) return end vim.cmd([[botright copen]]) end, { desc = "toggle quickfix" }) vim.keymap.set("n", "zD", function() if vim.o.diff then vim.cmd([[diffoff]]) return end vim.cmd([[diffthis]]) end, { desc = "toggle diff mode" }) vim.keymap.set("n", "dzo", "%diffget") vim.keymap.set("n", "dzp", "%diffput") -- vim-scriptease inspired `zS` vim.keymap.set("n", "zS", vim.show_pos, { desc = "inspect marks" }) vim.keymap.set( "n", "g.", [[:%sno/"/./g]], { desc = "repeat last edit for file" } ) vim.keymap.set( "n", [[\c]], "setlocal cursorline! cursorline?", { desc = "toggle 'cursorline'" } ) vim.keymap.set( "n", [[\C]], "setlocal cursorcolumn! cursorcolumn?", { desc = "toggle 'cursorcolumn'" } ) vim.keymap.set("n", [[\d]], function() vim.diagnostic.enable(not vim.diagnostic.is_enabled()) print( "diagnostics " .. (vim.diagnostic.is_enabled() and "enabled" or "disabled") ) end, { desc = "toggle diagnostics" }) vim.keymap.set( "n", [[\h]], 'let v:hlsearch = 1 - v:hlsearch | echo (v:hlsearch ? " " : "no") . "hlsearch"', { desc = "toggle 'hlsearch'" } ) vim.keymap.set("n", [[\i]], function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) print( "inlay hint " .. (vim.lsp.inlay_hint.is_enabled() and "enabled" or "disabled") ) end, { desc = "toggle inlay hint" }) vim.keymap.set( "n", [[\l]], "setlocal list! list?", { desc = "toggle 'list'" } ) vim.keymap.set( "n", [[\r]], "setlocal relativenumber! relativenumber?", { desc = "toggle 'relativenumber'" } ) vim.keymap.set( "n", [[\s]], "setlocal spell! spell?", { desc = "toggle 'spell'" } ) vim.keymap.set( "n", [[\w]], "setlocal wrap! wrap?", { desc = "toggle 'wrap'" } )