diff options
Diffstat (limited to 'lua/config/plugins/extra.lua')
-rw-r--r-- | lua/config/plugins/extra.lua | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/lua/config/plugins/extra.lua b/lua/config/plugins/extra.lua index aba060b..2f7bf9c 100644 --- a/lua/config/plugins/extra.lua +++ b/lua/config/plugins/extra.lua @@ -1,11 +1,105 @@ return { { + "multicursor-nvim", + event = "DeferredUIEnter", + after = function(_) + local mc = require("multicursor-nvim") + mc.setup({ + signs = false, + }) + + -- Keybindings would be a lot better as <localleader> + local map = vim.keymap.set + + -- NOTE: this required for "repeatable" commands + -- I'd like to use `2<localleader>cn` for example (and that doesn't work out of box) + local map_rep = function(modes, bind, action) + map(modes, bind, function() + for _ = 1, vim.v.count1, 1 do + action() + end + end) + end + + -- stylua: ignore start + map({ "n", "x" }, "<localleader><localleader>", function() mc.clearCursors() end) + map({ "n", "x" }, "<localleader>R", function() mc.restoreCursors() end) + + map_rep({ "n", "x" }, "<localleader>j", function() mc.lineAddCursor(1) end) + map_rep({ "n", "x" }, "<localleader>k", function() mc.lineAddCursor(-1) end) + map_rep({ "n", "x" }, "<localleader>J", function() mc.lineSkipCursor(1) end) + map_rep({ "n", "x" }, "<localleader>K", function() mc.lineSkipCursor(-1) end) + + map_rep({ "n", "x" }, "<localleader>cn", function() mc.matchAddCursor(1) end) + map_rep({ "n", "x" }, "<localleader>cN", function() mc.matchAddCursor(-1) end) + map_rep({ "n", "x" }, "<localleader>cs", function() mc.matchSkipCursor(1) end) + map_rep({ "n", "x" }, "<localleader>cS", function() mc.matchSkipCursor(-1) end) + map({ "n", "x" }, "<localleader>cM", mc.matchAllAddCursors) + map("x", "<localleader>m", mc.matchCursors) + map("x", "<localleader>s", mc.splitCursors) + + -- map("n", "<localleader>g", mc.addCursorOperator) + map({ "n", "x" }, "<localleader>g", mc.operator) + -- stylua: ignore end + + -- Customize how cursors look. + local hl = vim.api.nvim_set_hl + hl(0, "MultiCursorCursor", { reverse = true }) + hl(0, "MultiCursorVisual", { link = "Visual" }) + hl(0, "MultiCursorSign", { link = "SignColumn" }) + hl(0, "MultiCursorMatchPreview", { link = "Search" }) + hl(0, "MultiCursorDisabledCursor", { reverse = true }) + hl(0, "MultiCursorDisabledVisual", { link = "Visual" }) + hl(0, "MultiCursorDisabledSign", { link = "SignColumn" }) + end, + }, + { + "yanky.nvim", + event = "DeferredUIEnter", + after = function(_) + require("yanky").setup({ + highlight = { timer = 150 }, + system_clipboard = { + sync_with_ring = true, + }, + }) + end, + keys = { + { "y", "<Plug>(YankyYank)", mode = { "n", "x" }, desc = "Yank Text" }, + { "p", "<Plug>(YankyPutAfter)", mode = { "n", "x" }, desc = "Put Text After Cursor" }, + { "P", "<Plug>(YankyPutBefore)", mode = { "n", "x" }, desc = "Put Text Before Cursor" }, + { "gp", "<Plug>(YankyGPutAfter)", mode = { "n", "x" }, desc = "Put Text After Selection" }, + { "gP", "<Plug>(YankyGPutBefore)", mode = { "n", "x" }, desc = "Put Text Before Selection" }, + { "[y", "<Plug>(YankyCycleForward)", desc = "Cycle Forward Through Yank History" }, + { "]y", "<Plug>(YankyCycleBackward)", desc = "Cycle Backward Through Yank History" }, + { "]p", "<Plug>(YankyPutIndentAfterLinewise)", desc = "Put Indented After Cursor (Linewise)" }, + { "[p", "<Plug>(YankyPutIndentBeforeLinewise)", desc = "Put Indented Before Cursor (Linewise)" }, + { "]P", "<Plug>(YankyPutIndentAfterLinewise)", desc = "Put Indented After Cursor (Linewise)" }, + { "[P", "<Plug>(YankyPutIndentBeforeLinewise)", desc = "Put Indented Before Cursor (Linewise)" }, + { ">p", "<Plug>(YankyPutIndentAfterShiftRight)", desc = "Put and Indent Right" }, + { "<p", "<Plug>(YankyPutIndentAfterShiftLeft)", desc = "Put and Indent Left" }, + { ">P", "<Plug>(YankyPutIndentBeforeShiftRight)", desc = "Put Before and Indent Right" }, + { "<P", "<Plug>(YankyPutIndentBeforeShiftLeft)", desc = "Put Before and Indent Left" }, + { "=p", "<Plug>(YankyPutAfterFilter)", desc = "Put After Applying a Filter" }, + { "=P", "<Plug>(YankyPutBeforeFilter)", desc = "Put Before Applying a Filter" }, + }, + }, + { "which-key.nvim", event = "DeferredUIEnter", after = function(_) require("which-key").setup() require("which-key").add({ + { + "<leader>w", + group = "windows", + proxy = "<C-w>", + expand = function() + return require("which-key.extras").expand.win() + end, + }, + { "<leader>s", group = "search" }, { @@ -17,4 +111,15 @@ return { }) end, }, + { + "oil.nvim", + -- NOTE: lazy loading is not recommended + event = "DeferredUIEnter", + after = function(_) + require("oil").setup() + end, + keys = { + { "-", "<CMD>Oil<CR>", { desc = "Open parent directory" } }, + }, + }, } |