neovimconfig/lua/plugin/treesitter-textobjects.lua
2025-02-23 22:30:52 +01:00

68 lines
3.1 KiB
Lua

return {
{
"nvim-treesitter/nvim-treesitter-textobjects",
dependencies = { "nvim-treesitter/nvim-treesitter" },
opts = {
textobjects = {
select = {
enable = true,
-- Automatically jump forward to textobj, similar to targets.vim
lookahead = true,
keymaps = {
-- You can use the capture groups defined in textobjects.scm
["af"] = "@function.outer",
["if"] = "@function.inner",
["ap"] = "@parameter.outer",
["ip"] = "@parameter.inner",
["ac"] = "@comment.outer",
["aS"] = "@statement.outer",
["ae"] = "@block.outer",
["al"] = "@loop.outer",
["il"] = "@loop.inner",
["ar"] = "@return.outer",
["ir"] = "@return.inner",
["ia"] = "@assignment.rhs",
["aa"] = "@assignment.inner",
["i?"] = "@conditional.inner",
["a?"] = "@conditional.outer",
["in"] = "@number.inner",
["iC"] = "@class.inner",
["aC"] = "@class.outer",
["ig"] = "@call.inner",
["ag"] = "@call.outer",
-- You can also use captures from other query groups like `locals.scm`
["as"] = { query = "@scope", query_group = "locals", desc = "Select language scope" },
},
-- You can choose the select mode (default is charwise 'v')
--
-- Can also be a function which gets passed a table with the keys
-- * query_string: eg '@function.inner'
-- * method: eg 'v' or 'o'
-- and should return the mode ('v', 'V', or '<c-v>') or a table
-- mapping query_strings to modes.
selection_modes = {
['@parameter.outer'] = 'v', -- charwise
['@function.outer'] = 'V', -- linewise
},
-- If you set this to `true` (default is `false`) then any textobject is
-- extended to include preceding or succeeding whitespace. Succeeding
-- whitespace has priority in order to act similarly to eg the built-in
-- `ap`.
--
-- Can also be a function which gets passed a table with the keys
-- * query_string: eg '@function.inner'
-- * selection_mode: eg 'v'
-- and should return true or false
include_surrounding_whitespace = false,
},
},
},
config = function(_, opts)
require("nvim-treesitter.configs").setup(opts)
end,
}
}