summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/config/multicursor.lua58
-rw-r--r--lua/plugins/init.lua11
2 files changed, 68 insertions, 1 deletions
diff --git a/lua/config/multicursor.lua b/lua/config/multicursor.lua
new file mode 100644
index 0000000..329f558
--- /dev/null
+++ b/lua/config/multicursor.lua
@@ -0,0 +1,58 @@
+return function()
+ local mc = require('multicursor-nvim')
+ local set = vim.keymap.set
+
+ mc.setup()
+
+ set({ 'n', 'x' }, '<Up>', function()
+ mc.lineAddCursor(-1)
+ end, { desc = 'Add cursor above' })
+ set({ 'n', 'x' }, '<Down>', function()
+ mc.lineAddCursor(1)
+ end, { desc = 'Add cursor below' })
+ set({ 'n', 'x' }, '<leader><Up>', function()
+ mc.lineSkipCursor(-1)
+ end, { desc = 'Skip cursor above' })
+ set({ 'n', 'x' }, '<leader><Down>', function()
+ mc.lineSkipCursor(1)
+ end, { desc = 'Skip cursor below' })
+
+ set({ 'n', 'x' }, '<leader>n', function()
+ mc.matchAddCursor(1)
+ end, { desc = 'Add next match cursor' })
+ set({ 'n', 'x' }, '<leader>N', function()
+ mc.matchAddCursor(-1)
+ end, { desc = 'Add previous match cursor' })
+ set({ 'n', 'x' }, '<leader>s', function()
+ mc.matchSkipCursor(1)
+ end, { desc = 'Skip next match cursor' })
+ set({ 'n', 'x' }, '<leader>S', function()
+ mc.matchSkipCursor(-1)
+ end, { desc = 'Skip previous match cursor' })
+
+ set('n', '<C-LeftMouse>', mc.handleMouse, { desc = 'Toggle mouse cursor' })
+ set('n', '<C-LeftDrag>', mc.handleMouseDrag, { desc = 'Drag mouse cursor' })
+ set('n', '<C-LeftRelease>', mc.handleMouseRelease, { desc = 'Release mouse cursor' })
+ set({ 'n', 'x' }, '<C-q>', mc.toggleCursor, { desc = 'Toggle multicursor' })
+
+ mc.addKeymapLayer(function(layer_set)
+ layer_set({ 'n', 'x' }, '<Left>', mc.prevCursor)
+ layer_set({ 'n', 'x' }, '<Right>', mc.nextCursor)
+ layer_set({ 'n', 'x' }, '<leader>x', mc.deleteCursor)
+ layer_set('n', '<Esc>', function()
+ if not mc.cursorsEnabled() then
+ mc.enableCursors()
+ else
+ mc.clearCursors()
+ end
+ end)
+ end)
+
+ vim.api.nvim_set_hl(0, 'MultiCursorCursor', { reverse = true })
+ vim.api.nvim_set_hl(0, 'MultiCursorVisual', { link = 'Visual' })
+ vim.api.nvim_set_hl(0, 'MultiCursorSign', { link = 'SignColumn' })
+ vim.api.nvim_set_hl(0, 'MultiCursorMatchPreview', { link = 'Search' })
+ vim.api.nvim_set_hl(0, 'MultiCursorDisabledCursor', { reverse = true })
+ vim.api.nvim_set_hl(0, 'MultiCursorDisabledVisual', { link = 'Visual' })
+ vim.api.nvim_set_hl(0, 'MultiCursorDisabledSign', { link = 'SignColumn' })
+end
diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua
index e5bfa35..0773453 100644
--- a/lua/plugins/init.lua
+++ b/lua/plugins/init.lua
@@ -152,6 +152,16 @@ return {
end,
},
+ -- Multiple Cursors
+ {
+ 'jake-stewart/multicursor.nvim',
+ branch = '1.0',
+ event = 'VeryLazy',
+ config = function()
+ require('config.multicursor')()
+ end,
+ },
+
-- Markdown Rendering
{
'MeanderingProgrammer/render-markdown.nvim',
@@ -180,4 +190,3 @@ return {
"EdenEast/nightfox.nvim"
}
-