---@diagnostic disable: missing-parameter local wk = require("which-key") local util = require("util") vim.o.timeoutlen = 300 wk.setup({ show_help = false, triggers = "auto", plugins = { spelling = true }, key_labels = { [""] = "SPC" }, }) local id for _, key in ipairs({ "h", "j", "k", "l" }) do local count = 0 vim.keymap.set("n", key, function() if count >= 10 then id = vim.notify("Hold it Cowboy!", vim.log.levels.WARN, { icon = "🤠", replace = id, keep = function() return count >= 10 end, }) else count = count + 1 vim.defer_fn(function() count = count - 1 end, 5000) return key end end, { expr = true }) end -- Move to window using the movement keys vim.keymap.set("n", "", "h") vim.keymap.set("n", "", "j") vim.keymap.set("n", "", "k") vim.keymap.set("n", "", "l") -- Resize window using arrow keys vim.keymap.set("n", "", "resize +2") vim.keymap.set("n", "", "resize -2") vim.keymap.set("n", "", "vertical resize -2") vim.keymap.set("n", "", "vertical resize +2") -- Move Lines vim.keymap.set("n", "", ":m .+1==") vim.keymap.set("v", "", ":m '>+1gv=gv") vim.keymap.set("i", "", ":m .+1==gi") vim.keymap.set("n", "", ":m .-2==") vim.keymap.set("v", "", ":m '<-2gv=gv") vim.keymap.set("i", "", ":m .-2==gi") -- Switch buffers with tab vim.keymap.set("n", "", "bprevious") vim.keymap.set("n", "", "bnext") -- Easier pasting -- vim.keymap.set("n", "[p", ":pu!") -- vim.keymap.set("n", "]p", ":pu") -- Clear search with vim.keymap.set({ "i", "n" }, "", "noh") vim.keymap.set("n", "gw", "*N") vim.keymap.set("x", "gw", "*N") -- https://github.com/mhinz/vim-galore#saner-behavior-of-n-and-n vim.keymap.set("n", "n", "'Nn'[v:searchforward]", { expr = true }) vim.keymap.set("x", "n", "'Nn'[v:searchforward]", { expr = true }) vim.keymap.set("o", "n", "'Nn'[v:searchforward]", { expr = true }) vim.keymap.set("n", "N", "'nN'[v:searchforward]", { expr = true }) vim.keymap.set("x", "N", "'nN'[v:searchforward]", { expr = true }) vim.keymap.set("o", "N", "'nN'[v:searchforward]", { expr = true }) -- Add undo break-points vim.keymap.set("i", ",", ",u") vim.keymap.set("i", ".", ".u") vim.keymap.set("i", ";", ";u") -- save in insert mode vim.keymap.set("i", "", ":w") vim.keymap.set("n", "", ":w") vim.keymap.set("n", "", "normal ciwa") -- telescope in command line -- vim.cmd([[cmap (TelescopeFuzzyCommandSearch)]]) -- better indenting vim.keymap.set("v", "<", "", ">gv") vim.keymap.set("n", "cu", function() local number = math.random(math.pow(2, 127) + 1, math.pow(2, 128)) return "i" .. string.format("%.0f", number) end, { expr = true, desc = "GUID", }) -- makes * and # work on visual mode too. vim.cmd([[ function! g:VSetSearch(cmdtype) let temp = @s norm! gv"sy let @/ = '\V' . substitute(escape(@s, a:cmdtype.'\'), '\n', '\\n', 'g') let @s = temp endfunction xnoremap * :call g:VSetSearch('/')/=@/ xnoremap # :call g:VSetSearch('?')?=@/ ]]) local leader = { ["w"] = { name = "+windows", ["w"] = { "p", "other-window" }, ["d"] = { "c", "delete-window" }, ["-"] = { "s", "split-window-below" }, ["|"] = { "v", "split-window-right" }, ["2"] = { "v", "layout-double-columns" }, ["h"] = { "h", "window-left" }, ["j"] = { "j", "window-below" }, ["l"] = { "l", "window-right" }, ["k"] = { "k", "window-up" }, ["H"] = { "5<", "expand-window-left" }, ["J"] = { ":resize +5", "expand-window-below" }, ["L"] = { "5>", "expand-window-right" }, ["K"] = { ":resize -5", "expand-window-up" }, ["="] = { "=", "balance-window" }, ["s"] = { "s", "split-window-below" }, ["v"] = { "v", "split-window-right" }, }, c = { name = "+code", }, b = { name = "+buffer", ["b"] = { ":e #", "Switch to Other Buffer" }, ["p"] = { ":BufferLineCyclePrev", "Previous Buffer" }, ["["] = { ":BufferLineCyclePrev", "Previous Buffer" }, ["n"] = { ":BufferLineCycleNext", "Next Buffer" }, ["]"] = { ":BufferLineCycleNext", "Next Buffer" }, -- ["D"] = { ":bd", "Delete Buffer & Window" }, }, g = { name = "+git", l = { function() require("util").float_terminal("lazygit", { border = "none" }) end, "LazyGit", }, c = { "Telescope git_commits", "commits" }, b = { "Telescope git_branches", "branches" }, s = { "Telescope git_status", "status" }, d = { "DiffviewOpen", "DiffView" }, h = { name = "+hunk" }, }, ["h"] = { name = "+help", t = { ":Telescope builtin", "Telescope" }, c = { ":Telescope commands", "Commands" }, h = { ":Telescope help_tags", "Help Pages" }, m = { ":Telescope man_pages", "Man Pages" }, k = { ":Telescope keymaps", "Key Maps" }, s = { ":Telescope highlights", "Search Highlight Groups" }, l = { vim.show_pos, "Highlight Groups at cursor" }, f = { ":Telescope filetypes", "File Types" }, o = { ":Telescope vim_options", "Options" }, a = { ":Telescope autocommands", "Auto Commands" }, p = { name = "+packer", p = { "PackerSync", "Sync" }, s = { "PackerStatus", "Status" }, i = { "PackerInstall", "Install" }, c = { "PackerCompile", "Compile" }, }, }, s = { name = "+search", g = { "Telescope live_grep", "Grep" }, b = { "Telescope current_buffer_fuzzy_find", "Buffer" }, s = { function() require("telescope.builtin").lsp_document_symbols({ symbols = { "Class", "Function", "Method", "Constructor", "Interface", "Module", "Struct", "Trait", "Field", "Property", }, }) end, "Goto Symbol", }, h = { "Telescope command_history", "Command History" }, m = { "Telescope marks", "Jump to Mark" }, r = { "lua require('spectre').open()", "Replace (Spectre)" }, }, f = { name = "+file", t = { "Neotree toggle", "NeoTree" }, f = { "Telescope find_files", "Find File" }, r = { "Telescope oldfiles", "Open Recent File" }, n = { "enew", "New File" }, z = "Zoxide", d = "Dot Files", }, o = { name = "+open", p = { "Peek", "Peek (Markdown Preview)" }, g = { "Glow", "Markdown Glow" }, n = { "lua require('github-notifications.menu').notifications()", "GitHub Notifications" }, }, p = { name = "+project", p = "Open Project", b = { ":Telescope file_browser cwd=~/projects", "Browse ~/projects" }, }, t = { name = "toggle", f = { require("config.plugins.lsp.formatting").toggle, "Format on Save", }, s = { function() util.toggle("spell") end, "Spelling", }, w = { function() util.toggle("wrap") end, "Word Wrap", }, n = { function() util.toggle("relativenumber", true) util.toggle("number") end, "Line Numbers", }, }, [""] = { name = "tabs", [""] = { "tabnew", "New Tab" }, n = { "tabnext", "Next" }, d = { "tabclose", "Close" }, p = { "tabprevious", "Previous" }, ["]"] = { "tabnext", "Next" }, ["["] = { "tabprevious", "Previous" }, f = { "tabfirst", "First" }, l = { "tablast", "Last" }, }, ["`"] = { ":e #", "Switch to Other Buffer" }, [" "] = "Find File", ["."] = { ":Telescope file_browser", "Browse Files" }, [","] = { "Telescope buffers show_all_buffers=true", "Switch Buffer" }, ["/"] = { "Telescope live_grep", "Search" }, [":"] = { "Telescope command_history", "Command History" }, ["C"] = { function() util.clipman() end, "Paste from Clipman", }, q = { name = "+quit/session", q = { "qa", "Quit" }, ["!"] = { ":qa!", "Quit without saving" }, s = { [[lua require("persistence").load()]], "Restore Session" }, l = { [[lua require("persistence").load({last=true})]], "Restore Last Session" }, d = { [[lua require("persistence").stop()]], "Stop Current Session" }, }, x = { name = "+errors", x = { "TroubleToggle workspace_diagnostics", "Trouble" }, t = { "TodoTrouble", "Todo Trouble" }, tt = { "TodoTrouble keywords=TODO,FIX,FIXME", "Todo Trouble" }, T = { "TodoTelescope", "Todo Telescope" }, l = { "lopen", "Open Location List" }, q = { "copen", "Open Quickfix List" }, }, z = { [[ZenMode]], "Zen Mode" }, T = { function() util.test(true) end, "Plenary Test File", }, D = { function() util.test() end, "Plenary Test Directory", }, } for i = 0, 10 do leader[tostring(i)] = "which_key_ignore" end wk.register(leader, { prefix = "" }) wk.register({ g = { name = "+goto" } })