diff options
| author | bh <qn+git@excalibur.computer> | 2026-03-24 14:59:40 +0800 |
|---|---|---|
| committer | bh <qn+git@excalibur.computer> | 2026-03-24 14:59:40 +0800 |
| commit | eb838cedbd3dad58b8a6cf10542abc3918b83b10 (patch) | |
| tree | dec0a6785e39f12a05fac4b753722434d26eebe8 /lua/config | |
| parent | c929e7ecf10417875b5080f1f773c2a8ae696308 (diff) | |
Add multicursor mode
Diffstat (limited to 'lua/config')
| -rw-r--r-- | lua/config/multicursor.lua | 58 |
1 files changed, 58 insertions, 0 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 |
