92 lines
3.4 KiB
Lua
92 lines
3.4 KiB
Lua
return {
|
|
{
|
|
"nvim-treesitter/nvim-treesitter",
|
|
branch = "main",
|
|
build = ":TSUpdate",
|
|
config = function()
|
|
require("nvim-treesitter").setup({})
|
|
require("nvim-treesitter").install({
|
|
"bash", "blade", "c", "comment", "css", "diff", "dockerfile",
|
|
"fish", "gitcommit", "gitignore", "go", "gomod", "gosum", "gowork",
|
|
"html", "ini", "javascript", "jsdoc", "json", "lua", "luadoc",
|
|
"luap", "make", "markdown", "markdown_inline", "nginx", "nix",
|
|
"proto", "python", "query", "regex", "rust", "scss", "sql",
|
|
"terraform", "toml", "tsx", "typescript", "vim", "vimdoc",
|
|
"xml", "yaml", "zig",
|
|
})
|
|
|
|
vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()"
|
|
vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
|
|
|
vim.api.nvim_create_autocmd("FileType", {
|
|
pattern = { "*" },
|
|
callback = function()
|
|
local filetype = vim.bo.filetype
|
|
if filetype and filetype ~= "" then
|
|
pcall(vim.treesitter.start)
|
|
end
|
|
end,
|
|
})
|
|
end,
|
|
},
|
|
{
|
|
"nvim-treesitter/nvim-treesitter-textobjects",
|
|
branch = "main",
|
|
dependencies = { "nvim-treesitter/nvim-treesitter" },
|
|
config = function()
|
|
require("nvim-treesitter-textobjects").setup({
|
|
select = {
|
|
enable = true,
|
|
lookahead = true,
|
|
selection_modes = {
|
|
["@parameter.outer"] = "v",
|
|
["@function.outer"] = "V",
|
|
["@class.outer"] = "<c-v>",
|
|
},
|
|
include_surrounding_whitespace = false,
|
|
},
|
|
move = {
|
|
enable = true,
|
|
set_jumps = true,
|
|
},
|
|
})
|
|
|
|
-- SELECT keymaps
|
|
local sel = require("nvim-treesitter-textobjects.select")
|
|
for _, map in ipairs({
|
|
{ { "x", "o" }, "af", "@function.outer" },
|
|
{ { "x", "o" }, "if", "@function.inner" },
|
|
{ { "x", "o" }, "ac", "@class.outer" },
|
|
{ { "x", "o" }, "ic", "@class.inner" },
|
|
{ { "x", "o" }, "aa", "@parameter.outer" },
|
|
{ { "x", "o" }, "ia", "@parameter.inner" },
|
|
{ { "x", "o" }, "ad", "@comment.outer" },
|
|
{ { "x", "o" }, "as", "@statement.outer" },
|
|
}) do
|
|
vim.keymap.set(map[1], map[2], function()
|
|
sel.select_textobject(map[3], "textobjects")
|
|
end, { desc = "Select " .. map[3] })
|
|
end
|
|
|
|
-- MOVE keymaps
|
|
local mv = require("nvim-treesitter-textobjects.move")
|
|
for _, map in ipairs({
|
|
{ { "n", "x", "o" }, "]m", mv.goto_next_start, "@function.outer" },
|
|
{ { "n", "x", "o" }, "[m", mv.goto_previous_start, "@function.outer" },
|
|
{ { "n", "x", "o" }, "]]", mv.goto_next_start, "@class.outer" },
|
|
{ { "n", "x", "o" }, "[[", mv.goto_previous_start, "@class.outer" },
|
|
{ { "n", "x", "o" }, "]M", mv.goto_next_end, "@function.outer" },
|
|
{ { "n", "x", "o" }, "[M", mv.goto_previous_end, "@function.outer" },
|
|
{ { "n", "x", "o" }, "]o", mv.goto_next_start, { "@loop.inner", "@loop.outer" } },
|
|
{ { "n", "x", "o" }, "[o", mv.goto_previous_start, { "@loop.inner", "@loop.outer" } },
|
|
}) do
|
|
local modes, lhs, fn, query = map[1], map[2], map[3], map[4]
|
|
local qstr = (type(query) == "table") and table.concat(query, ",") or query
|
|
vim.keymap.set(modes, lhs, function()
|
|
fn(query, "textobjects")
|
|
end, { desc = "Move to " .. qstr })
|
|
end
|
|
end,
|
|
},
|
|
}
|