return { { 'nvim-treesitter/nvim-treesitter', config = function() require('nvim-treesitter.configs').setup({ sync_install = false, auto_install = true, indent = { enable = true }, highlight = { enable = true }, autotag = { enable = true }, -- text object selection 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", ["ac"] = "@class.outer", ["ic"] = "@class.inner", -- 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 ['@class.outer'] = '', -- blockwise }, -- 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 of false include_surrounding_whitespace = true, }, }, }) vim.wo.foldmethod = 'expr' vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()' function _G.MyFoldText() local line = vim.fn.getline(vim.v.foldstart) return line .. " 󱞣" end vim.opt.foldtext = 'v:lua.MyFoldText()' vim.opt.fillchars:append(',fold: ') vim.opt.foldlevel = 99; end }, { 'nvim-treesitter/nvim-treesitter-textobjects' }, }