diff options
Diffstat (limited to 'nvim/nvchad/lua/core/mappings.lua')
-rw-r--r-- | nvim/nvchad/lua/core/mappings.lua | 468 |
1 files changed, 468 insertions, 0 deletions
diff --git a/nvim/nvchad/lua/core/mappings.lua b/nvim/nvchad/lua/core/mappings.lua new file mode 100644 index 0000000..0a652a7 --- /dev/null +++ b/nvim/nvchad/lua/core/mappings.lua @@ -0,0 +1,468 @@ +-- n, v, i, t = mode names + +local M = {} + +M.general = { + i = { + -- go to beginning and end + ["<C-b>"] = { "<ESC>^i", "Beginning of line" }, + ["<C-e>"] = { "<End>", "End of line" }, + + -- navigate within insert mode + ["<C-h>"] = { "<Left>", "Move left" }, + ["<C-l>"] = { "<Right>", "Move right" }, + ["<C-j>"] = { "<Down>", "Move down" }, + ["<C-k>"] = { "<Up>", "Move up" }, + }, + + n = { + ["<Esc>"] = { "<cmd> noh <CR>", "Clear highlights" }, + -- switch between windows + ["<C-h>"] = { "<C-w>h", "Window left" }, + ["<C-l>"] = { "<C-w>l", "Window right" }, + ["<C-j>"] = { "<C-w>j", "Window down" }, + ["<C-k>"] = { "<C-w>k", "Window up" }, + + -- save + ["<C-s>"] = { "<cmd> w <CR>", "Save file" }, + + -- Copy all + ["<C-c>"] = { "<cmd> %y+ <CR>", "Copy whole file" }, + + -- line numbers + ["<leader>n"] = { "<cmd> set nu! <CR>", "Toggle line number" }, + ["<leader>rn"] = { "<cmd> set rnu! <CR>", "Toggle relative number" }, + + -- Allow moving the cursor through wrapped lines with j, k, <Up> and <Down> + -- http://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/ + -- empty mode is same as using <cmd> :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"', "Move down", opts = { expr = true } }, + ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, + ["<Up>"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, + ["<Down>"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, + + -- new buffer + ["<leader>b"] = { "<cmd> enew <CR>", "New buffer" }, + ["<leader>ch"] = { "<cmd> NvCheatsheet <CR>", "Mapping cheatsheet" }, + + ["<leader>fm"] = { + function() + vim.lsp.buf.format { async = true } + end, + "LSP formatting", + }, + }, + + t = { + ["<C-x>"] = { vim.api.nvim_replace_termcodes("<C-\\><C-N>", true, true, true), "Escape terminal mode" }, + }, + + v = { + ["<Up>"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, + ["<Down>"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, + ["<"] = { "<gv", "Indent line" }, + [">"] = { ">gv", "Indent line" }, + }, + + x = { + ["j"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, + ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, + -- 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<CR>:let @"=@0<CR>', "Dont copy replaced text", opts = { silent = true } }, + }, +} + +M.tabufline = { + plugin = true, + + n = { + -- cycle through buffers + ["<tab>"] = { + function() + require("nvchad.tabufline").tabuflineNext() + end, + "Goto next buffer", + }, + + ["<S-tab>"] = { + function() + require("nvchad.tabufline").tabuflinePrev() + end, + "Goto prev buffer", + }, + + -- close buffer + hide terminal buffer + ["<leader>x"] = { + function() + require("nvchad.tabufline").close_buffer() + end, + "Close buffer", + }, + }, +} + +M.comment = { + plugin = true, + + -- toggle comment in both modes + n = { + ["<leader>/"] = { + function() + require("Comment.api").toggle.linewise.current() + end, + "Toggle comment", + }, + }, + + v = { + ["<leader>/"] = { + "<ESC><cmd>lua require('Comment.api').toggle.linewise(vim.fn.visualmode())<CR>", + "Toggle comment", + }, + }, +} + +M.lspconfig = { + plugin = true, + + -- See `<cmd> :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", + }, + + ["<leader>ls"] = { + function() + vim.lsp.buf.signature_help() + end, + "LSP signature help", + }, + + ["<leader>D"] = { + function() + vim.lsp.buf.type_definition() + end, + "LSP definition type", + }, + + ["<leader>ra"] = { + function() + require("nvchad.renamer").open() + end, + "LSP rename", + }, + + ["<leader>ca"] = { + function() + vim.lsp.buf.code_action() + end, + "LSP code action", + }, + + ["gr"] = { + function() + vim.lsp.buf.references() + end, + "LSP references", + }, + + ["<leader>lf"] = { + function() + vim.diagnostic.open_float { border = "rounded" } + 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", + }, + + ["<leader>q"] = { + function() + vim.diagnostic.setloclist() + end, + "Diagnostic setloclist", + }, + + ["<leader>wa"] = { + function() + vim.lsp.buf.add_workspace_folder() + end, + "Add workspace folder", + }, + + ["<leader>wr"] = { + function() + vim.lsp.buf.remove_workspace_folder() + end, + "Remove workspace folder", + }, + + ["<leader>wl"] = { + function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, + "List workspace folders", + }, + }, + + v = { + ["<leader>ca"] = { + function() + vim.lsp.buf.code_action() + end, + "LSP code action", + }, + }, +} + +M.nvimtree = { + plugin = true, + + n = { + -- toggle + ["<C-n>"] = { "<cmd> NvimTreeToggle <CR>", "Toggle nvimtree" }, + + -- focus + ["<leader>e"] = { "<cmd> NvimTreeFocus <CR>", "Focus nvimtree" }, + }, +} + +M.telescope = { + plugin = true, + + n = { + -- find + ["<leader>ff"] = { "<cmd> Telescope find_files <CR>", "Find files" }, + ["<leader>fa"] = { "<cmd> Telescope find_files follow=true no_ignore=true hidden=true <CR>", "Find all" }, + ["<leader>fw"] = { "<cmd> Telescope live_grep <CR>", "Live grep" }, + ["<leader>fb"] = { "<cmd> Telescope buffers <CR>", "Find buffers" }, + ["<leader>fh"] = { "<cmd> Telescope help_tags <CR>", "Help page" }, + ["<leader>fo"] = { "<cmd> Telescope oldfiles <CR>", "Find oldfiles" }, + ["<leader>fz"] = { "<cmd> Telescope current_buffer_fuzzy_find <CR>", "Find in current buffer" }, + + -- git + ["<leader>cm"] = { "<cmd> Telescope git_commits <CR>", "Git commits" }, + ["<leader>gt"] = { "<cmd> Telescope git_status <CR>", "Git status" }, + + -- pick a hidden term + ["<leader>pt"] = { "<cmd> Telescope terms <CR>", "Pick hidden term" }, + + -- theme switcher + ["<leader>th"] = { "<cmd> Telescope themes <CR>", "Nvchad themes" }, + + ["<leader>ma"] = { "<cmd> Telescope marks <CR>", "telescope bookmarks" }, + }, +} + +M.nvterm = { + plugin = true, + + t = { + -- toggle in terminal mode + ["<A-i>"] = { + function() + require("nvterm.terminal").toggle "float" + end, + "Toggle floating term", + }, + + ["<A-h>"] = { + function() + require("nvterm.terminal").toggle "horizontal" + end, + "Toggle horizontal term", + }, + + ["<A-v>"] = { + function() + require("nvterm.terminal").toggle "vertical" + end, + "Toggle vertical term", + }, + }, + + n = { + -- toggle in normal mode + ["<A-i>"] = { + function() + require("nvterm.terminal").toggle "float" + end, + "Toggle floating term", + }, + + ["<A-h>"] = { + function() + require("nvterm.terminal").toggle "horizontal" + end, + "Toggle horizontal term", + }, + + ["<A-v>"] = { + function() + require("nvterm.terminal").toggle "vertical" + end, + "Toggle vertical term", + }, + + -- new + ["<leader>h"] = { + function() + require("nvterm.terminal").new "horizontal" + end, + "New horizontal term", + }, + + ["<leader>v"] = { + function() + require("nvterm.terminal").new "vertical" + end, + "New vertical term", + }, + }, +} + +M.whichkey = { + plugin = true, + + n = { + ["<leader>wK"] = { + function() + vim.cmd "WhichKey" + end, + "Which-key all keymaps", + }, + ["<leader>wk"] = { + function() + local input = vim.fn.input "WhichKey: " + vim.cmd("WhichKey " .. input) + end, + "Which-key query lookup", + }, + }, +} + +M.blankline = { + plugin = true, + + n = { + ["<leader>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", + }, + }, +} + +M.gitsigns = { + plugin = true, + + n = { + -- Navigation through hunks + ["]c"] = { + function() + if vim.wo.diff then + return "]c" + end + vim.schedule(function() + require("gitsigns").next_hunk() + end) + return "<Ignore>" + end, + "Jump to next hunk", + opts = { expr = true }, + }, + + ["[c"] = { + function() + if vim.wo.diff then + return "[c" + end + vim.schedule(function() + require("gitsigns").prev_hunk() + end) + return "<Ignore>" + end, + "Jump to prev hunk", + opts = { expr = true }, + }, + + -- Actions + ["<leader>rh"] = { + function() + require("gitsigns").reset_hunk() + end, + "Reset hunk", + }, + + ["<leader>ph"] = { + function() + require("gitsigns").preview_hunk() + end, + "Preview hunk", + }, + + ["<leader>gb"] = { + function() + package.loaded.gitsigns.blame_line() + end, + "Blame line", + }, + + ["<leader>td"] = { + function() + require("gitsigns").toggle_deleted() + end, + "Toggle deleted", + }, + }, +} + +return M |