Files
lux/modules/capabilities/neovim/lua-config/lua/plugins/editing.lua
T
2026-09-06 04:03:54 +02:00

141 lines
4.2 KiB
Lua

require("lz.n").load({
{
"mini.nvim",
event = "VimEnter",
after = function()
require("mini.ai").setup({ n_lines = 500 })
require("mini.surround").setup()
require("mini.pairs").setup()
local icons = require("mini.icons")
icons.setup()
icons.mock_nvim_web_devicons()
end,
},
{
"guess-indent.nvim",
event = { "BufReadPre", "BufNewFile" },
after = function()
require("guess-indent").setup({})
end,
},
{
"nvim-treesitter",
event = "FileType",
after = function()
require("nvim-treesitter").setup({})
vim.api.nvim_create_autocmd("FileType", {
group = vim.api.nvim_create_augroup("lux-treesitter", { clear = true }),
callback = function(args)
if vim.bo[args.buf].buftype ~= "" then
return
end
if pcall(vim.treesitter.start, args.buf) then
vim.bo[args.buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
end
end,
})
end,
},
{
"nvim-treesitter-textobjects",
event = "FileType",
after = function()
require("nvim-treesitter-textobjects").setup({
select = { lookahead = true },
})
local select = require("nvim-treesitter-textobjects.select")
local move = require("nvim-treesitter-textobjects.move")
local objects = {
{ "if", "@function.inner", "Select inner function" },
{ "af", "@function.outer", "Select outer function" },
{ "ic", "@class.inner", "Select inner class" },
{ "ac", "@class.outer", "Select outer class" },
{ "ia", "@parameter.inner", "Select inner parameter" },
{ "aa", "@parameter.outer", "Select outer parameter" },
{ "ii", "@conditional.inner", "Select inner conditional" },
{ "ai", "@conditional.outer", "Select outer conditional" },
{ "il", "@loop.inner", "Select inner loop" },
{ "al", "@loop.outer", "Select outer loop" },
{ "ib", "@block.inner", "Select inner block" },
{ "ab", "@block.outer", "Select outer block" },
}
for _, object in ipairs(objects) do
vim.keymap.set({ "o", "x" }, object[1], function()
select.select_textobject(object[2], "textobjects")
end, { desc = object[3] })
end
local motions = {
{ "[f", move.goto_previous_start, "@function.outer", "Previous function" },
{ "]f", move.goto_next_start, "@function.outer", "Next function" },
{ "[c", move.goto_previous_start, "@class.outer", "Previous class" },
{ "]c", move.goto_next_start, "@class.outer", "Next class" },
{ "[a", move.goto_previous_start, "@parameter.inner", "Previous parameter" },
{ "]a", move.goto_next_start, "@parameter.inner", "Next parameter" },
}
for _, motion in ipairs(motions) do
vim.keymap.set({ "n", "x", "o" }, motion[1], function()
motion[2](motion[3], "textobjects")
end, { desc = motion[4] })
end
end,
},
{
"rainbow-delimiters.nvim",
event = "FileType",
after = function()
require("rainbow-delimiters.setup").setup({})
end,
},
{
"nvim-ts-autotag",
ft = { "svelte", "astro", "html", "javascriptreact", "typescriptreact" },
after = function()
local enabled = { enable_close = true, enable_rename = true }
require("nvim-ts-autotag").setup({
opts = { enable_close = false, enable_rename = false },
per_filetype = {
svelte = enabled,
astro = enabled,
html = enabled,
javascriptreact = enabled,
typescriptreact = enabled,
},
})
end,
},
{
"grug-far.nvim",
cmd = "GrugFar",
keys = {
{
"<leader>cR",
function()
require("grug-far").open({
prefills = {
search = vim.fn.expand("<cword>"),
paths = require("project").root(),
},
})
end,
desc = "Replace across project",
},
{
"<leader>cR",
function()
require("grug-far").with_visual_selection({
prefills = { paths = require("project").root() },
})
end,
mode = "x",
desc = "Replace selection across project",
},
},
},
})