From eb838cedbd3dad58b8a6cf10542abc3918b83b10 Mon Sep 17 00:00:00 2001 From: bh Date: Tue, 24 Mar 2026 14:59:40 +0800 Subject: Add multicursor mode --- lua/config/multicursor.lua | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 lua/config/multicursor.lua (limited to 'lua/config') 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' }, '', function() + mc.lineAddCursor(-1) + end, { desc = 'Add cursor above' }) + set({ 'n', 'x' }, '', function() + mc.lineAddCursor(1) + end, { desc = 'Add cursor below' }) + set({ 'n', 'x' }, '', function() + mc.lineSkipCursor(-1) + end, { desc = 'Skip cursor above' }) + set({ 'n', 'x' }, '', function() + mc.lineSkipCursor(1) + end, { desc = 'Skip cursor below' }) + + set({ 'n', 'x' }, 'n', function() + mc.matchAddCursor(1) + end, { desc = 'Add next match cursor' }) + set({ 'n', 'x' }, 'N', function() + mc.matchAddCursor(-1) + end, { desc = 'Add previous match cursor' }) + set({ 'n', 'x' }, 's', function() + mc.matchSkipCursor(1) + end, { desc = 'Skip next match cursor' }) + set({ 'n', 'x' }, 'S', function() + mc.matchSkipCursor(-1) + end, { desc = 'Skip previous match cursor' }) + + set('n', '', mc.handleMouse, { desc = 'Toggle mouse cursor' }) + set('n', '', mc.handleMouseDrag, { desc = 'Drag mouse cursor' }) + set('n', '', mc.handleMouseRelease, { desc = 'Release mouse cursor' }) + set({ 'n', 'x' }, '', mc.toggleCursor, { desc = 'Toggle multicursor' }) + + mc.addKeymapLayer(function(layer_set) + layer_set({ 'n', 'x' }, '', mc.prevCursor) + layer_set({ 'n', 'x' }, '', mc.nextCursor) + layer_set({ 'n', 'x' }, 'x', mc.deleteCursor) + layer_set('n', '', 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 -- cgit v1.2.3