From 4aaf17eddf8ab34fd26936e94211f7b42ca48f7b Mon Sep 17 00:00:00 2001 From: xesc Date: Fri, 26 Jul 2024 14:30:59 +0200 Subject: [PATCH] add treesitterr-textobjects plugin --- lua/plugin/treesitter-textobjects.lua | 68 +++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 lua/plugin/treesitter-textobjects.lua diff --git a/lua/plugin/treesitter-textobjects.lua b/lua/plugin/treesitter-textobjects.lua new file mode 100644 index 0000000..dac0dda --- /dev/null +++ b/lua/plugin/treesitter-textobjects.lua @@ -0,0 +1,68 @@ +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 '') 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, + } +}