diff options
Diffstat (limited to 'ar/.config/NvChad/lua/core/mappings.lua')
| -rw-r--r-- | ar/.config/NvChad/lua/core/mappings.lua | 468 |
1 files changed, 468 insertions, 0 deletions
diff --git a/ar/.config/NvChad/lua/core/mappings.lua b/ar/.config/NvChad/lua/core/mappings.lua new file mode 100644 index 0000000..4154bde --- /dev/null +++ b/ar/.config/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 |
