1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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>s", group = "search" },
{
mode = { "n", "v" },
{ "<leader>g", group = "git" },
{ "<leader>gh", group = "hunk" },
{ "<leader>S", group = "surround" },
},
})
end,
},
}
|