summaryrefslogtreecommitdiff
path: root/lua/ben/plugins/treesitter-text-objects.lua
diff options
context:
space:
mode:
authorBenjamin Chausse <benjamin@chausse.xyz>2023-09-24 03:23:52 -0400
committerBenjamin Chausse <benjamin@chausse.xyz>2023-09-24 03:23:52 -0400
commitadbe65a8bd41f17398a985d4c474ba7f907bb5d4 (patch)
treef4ef9f6bd5687edf35b71aaac31ad6604ba36806 /lua/ben/plugins/treesitter-text-objects.lua
Initial commit
Diffstat (limited to 'lua/ben/plugins/treesitter-text-objects.lua')
-rw-r--r--lua/ben/plugins/treesitter-text-objects.lua53
1 files changed, 53 insertions, 0 deletions
diff --git a/lua/ben/plugins/treesitter-text-objects.lua b/lua/ben/plugins/treesitter-text-objects.lua
new file mode 100644
index 0000000..bcf1b92
--- /dev/null
+++ b/lua/ben/plugins/treesitter-text-objects.lua
@@ -0,0 +1,53 @@
+return {
+ "nvim-treesitter/nvim-treesitter-textobjects",
+ event = { "BufReadPost", "BufNewFile" },
+ dependencies = {
+ "nvim-treesitter/nvim-treesitter",
+ },
+ config = function()
+ require("nvim-treesitter.configs").setup({
+ 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
+ ["a="] = { query = "@assignment.outer", desc = "Select outer part of an assignment region" },
+ ["i="] = { query = "@assignment.inner", desc = "Select inner part of an assignment region" },
+
+ ["a:"] = { query = "@parameter.outer", desc = "Select outer part of a parameter/field region" },
+ ["i:"] = { query = "@parameter.inner", desc = "Select inner part of a parameter/field region" },
+
+ ["ai"] = { query = "@conditional.outer", desc = "Select outer part of a conditional region" },
+ ["ii"] = { query = "@conditional.inner", desc = "Select inner part of a conditional region" },
+
+ ["al"] = { query = "@loop.outer", desc = "Select outer part of a loop region" },
+ ["il"] = { query = "@loop.inner", desc = "Select inner part of a loop region" },
+
+ ["ab"] = { query = "@block.outer", desc = "Select outer part of a block region" }, -- overrides default text object block of parenthesis to parenthesis
+ ["ib"] = { query = "@block.inner", desc = "Select inner part of a block region" }, -- overrides default text object block of parenthesis to parenthesis
+
+ ["af"] = { query = "@function.outer", desc = "Select outer part of a function region" },
+ ["if"] = { query = "@function.inner", desc = "Select inner part of a function region" },
+
+ ["ac"] = { query = "@class.outer", desc = "Select outer part of a class region" },
+ ["ic"] = { query = "@class.inner", desc = "Select inner part of a class region" },
+ },
+ include_surrounding_whitespace = true,
+ },
+ swap = {
+ enable = true,
+ swap_next = {
+ ["<leader>on"] = "@parameter.inner", -- swap object under cursor with next
+ },
+ swap_previous = {
+ ["<leader>op"] = "@parameter.inner", -- swap object under cursor with previous
+ },
+ },
+ },
+ })
+ end,
+}