neovim configuration using rocks.nvim plugin manager
at main 6.5 kB view raw
1local Util = require("utils") 2 3vim.g.mapleader = vim.keycode("<space>") 4vim.g.maplocalleader = vim.keycode("<cr>") 5 6-- Fix default keymap errors 7vim.keymap.set("x", "<c-c>", "<esc>") 8-- Add undo break-points 9vim.keymap.set("i", ",", ",<c-g>u") 10vim.keymap.set("i", ".", ".<c-g>u") 11vim.keymap.set("i", ";", ";<c-g>u") 12 13-- Native-like keymaps 14-- keymaps that follows native keymap and make it more consistent 15vim.keymap.set("n", "-", "<cmd>e %:h<cr>", { desc = "open dir" }) 16 17-- Breaking remaps on native keymaps 18vim.keymap.set("n", "g/", "gcc", { remap = true }) 19vim.keymap.set("x", "g/", "gc", { remap = true }) 20vim.keymap.set("n", "Q", "q") 21vim.keymap.set("n", "q", "<cmd>close<cr>") 22-- -- fast indent/dedenting 23-- vim.keymap.set("n", "<", "<<") 24-- vim.keymap.set("x", "<", "<gv") 25-- vim.keymap.set("n", ">", ">>") 26-- vim.keymap.set("x", ">", ">gv") 27 28-- quickfix list 29vim.keymap.set("n", "<c-j>", "<cmd>cnext<cr>") 30vim.keymap.set("n", "<c-k>", "<cmd>cprev<cr>") 31vim.keymap.set("n", "<c-q>", function() 32 local wininfos = vim.fn.getwininfo() 33 local is_quickfix_open = vim.iter(wininfos):any(function(info) 34 return info.quickfix == 1 and info.loclist ~= 1 35 end) 36 if is_quickfix_open then 37 vim.cmd.cclose() 38 else 39 vim.cmd.copen() 40 end 41end) 42 43vim.keymap.set("n", "<cs-tab>", "<cmd>tabprev<cr>", { desc = "Prev tab" }) 44vim.keymap.set("n", "<c-tab>", "<cmd>tabnext<cr>", { desc = "Next tab" }) 45 46-- ways to exit select mode without substituting 47vim.keymap.set("s", "<left>", "<c-g><c-v>I") 48vim.keymap.set("s", "<right>", "<c-g><c-v>A") 49 50-- other useful mappings 51vim.keymap.set("x", "J", ":m '>+1<cr>gv", { silent = true, desc = "Move down" }) 52vim.keymap.set("x", "K", ":m '<-2<cr>gv", { silent = true, desc = "Move up" }) 53 54-- credit: https://www.reddit.com/r/neovim/comments/1k4efz8/comment/mo9t5xq 55vim.keymap.set("n", "ycc", function() 56 return 'yy' .. vim.v.count1 .. "gcc']p" 57end, { remap = true, expr = true }) 58 59-- TODO: make it work with v:count 60vim.keymap.set("n", "zh", "shiftwidth() . 'zh'", { expr = true }) 61vim.keymap.set("n", "zl", "shiftwidth() . 'zl'", { expr = true }) 62 63-- easy register mappings 64vim.keymap.set("n", "+", '"+') 65vim.keymap.set("n", "_", '"_') 66 67-- diagnostics 68vim.keymap.set("n", "<leader>cd", vim.diagnostic.open_float, { desc = "Line Diagnostics" }) 69-- stylua: ignore start 70vim.keymap.set({ "n", "x" }, "]d", function() vim.diagnostic.jump({ count = 1, float = true }) end, { desc = "Next Diagnostic" }) 71vim.keymap.set({ "n", "x" }, "[d", function() vim.diagnostic.jump({ count = -1, float = true }) end, { desc = "Prev Diagnostic" }) 72vim.keymap.set({ "n", "x" }, "]e", function() vim.diagnostic.jump({ count = 1, float = true, severity = vim.diagnostic.severity.ERROR }) end, { desc = "Next Error" }) 73vim.keymap.set({ "n", "x" }, "[e", function() vim.diagnostic.jump({ count = -1, float = true, severity = vim.diagnostic.severity.ERROR }) end, { desc = "Prev Error" }) 74vim.keymap.set({ "n", "x" }, "]w", function() vim.diagnostic.jump({ count = 1, float = true, severity = vim.diagnostic.severity.WARN }) end, { desc = "Next Warning" }) 75vim.keymap.set({ "n", "x" }, "[w", function() vim.diagnostic.jump({ count = -1, float = true, severity = vim.diagnostic.severity.WARN }) end, { desc = "Prev Warning" }) 76-- stylua: ignore end 77 78-- format 79vim.keymap.set("n", "<leader>cf", "<cmd>Format<cr>", { desc = "Format" }) 80 81-- snippets 82vim.keymap.set({ "i", "s" }, "<c-l>", function() 83 return vim.snippet.active({ direction = 1 }) and vim.snippet.jump(1) 84end, { silent = true }) 85vim.keymap.set({ "i", "s" }, "<c-h>", function() 86 return vim.snippet.active({ direction = -1 }) and vim.snippet.jump(-1) 87end, { silent = true }) 88vim.keymap.set({ "i", "s" }, "<tab>", function() 89 return vim.snippet.active({ direction = 1 }) and vim.snippet.jump(1) 90end, { silent = true }) 91vim.keymap.set({ "i", "s" }, "<s-tab>", function() 92 return vim.snippet.active({ direction = -1 }) and vim.snippet.jump(-1) 93end, { silent = true }) 94 95-- lsp 96vim.api.nvim_create_autocmd("LspAttach", { 97 group = vim.api.nvim_create_augroup("UserLspAttach", { clear = false }), 98 callback = function(ev) 99 vim.keymap.set("n", "grr", vim.lsp.buf.references, { buffer = ev.buf }) 100 vim.keymap.set("n", "gd", vim.lsp.buf.definition, { buffer = ev.buf }) 101 vim.keymap.set("n", "gry", vim.lsp.buf.type_definition, { buffer = ev.buf }) 102 vim.keymap.set("n", "gri", vim.lsp.buf.implementation, { buffer = ev.buf }) 103 vim.keymap.set("n", "grd", vim.lsp.buf.declaration, { buffer = ev.buf }) 104 vim.keymap.set("i", "<c-s>", vim.lsp.buf.signature_help, { buffer = ev.buf }) 105 vim.keymap.set({ "n", "i" }, "<f2>", function() 106 vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) 107 end, { buffer = ev.buf }) 108 end, 109}) 110 111vim.api.nvim_create_autocmd("User", { 112 pattern = "GitAttach", 113 callback = function(ev) 114 vim.keymap.set({ "x", "o" }, "ih", ":<c-u>Gitsigns select_hunk<cr>", { desc = "Select Hunk", buffer = ev.buf }) 115 vim.keymap.set({ "x", "o" }, "ah", ":<c-u>Gitsigns select_hunk<cr>", { desc = "Select Hunk", buffer = ev.buf }) 116 vim.keymap.set({ "n", "x" }, "]h", "<cmd>Gitsigns next_hunk<cr>", { desc = "Next Hunk", buffer = ev.buf }) 117 vim.keymap.set({ "n", "x" }, "[h", "<cmd>Gitsigns prev_hunk<cr>", { desc = "Prev Hunk", buffer = ev.buf }) 118 vim.keymap.set("n", "<leader>gu", "<cmd>Gitsigns undo_stage_hunk<cr>", { desc = "Undo Stage Hunk", buffer = ev.buf }) 119 vim.keymap.set("n", "<leader>gA", "<cmd>Gitsigns stage_buffer<cr>", { desc = "Stage Buffer", buffer = ev.buf }) 120 vim.keymap.set("n", "<leader>gb", "<cmd>Gitsigns blame_line<cr>", { desc = "Stage Buffer", buffer = ev.buf }) 121 vim.keymap.set("n", "<leader>gR", "<cmd>Gitsigns reset_buffer<cr>", { desc = "Reset Buffer", buffer = ev.buf }) 122 vim.keymap.set("n", "<leader>gp", "<cmd>Gitsigns preview_hunk_inline<cr>", { desc = "Preview Inline", buffer = ev.buf }) 123 vim.keymap.set("n", "<leader>gP", "<cmd>Gitsigns preview_hunk<cr>", { desc = "Preview Hunk", buffer = ev.buf }) 124 vim.keymap.set("n", "<leader>gk", "<cmd>Gitsigns blame_line<cr>", { desc = "Blame Line", buffer = ev.buf }) 125 vim.keymap.set({ "n", "x" }, "<leader>ga", "<cmd>Gitsigns stage_hunk<cr>", { desc = "Stage Hunk", buffer = ev.buf }) 126 vim.keymap.set({ "n", "x" }, "<leader>gr", "<cmd>Gitsigns reset_hunk<cr>", { desc = "Reset Hunk", buffer = ev.buf }) 127 end, 128})