local M = {} M.general = { n = { [""] = { " noh ", "no highlight" }, -- switch between windows -- [""] = { "h", "window left" }, -- [""] = { "l", "window right" }, -- [""] = { "j", "window down" }, -- [""] = { "k", "window up" }, -- cycleling through buffers ["tk"] = { " bnext ", "Next buffer" }, ["tj"] = { " bprev ", "Previous buffer" }, -- Allow moving the cursor through wrapped lines with j, k, and -- http://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/ -- empty mode is same as using :map -- also don't use g[j|k] when in operator pending mode, so it doesn't alter d, y or c behaviour ["j"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', opts = { expr = true } }, ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', opts = { expr = true } }, -- new buffer ["b"] = { " enew ", "new buffer" }, -- close buffer + hide terminal buffer ["x"] = { function() require("core.utils").close_buffer() end, "close buffer", }, ["d"] = { "\"_d", "delete without copying into clipboard" }, -- motion keybinds [""] = { "zz", "move forward half page" }, [""] = { "zz", "move backward half page" }, ["n"] = { "nzzzv" }, ["N"] = { "Nzzzv" }, ["pv"] = { " Ex ", "File Tree" }, ["ex"] = { "!chmod +x %", "Make the current buffer script executable", opts = { silent = true } }, ["s"] = { [[:%s/\<\>//gI]] }, }, v = { ["d"] = { "\"_d", "delete without copying into clipboard" }, ["J"] = { ":m '>+1gv=gv" }, ["K"] = { ":m '<-2gv=gv" }, }, x = { -- Don't copy the replaced text after pasting in visual mode -- https://vim.fandom.com/wiki/Replace_a_word_with_yanked_text#Alternative_mapping_for_paste ["p"] = { 'p:let @+=@0:let @"=@0', opts = { silent = true } }, }, } M.kterm = { plugin = true, t = { -- toggle in terminal mode [""] = { function() require("kterm.terminal").toggle "float" end, "toggle floating term", }, -- [""] = { -- function() -- require("kterm.terminal").toggle "horizontal" -- end, -- "toggle horizontal term", -- }, -- -- [""] = { -- function() -- require("kterm.terminal").toggle "vertical" -- end, -- "toggle vertical term", -- }, }, n = { -- toggle in normal mode [""] = { function() require("kterm.terminal").toggle "float" end, "toggle floating term", }, -- [""] = { -- function() -- require("kterm.terminal").toggle "horizontal" -- end, -- "toggle horizontal term", -- }, -- -- [""] = { -- function() -- require("kterm.terminal").toggle "vertical" -- end, -- "toggle vertical term", -- }, }, } M.nvimtree = { plugin = true, n = { -- toggle [""] = { " NvimTreeToggle ", "Toggle nvimtree" }, -- focus ["e"] = { " NvimTreeFocus ", "Focus nvimtree" }, }, } M.telescope = { plugin = true, n = { -- find ["ff"] = { " Telescope find_files ", "find files" }, ["fa"] = { " Telescope find_files follow=true no_ignore=true hidden=true ", "find all" }, ["fw"] = { " Telescope live_grep ", "live grep" }, ["fb"] = { " Telescope buffers ", "find buffers" }, ["fh"] = { " Telescope help_tags ", "help page" }, ["fo"] = { " Telescope oldfiles ", "find oldfiles" }, ["fz"] = { " Telescope current_buffer_fuzzy_find ", "find in current buffer" }, ["tk"] = { " Telescope keymaps ", "show keys" }, -- git ["cm"] = { " Telescope git_commits ", "git commits" }, ["gt"] = { " Telescope git_status ", "git status" }, -- theme switcher ["th"] = { " Telescope colorscheme", "colorthemes" }, }, } M.fugitive = { plugin = true, n = { ["gs"] = { " Git ", "Git" } } } M.harpoon = { plugin = true, n = { [""] = { function() require("harpoon.ui").nav_file(1) end, "Harpoon File 1" }, [""] = { function() require("harpoon.ui").nav_file(2) end, "Harpoon File 2" }, [""] = { function() require("harpoon.ui").nav_file(3) end, "Harpoon File 3" }, [""] = { function() require("harpoon.ui").nav_file(4) end, "Harpoon File 4" }, [""] = { function() require("harpoon.ui").toggle_quick_menu() end, "Harpoon Toggle Quick Menu" }, ["a"] = { function() require("harpoon.mark").add_file() end, "Harpoon Add File" }, } } M.undotree = { plugin = true, n = { -- toggle ["u"] = { " UndotreeToggle ", "toggle undotree" }, }, } M.whichkey = { plugin = true, n = { ["wK"] = { function() vim.cmd "WhichKey" end, "which-key all keymaps", }, ["wk"] = { function() local input = vim.fn.input "WhichKey: " vim.cmd("WhichKey " .. input) end, "which-key query lookup", }, }, } M.comment = { plugin = true, -- toggle comment in both modes n = { ["/"] = { function() require("Comment.api").toggle.linewise.current() end, "toggle comment", }, }, v = { ["/"] = { "lua require('Comment.api').toggle.linewise(vim.fn.visualmode())", "toggle comment", }, }, } M.lspconfig = { plugin = true, -- See ` :help vim.lsp.*` for documentation on any of the below functions n = { ["gD"] = { function() vim.lsp.buf.declaration() end, "lsp declaration", }, ["gd"] = { function() vim.lsp.buf.definition() end, "lsp definition", }, ["K"] = { function() vim.lsp.buf.hover() end, "lsp hover", }, ["gi"] = { function() vim.lsp.buf.implementation() end, "lsp implementation", }, ["ls"] = { function() vim.lsp.buf.signature_help() end, "lsp signature_help", }, ["D"] = { function() vim.lsp.buf.type_definition() end, "lsp definition type", }, ["ca"] = { function() vim.lsp.buf.code_action() end, "lsp code_action", }, ["gr"] = { function() vim.lsp.buf.references() end, "lsp references", }, ["f"] = { function() vim.diagnostic.open_float() end, "floating diagnostic", }, ["[d"] = { function() vim.diagnostic.goto_prev({ float = { border = "rounded" } }) end, "goto prev", }, ["]d"] = { function() vim.diagnostic.goto_next({ float = { border = "rounded" } }) end, "goto_next", }, ["q"] = { function() vim.diagnostic.setloclist() end, "diagnostic setloclist", }, ["fm"] = { function() vim.lsp.buf.format { async = true } end, "lsp formatting", }, ["wa"] = { function() vim.lsp.buf.add_workspace_folder() end, "add workspace folder", }, ["wr"] = { function() vim.lsp.buf.remove_workspace_folder() end, "remove workspace folder", }, ["wl"] = { function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, "list workspace folders", }, }, } M.rust = { plugin = true, n = { ["rr"] = { " RustRun", "RustRun" }, ["rd"] = { " RustDebuggables ", "RustDebuggables" }, ["ra"] = { " RustHoverActions ", "RustHoverActions" }, ["roc"] = { " RustOpenCargo ", "RustOpenCargo" }, ["rcg"] = { " RustViewCrateGraph ", "RustViewCrateGraph" }, }, } M.blankline = { plugin = true, n = { ["cc"] = { function() local ok, start = require("indent_blankline.utils").get_current_context( vim.g.indent_blankline_context_patterns, vim.g.indent_blankline_use_treesitter_scope ) if ok then vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), { start, 0 }) vim.cmd [[normal! _]] end end, "Jump to current_context", }, }, } return M