nvim/lua/plugins/treesitter.lua 3.0 K raw
1
return {
2
	"nvim-treesitter/nvim-treesitter",
3
	version = false,
4
	build = ":TSUpdate",
5
	event = { "BufReadPost", "BufNewFile" },
6
	dependencies = {
7
		"nvim-treesitter/nvim-treesitter-textobjects",
8
	},
9
	config = function()
10
		require("nvim-treesitter.configs").setup({
11
			sync_install = false,
12
			ignore_install = { "javascript" },
13
			modules = {},
14
			highlight = {
15
				enable = true,
16
				additional_vim_regex_highlighting = false,
17
			},
18
			indent = { enable = true },
19
			auto_install = true,
20
			ensure_installed = {
21
				"bash",
22
				"c",
23
				"html",
24
				"javascript",
25
				"json",
26
				"lua",
27
				"luadoc",
28
				"luap",
29
				"query",
30
				"regex",
31
				"vim",
32
				"vimdoc",
33
				"yaml",
34
				"rust",
35
				"go",
36
				"gomod",
37
				"gowork",
38
				"gosum",
39
			},
40
			incremental_selection = {
41
				enable = true,
42
				keymaps = {
43
					init_selection = "<leader>vv",
44
					node_incremental = "+",
45
					scope_incremental = false,
46
					node_decremental = "_",
47
				},
48
			},
49
			textobjects = {
50
				select = {
51
					enable = true,
52
					lookahead = true,
53
54
					keymaps = {
55
						-- You can use the capture groups defined in textobjects.scm
56
						["af"] = { query = "@function.outer", desc = "around a function" },
57
						["if"] = { query = "@function.inner", desc = "inner part of a function" },
58
						["ac"] = { query = "@class.outer", desc = "around a class" },
59
						["ic"] = { query = "@class.inner", desc = "inner part of a class" },
60
						["ai"] = { query = "@conditional.outer", desc = "around an if statement" },
61
						["ii"] = { query = "@conditional.inner", desc = "inner part of an if statement" },
62
						["al"] = { query = "@loop.outer", desc = "around a loop" },
63
						["il"] = { query = "@loop.inner", desc = "inner part of a loop" },
64
						["ap"] = { query = "@parameter.outer", desc = "around parameter" },
65
						["ip"] = { query = "@parameter.inner", desc = "inside a parameter" },
66
					},
67
					selection_modes = {
68
						["@parameter.outer"] = "v", -- charwise
69
						["@parameter.inner"] = "v", -- charwise
70
						["@function.outer"] = "v", -- charwise
71
						["@conditional.outer"] = "V", -- linewise
72
						["@loop.outer"] = "V",  -- linewise
73
						["@class.outer"] = "<c-v>", -- blockwise
74
					},
75
					include_surrounding_whitespace = false,
76
				},
77
				move = {
78
					enable = true,
79
					set_jumps = true, -- whether to set jumps in the jumplist
80
					goto_previous_start = {
81
						["[f"] = { query = "@function.outer", desc = "Previous function" },
82
						["[c"] = { query = "@class.outer", desc = "Previous class" },
83
						["[p"] = { query = "@parameter.inner", desc = "Previous parameter" },
84
					},
85
					goto_next_start = {
86
						["]f"] = { query = "@function.outer", desc = "Next function" },
87
						["]c"] = { query = "@class.outer", desc = "Next class" },
88
						["]p"] = { query = "@parameter.inner", desc = "Next parameter" },
89
					},
90
				},
91
				swap = {
92
					enable = true,
93
					swap_next = {
94
						["<leader>a"] = "@parameter.inner",
95
					},
96
					swap_previous = {
97
						["<leader>A"] = "@parameter.inner",
98
					},
99
				},
100
			},
101
		})
102
	end,
103
}