multicursor (good this time)

This commit is contained in:
Michael Chalupiak 2025-12-26 11:40:48 -05:00
parent f60dd72912
commit ef1981d06b
2 changed files with 109 additions and 82 deletions

View File

@ -8,6 +8,14 @@ return {
config = function() config = function()
require'nvim-treesitter.configs'.setup { require'nvim-treesitter.configs'.setup {
textobjects = { textobjects = {
select = {
enable = true,
lookahead = true,
keymaps = {
["af"] = "@function.outer",
["if"] = "@function.inner",
}
},
move = { move = {
enable = true, enable = true,
set_jumps = false, set_jumps = false,

View File

@ -157,6 +157,10 @@ return {
-- `z` key -- `z` key
{ mode = 'n', keys = 'z' }, { mode = 'n', keys = 'z' },
{ mode = 'x', keys = 'z' }, { mode = 'x', keys = 'z' },
-- Localleader
{ mode = 'n', keys = '<Localleader>'},
{ mode = 'x', keys = '<Localleader>'},
}, },
clues = { clues = {
@ -189,6 +193,8 @@ return {
triggers = { triggers = {
{ 'g', mode = { 'n', 'x' } }, { 'g', mode = { 'n', 'x' } },
}, },
skip_confirm_for_simple_edits = true,
prompt_save_on_select_new_entry = false,
}, },
-- Optional dependencies -- Optional dependencies
dependencies = { "nvim-tree/nvim-web-devicons" }, -- use if you prefer nvim-web-devicons dependencies = { "nvim-tree/nvim-web-devicons" }, -- use if you prefer nvim-web-devicons
@ -245,85 +251,98 @@ return {
event = 'VeryLazy', event = 'VeryLazy',
}, },
-- { {
-- "jake-stewart/multicursor.nvim", "jake-stewart/multicursor.nvim",
-- branch = "1.0", branch = "1.0",
-- config = function() config = function()
-- local mc = require("multicursor-nvim") local mc = require("multicursor-nvim")
-- mc.setup() mc.setup()
--
-- local set = vim.keymap.set local set = vim.keymap.set
--
-- -- Add or skip cursor above/below the main cursor. -- Add or skip cursor above/below the main cursor.
-- set({"n", "x"}, "<up>", function() mc.lineAddCursor(-1) end) set({"n", "x"}, "<localleader>k", function() mc.lineAddCursor(-1) end, { desc = "Add cursor to previous line" })
-- set({"n", "x"}, "<down>", function() mc.lineAddCursor(1) end) set({"n", "x"}, "<localleader>j", function() mc.lineAddCursor(1) end, { desc = "Add cursor to next line" })
-- -- set({"n", "x"}, "<leader><up>", function() mc.lineSkipCursor(-1) end) set({"n", "x"}, "<up>", function() mc.lineAddCursor(-1) end, { desc = "Add cursor to previous line" })
-- -- set({"n", "x"}, "<leader><down>", function() mc.lineSkipCursor(1) end) set({"n", "x"}, "<down>", function() mc.lineAddCursor(1) end, { desc = "Add cursor to next line" })
-- set({"n", "x"}, "<localleader>K", function() mc.lineSkipCursor(-1) end, { desc = "Skip previous line to add cursor" })
-- -- Add or skip adding a new cursor by matching word/selection set({"n", "x"}, "<localleader>J", function() mc.lineSkipCursor(1) end, { desc = "Skip next line to add cursor" })
-- -- set({"n", "x"}, "<leader>n", function() mc.matchAddCursor(1) end)
-- -- set({"n", "x"}, "<leader>s", function() mc.matchSkipCursor(1) end) -- Add or skip adding a new cursor by matching word/selection
-- -- set({"n", "x"}, "<leader>N", function() mc.matchAddCursor(-1) end) set({"n", "x"}, "<localleader>n", function() mc.matchAddCursor(1) end, { desc = "Add cursor to next currently selected word" })
-- -- set({"n", "x"}, "<leader>S", function() mc.matchSkipCursor(-1) end) set({"n", "x"}, "<localleader>s", function() mc.matchSkipCursor(1) end, { desc = "Skip next instance of current word to add cursor" })
-- set({"n", "x"}, "<localleader>N", function() mc.matchAddCursor(-1) end, { desc = "Add cursor to previous currently selected word" })
-- -- Add cursor at next argument treesitter set({"n", "x"}, "<localleader>S", function() mc.matchSkipCursor(-1) end, { desc = "Skip previous instance of current word to add cursor" })
-- set({'n', 'x'}, ']A', function()
-- if vim.v.count < 1 then set({"n", "x"}, "<localleader>m", mc.operator, { desc = "Add cursors to text object" })
-- mc.addCursor(']a') set("n", "<localleader>s", function()
-- else vim.ui.input({prompt = "Match: "}, function(input) mc.operator({pattern = input}) end)
-- for i=1, vim.v.count - 1 do end, { desc = "Add cursors to regex match inside text object " })
-- mc.addCursor(']a') set("n", "<localleader>*", function()
-- end mc.operator({pattern = vim.fn.expand("<cword>")})
-- end end, { desc = "Add cursors to current word inside text object" })
-- end, { desc = 'Create multicursor on next argument'}) set("x", "<localleader>s", mc.matchCursors, { desc = "Add cursors to regex match inside visual selection" })
-- set({'n', 'x'}, '[A', function()
-- if vim.v.count < 1 then -- Add cursor at next argument treesitter
-- mc.addCursor('[a') set({'n', 'x'}, ']A', function()
-- else if vim.v.count < 1 then
-- for i=1, vim.v.count - 1 do mc.addCursor(']a')
-- mc.addCursor('[a') else
-- end for _=1, vim.v.count - 1 do
-- end mc.addCursor(']a')
-- end, { desc = 'Create multicursor on previous argument'}) end
-- end
-- -- Add and remove cursors with control + left click. end, { desc = 'Create multicursor on next argument'})
-- set("n", "<c-leftmouse>", mc.handleMouse) set({'n', 'x'}, '[A', function()
-- set("n", "<c-leftdrag>", mc.handleMouseDrag) if vim.v.count < 1 then
-- set("n", "<c-leftrelease>", mc.handleMouseRelease) mc.addCursor('[a')
-- else
-- -- Disable and enable cursors. for _=1, vim.v.count - 1 do
-- set({"n", "x"}, "<c-q>", mc.toggleCursor) mc.addCursor('[a')
-- end
-- -- Mappings defined in a keymap layer only apply when there are end
-- -- multiple cursors. This lets you have overlapping mappings. end, { desc = 'Create multicursor on previous argument'})
-- mc.addKeymapLayer(function(layerSet)
-- -- Add and remove cursors with control + left click.
-- -- Select a different cursor as the main one. set("n", "<c-leftmouse>", mc.handleMouse)
-- layerSet({"n", "x"}, "<left>", mc.prevCursor) set("n", "<c-leftdrag>", mc.handleMouseDrag)
-- layerSet({"n", "x"}, "<right>", mc.nextCursor) set("n", "<c-leftrelease>", mc.handleMouseRelease)
--
-- -- Delete the main cursor. -- Disable and enable cursors.
-- layerSet({"n", "x"}, "<leader>x", mc.deleteCursor) set({"n", "x"}, "<c-q>", mc.toggleCursor, { desc = "Toggle multiple cursors" })
--
-- -- Enable and clear cursors using escape. -- Mappings defined in a keymap layer only apply when there are
-- layerSet("n", "<esc>", function() -- multiple cursors. This lets you have overlapping mappings.
-- if not mc.cursorsEnabled() then mc.addKeymapLayer(function(layerSet)
-- mc.enableCursors()
-- else -- Select a different cursor as the main one.
-- mc.clearCursors() layerSet({"n", "x"}, "<localleader>h", mc.prevCursor, { desc = "Make previous cursor primary" })
-- end layerSet({"n", "x"}, "<localleader>l", mc.nextCursor, { desc = "Make next cursor primary" })
-- end) layerSet({"n", "x"}, "<left>", mc.prevCursor, { desc = "Make previous cursor primary" })
-- end) layerSet({"n", "x"}, "<right>", mc.nextCursor, { desc = "Make next cursor primary" })
--
-- -- Customize how cursors look. -- Delete the main cursor.
-- local hl = vim.api.nvim_set_hl layerSet({"n", "x"}, "<localleader>x", mc.deleteCursor)
-- hl(0, "MultiCursorCursor", { reverse = true })
-- hl(0, "MultiCursorVisual", { link = "Visual" }) -- Enable and clear cursors using escape.
-- hl(0, "MultiCursorSign", { link = "SignColumn"}) layerSet("n", "<esc>", function()
-- hl(0, "MultiCursorMatchPreview", { link = "Search" }) if not mc.cursorsEnabled() then
-- hl(0, "MultiCursorDisabledCursor", { reverse = true }) mc.enableCursors()
-- hl(0, "MultiCursorDisabledVisual", { link = "Visual" }) else
-- hl(0, "MultiCursorDisabledSign", { link = "SignColumn"}) mc.clearCursors()
-- end end
-- }, end)
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
},
} }