-- n, v, i are mode names local function termcodes(str) return vim.api.nvim_replace_termcodes(str, true, true, true) end local M = {} M.general = { i = { -- go to beginning and end [""] = { "^i", "論 beginning of line" }, [""] = { "", "壟 end of line" }, -- navigate within insert mode [""] = { "", " move left" }, [""] = { "", " move right" }, [""] = { "", " move down" }, [""] = { "", " move up" }, }, n = { -- switch between windows [""] = { "h", " window left" }, [""] = { "l", " window right" }, [""] = { "j", " window down" }, [""] = { "k", " window up" }, -- save [""] = { " w ", "﬚ save file" }, -- Copy all [""] = { " %y+ ", " copy whole file" }, -- line numbers ["n"] = { " set nu! ", " toggle line number" }, ["rn"] = { " set rnu! ", " toggle relative number" }, -- update nvchad ["uu"] = { " :NvChadUpdate ", " update nvchad" }, ["tt"] = { function() require("base46").toggle_theme() end, " toggle theme", }, }, t = { ["jk"] = { termcodes "", " escape terminal mode" }, }, } M.bufferline = { n = { -- new buffer [""] = { " enew ", "烙 new buffer" }, -- cycle through buffers [""] = { " BufferLineCycleNext ", " cycle next buffer" }, [""] = { " BufferLineCyclePrev ", " cycle prev buffer" }, -- close buffer + hide terminal buffer ["x"] = { function() nvchad.close_buffer() end, " close buffer", }, }, } M.comment = { -- toggle comment in both modes n = { ["/"] = { function() require("Comment.api").toggle_current_linewise() end, "蘒 toggle comment", }, }, v = { ["/"] = { "lua require('Comment.api').toggle_linewise_op(vim.fn.visualmode())", "蘒 toggle comment", }, }, } M.lspconfig = { -- 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", }, [""] = { function() vim.lsp.buf.signature_help() end, " lsp signature_help", }, ["D"] = { function() vim.lsp.buf.type_definition() end, " lsp definition type", }, ["ra"] = { function() vim.lsp.buf.rename() end, " lsp rename", }, ["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() end, " goto prev", }, ["d]"] = { function() vim.diagnostic.goto_next() end, " goto_next", }, ["q"] = { function() vim.diagnostic.setloclist() end, " diagnostic setloclist", }, ["fm"] = { function() vim.lsp.buf.formatting() 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.nvimtree = { n = { -- toggle [""] = { " NvimTreeToggle ", " toggle nvimtree" }, -- focus ["e"] = { " NvimTreeFocus ", " focus nvimtree" }, }, } M.telescope = { 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" }, ["tk"] = { " Telescope keymaps ", " show keys" }, -- git ["cm"] = { " Telescope git_commits ", " git commits" }, ["gt"] = { " Telescope git_status ", " git status" }, -- pick a hidden term ["pt"] = { " Telescope terms ", " pick hidden term" }, -- theme switcher ["th"] = { " Telescope themes ", " nvchad themes" }, }, } M.nvterm = { t = { -- toggle in terminal mode [""] = { function() require("nvterm.terminal").toggle "float" end, " toggle floating term", }, [""] = { function() require("nvterm.terminal").toggle "horizontal" end, " toggle horizontal term", }, [""] = { function() require("nvterm.terminal").toggle "vertical" end, " toggle vertical term", }, }, n = { -- toggle in normal mode [""] = { function() require("nvterm.terminal").toggle "float" end, " toggle floating term", }, [""] = { function() require("nvterm.terminal").toggle "horizontal" end, " toggle horizontal term", }, [""] = { function() require("nvterm.terminal").toggle "vertical" end, " toggle vertical term", }, -- new ["h"] = { function() require("nvterm.terminal").new "horizontal" end, " new horizontal term", }, ["v"] = { function() require("nvterm.terminal").new "vertical" end, " new vertical term", }, }, } M.whichkey = { 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", }, }, } return M