nvim/lua/config/plugins/mini.lua

128 lines
3.0 KiB
Lua
Raw Normal View History

2022-12-31 17:43:31 +01:00
local mini = {
'echasnovski/mini.nvim',
event = 'VeryLazy',
}
local specs = { mini, 'JoosepAlviste/nvim-ts-context-commentstring' }
function mini.surround()
require('mini.surround').setup {
mappings = {
add = 'gza', -- Add surrounding in Normal and Visual modes
delete = 'gzd', -- Delete surrounding
find = 'gzf', -- Find surrounding (to the right)
find_left = 'gzF', -- Find surrounding (to the left)
highlight = 'gzh', -- Highlight surrounding
replace = 'gzr', -- Replace surrounding
update_n_lines = 'gzn', -- Update `n_lines`
},
}
end
function mini.jump()
require('mini.jump').setup {}
end
function mini.pairs()
require('mini.pairs').setup {}
end
function mini.comment()
require('mini.comment').setup {
hooks = {
pre = function()
require('ts_context_commentstring.internal').update_commentstring {}
end,
},
}
end
function mini.ai()
local ai = require 'mini.ai'
require('mini.ai').setup {
n_lines = 500,
-- search_method = "cover_or_next",
custom_textobjects = {
o = ai.gen_spec.treesitter({
a = { '@block.outer', '@conditional.outer', '@loop.outer' },
i = { '@block.inner', '@conditional.inner', '@loop.inner' },
}, {}),
f = ai.gen_spec.treesitter({ a = '@function.outer', i = '@function.inner' }, {}),
c = ai.gen_spec.treesitter({ a = '@class.outer', i = '@class.inner' }, {}),
},
}
local map = function(text_obj, desc)
for _, side in ipairs { 'left', 'right' } do
for dir, d in pairs { prev = '[', next = ']' } do
local lhs = d .. (side == 'right' and text_obj:upper() or text_obj:lower())
for _, mode in ipairs { 'n', 'x', 'o' } do
vim.keymap.set(mode, lhs, function()
ai.move_cursor(side, 'a', text_obj, { search_method = dir })
end, {
desc = dir .. ' ' .. desc,
})
end
end
end
end
map('f', 'function')
map('c', 'class')
map('o', 'block')
end
function mini.config()
-- M.jump()
mini.surround()
-- mini.ai()
-- mini.pairs()
mini.comment()
mini.jump()
-- mini.animate()
end
function mini.animate()
local mouse_scrolled = false
for _, scroll in ipairs { 'Up', 'Down' } do
local key = '<ScrollWheel' .. scroll .. '>'
vim.keymap.set('', key, function()
mouse_scrolled = true
return key
end, { remap = true, expr = true })
end
local animate = require 'mini.animate'
vim.go.winwidth = 20
vim.go.winminwidth = 5
animate.setup {
resize = {
timing = animate.gen_timing.linear { duration = 50, unit = 'total' },
},
scroll = {
timing = animate.gen_timing.linear { duration = 100, unit = 'total' },
subscroll = animate.gen_subscroll.equal {
predicate = function(total_scroll)
if mouse_scrolled then
mouse_scrolled = false
return false
end
return total_scroll > 1
end,
},
},
}
end
function mini.init()
vim.keymap.set('n', '<leader>bd', function()
require('mini.bufremove').delete(0, false)
end)
vim.keymap.set('n', '<leader>bD', function()
require('mini.bufremove').delete(0, true)
end)
end
return specs