summaryrefslogtreecommitdiff
path: root/lua/ben/plugins/treesitter-text-objects.lua
blob: bcf1b927f8857ee5635923a07206e31306fdc194 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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,
}