diff --git a/.config/nvim/lua/plugins/multicursor.lua b/.config/nvim/lua/plugins/multicursor.lua index 2b796733..eec55225 100644 --- a/.config/nvim/lua/plugins/multicursor.lua +++ b/.config/nvim/lua/plugins/multicursor.lua @@ -5,6 +5,8 @@ return { local mc = require("multicursor-nvim") mc.setup() local set = vim.keymap.set + + -- Add or skip cursor above/below the main cursor. set({ "n", "v" }, "", function() mc.lineAddCursor(-1) end) @@ -17,5 +19,96 @@ return { set({ "n", "v" }, "", function() mc.lineSkipCursor(1) end) + + -- Add or skip adding a new cursor by matching word/selection + -- set({ "n", "v" }, "n", function() + -- mc.matchAddCursor(1) + -- end) + set({ "n", "v" }, "s", function() + mc.matchSkipCursor(1) + end) + set({ "n", "v" }, "N", function() + mc.matchAddCursor(-1) + end) + set({ "n", "v" }, "S", function() + mc.matchSkipCursor(-1) + end) + + -- Add all matches in the document + set({ "n", "v" }, "A", mc.matchAllAddCursors) + + -- You can also add cursors with any motion you prefer: + -- set("n", "", function() + -- mc.addCursor("w") + -- end) + -- set("n", "", function() + -- mc.skipCursor("w") + -- end) + + -- Rotate the main cursor. + set({ "n", "v" }, "", mc.nextCursor) + set({ "n", "v" }, "", mc.prevCursor) + + -- Delete the main cursor. + set({ "n", "v" }, "x", mc.deleteCursor) + + -- Add and remove cursors with control + left click. + set("n", "", mc.handleMouse) + + -- Easy way to add and remove cursors using the main cursor. + set({ "n", "v" }, "", mc.toggleCursor) + + -- Clone every cursor and disable the originals. + set({ "n", "v" }, "", mc.duplicateCursors) + + set("n", "", function() + if not mc.cursorsEnabled() then + mc.enableCursors() + print("enabling") + elseif mc.hasCursors() then + mc.clearCursors() + print("clearing") + else + -- Default handler. + print("def") + end + end) + + -- bring back cursors if you accidentally clear them + set("n", "gv", mc.restoreCursors) + + -- Align cursor columns. + set("n", "a", mc.alignCursors) + + -- Split visual selections by regex. + set("v", "S", mc.splitCursors) + + -- Append/insert for each line of visual selections. + set("v", "I", mc.insertVisual) + set("v", "A", mc.appendVisual) + + -- match new cursors within visual selections by regex. + set("v", "M", mc.matchCursors) + + -- Rotate visual selection contents. + set("v", "t", function() + mc.transposeCursors(1) + end) + set("v", "T", function() + mc.transposeCursors(-1) + end) + + -- Jumplist support + set({ "v", "n" }, "", mc.jumpForward) + set({ "v", "n" }, "", mc.jumpBackward) + + -- Customize how cursors look. + local hl = vim.api.nvim_set_hl + hl(0, "MultiCursorCursor", { link = "Cursor" }) + hl(0, "MultiCursorVisual", { link = "Visual" }) + hl(0, "MultiCursorSign", { link = "SignColumn" }) + hl(0, "MultiCursorDisabledCursor", { link = "Visual" }) + hl(0, "MultiCursorDisabledVisual", { link = "Visual" }) + hl(0, "MultiCursorDisabledSign", { link = "SignColumn" }) end, }