|
| 1 | +-- See `:help vim.keymap.set()` |
| 2 | +vim.keymap.set({ "n", "v" }, "<Space>", "<Nop>", { silent = true }) |
| 3 | + |
| 4 | +-- Don't let me use shift-arrows in insert mode |
| 5 | +vim.keymap.set("i", "<S-Up>", "<Nop>", { silent = true }) |
| 6 | +vim.keymap.set("i", "<S-Down>", "<Nop>", { silent = true }) |
| 7 | + |
| 8 | +-- Remap for dealing with word wrap |
| 9 | +vim.keymap.set("n", "k", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) |
| 10 | +vim.keymap.set("n", "j", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) |
| 11 | + |
| 12 | +-- Toggle word wrap |
| 13 | +vim.keymap.set("n", "<leader>w", ":set wrap!<cr>", { desc = "Toggle word wrap" }) |
| 14 | + |
| 15 | +-- Better indenting in visual mode |
| 16 | +vim.keymap.set("v", ">", ">gv") |
| 17 | +vim.keymap.set("v", "<", "<gv") |
| 18 | + |
| 19 | +-- Clear highlights |
| 20 | +-- I don't use this anymore because I have `hlsearch` set to false |
| 21 | +-- Also, <leader>h is used by Harpoon |
| 22 | +-- vim.keymap.set("n", "<leader>h", vim.cmd.nohl, { desc = "Remove highlight" }) |
| 23 | +vim.keymap.set("n", "<esc>", vim.cmd.nohl) |
| 24 | + |
| 25 | +-- Move highlighted text around |
| 26 | +vim.keymap.set("v", "J", ":m '>+1<cr>gv=gv") |
| 27 | +vim.keymap.set("v", "K", ":m '<-2<cr>gv=gv") |
| 28 | + |
| 29 | +-- Keep cursor in place when joining lines |
| 30 | +vim.keymap.set("n", "J", "mzJ`z") |
| 31 | + |
| 32 | +-- Keep cursor vertically centered when scrolling the buffer |
| 33 | +vim.keymap.set("n", "<c-d>", "<c-d>zz") |
| 34 | +vim.keymap.set("n", "<c-u>", "<c-u>zz") |
| 35 | + |
| 36 | +-- Keep search term in the vertical center of the screen when jumping with n and N |
| 37 | +vim.keymap.set("n", "n", "nzzzv") |
| 38 | +vim.keymap.set("n", "N", "Nzzzv") |
| 39 | + |
| 40 | +-- Deleting with x and X should go to the black hole register |
| 41 | +vim.keymap.set("n", "x", '"_x') |
| 42 | +vim.keymap.set("n", "X", '"_X') |
| 43 | + |
| 44 | +-- Paste from system clipboard |
| 45 | +vim.keymap.set("n", "<localleader>p", '"*p', { desc = "Paste from system clipboard" }) |
| 46 | +vim.keymap.set("n", "<localleader>P", '"*P', { desc = "Paste from system clipboard" }) |
| 47 | + |
| 48 | +-- Yank to system clipboard |
| 49 | +vim.keymap.set({ "n", "v" }, "<localleader>y", '"+y', { desc = "Yank to system clipboard" }) |
| 50 | +vim.keymap.set("n", "<localleader>Y", '"+Y', { desc = "Yank to system clipboard" }) |
| 51 | + |
| 52 | +-- Paste without losing original copied term |
| 53 | +vim.keymap.set("x", "<localleader>p", '"_dP', { desc = "Keep original term when pasting" }) |
| 54 | + |
| 55 | +-- Make Y work like C and D |
| 56 | +vim.keymap.set("n", "Y", "yg$") |
| 57 | + |
| 58 | +-- Delete to void register |
| 59 | +vim.keymap.set({ "n", "v" }, "<localleader>d", '"_d', { desc = "Delete to black hole register" }) |
| 60 | + |
| 61 | +-- Make Q a no-op |
| 62 | +vim.keymap.set("n", "Q", "<nop>") |
| 63 | + |
| 64 | +-- Replace term under cursor |
| 65 | +vim.keymap.set( |
| 66 | + "n", |
| 67 | + "<leader>rp", |
| 68 | + [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]], |
| 69 | + { desc = "Replace via Substitution" } |
| 70 | +) |
| 71 | + |
| 72 | +-- Buffer keymaps |
| 73 | +vim.keymap.set("n", "<leader>bc", vim.cmd.bdelete, { desc = "Close buffer" }) |
| 74 | +vim.keymap.set("n", "<leader>bn", vim.cmd.bnext, { desc = "Next buffer" }) |
| 75 | +vim.keymap.set("n", "<leader>bp", vim.cmd.bprevious, { desc = "Previous buffer" }) |
| 76 | +vim.keymap.set("n", "<leader>bl", "<cmd>BufferLinePick<cr>", { desc = "Pick buffer from list" }) |
| 77 | +vim.keymap.set("n", "<leader>bL", "<cmd>BufferLinePickClose<cr>", { desc = "Close buffer from list" }) |
| 78 | +vim.keymap.set("n", "[b", "<cmd>BufferLineCyclePrev<cr>", { desc = "Previous buffer" }) |
| 79 | +vim.keymap.set("n", "]b", "<cmd>BufferLineCycleNext<cr>", { desc = "Next buffer" }) |
| 80 | + |
| 81 | +-- Diagnostic keymaps |
| 82 | +vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, { desc = "Previous diagnostic" }) |
| 83 | +vim.keymap.set("n", "]d", vim.diagnostic.goto_next, { desc = "Next diagnostic" }) |
| 84 | +vim.keymap.set("n", "<leader>e", "<cmd>Telescope diagnostics bufnr=0<CR>", { desc = "Show buffer diagnostics" }) |
| 85 | +vim.keymap.set("n", "<leader>q", vim.diagnostic.setloclist, { desc = "Open diagnostics list" }) |
| 86 | + |
| 87 | +-- Fold keymaps |
| 88 | +local toggleFoldColumn = function() |
| 89 | + if vim.api.nvim_get_option_value("foldcolumn", {}) == "0" then |
| 90 | + vim.cmd("set foldcolumn=1") |
| 91 | + else |
| 92 | + vim.cmd("set foldcolumn=0") |
| 93 | + end |
| 94 | + vim.api.nvim_echo({ { "Fold column is set to " .. vim.api.nvim_get_option_value("foldcolumn", {}) } }, false, {}) |
| 95 | +end |
| 96 | + |
| 97 | +vim.keymap.set("n", "<space>z", toggleFoldColumn, { desc = "Toggle fold" }) |
| 98 | + |
| 99 | +-- Diffview keymaps |
| 100 | +local toggleDiffview = function() |
| 101 | + if vim.bo.filetype == "DiffviewFiles" then |
| 102 | + vim.cmd("DiffviewClose") |
| 103 | + else |
| 104 | + vim.cmd("DiffviewOpen") |
| 105 | + end |
| 106 | +end |
| 107 | +vim.keymap.set("n", "<leader>gd", toggleDiffview, { desc = "Toggle diffview" }) |
| 108 | +-- See :h wildcharm for why <C-Z> is used |
| 109 | +vim.keymap.set("n", "<leader>gD", ":Diffview<C-Z>", { desc = "Trigger :Diffview in command line" }) |
| 110 | + |
| 111 | +-- Flash keymaps |
| 112 | +vim.keymap.set("n", "<leader>jf", function() |
| 113 | + require("flash").jump() |
| 114 | +end, { desc = "Flash jump" }) |
| 115 | +vim.keymap.set("n", "<leader>jt", function() |
| 116 | + require("flash").treesitter() |
| 117 | +end, { desc = "Flash current node" }) |
| 118 | +vim.keymap.set("n", "<leader>jr", function() |
| 119 | + require("flash").treesitter_search() |
| 120 | +end, { desc = "Flash search current view" }) |
0 commit comments