return { 'nvim-treesitter/nvim-treesitter-textobjects', event = 'VeryLazy', dependencies = { 'nvim-treesitter/nvim-treesitter' }, config = function() ---@diagnostic disable-next-line: missing-fields require('nvim-treesitter.configs').setup({ textobjects = { select = { enable = true, lookahead = true, -- automatically jump forward to textobj, similar to targets.vim keymaps = { -- You can use the capture groups defined in textobjects.scm ['af'] = { query = '@function.outer', desc = 'Select entire function' }, ['if'] = { query = '@function.inner', desc = 'Select function body' }, ['ac'] = { query = '@class.outer', desc = 'Select entire class' }, ['ic'] = { query = '@class.inner', desc = 'Select class body' }, ['as'] = { query = '@scope.outer', query_group = 'locals', desc = 'Select language scope' }, ['is'] = { query = '@scope.inner', query_group = 'locals', desc = 'Select language scope' }, ['ia'] = { query = '@assignment.rhs', desc = 'Select assignment rhs' }, ['ip'] = { query = '@parameter.inner', desc = 'Select parameter' }, }, selection_modes = { ['@parameter.outer'] = 'v', -- charwise ['@function.outer'] = 'V', -- linewise ['@class.outer'] = '', -- blockwise ['@assignment.rhs'] = 'v', -- charwise }, }, swap = { enable = true, -- swap_next = { -- ['sa'] = { query = '@parameter.inner', desc = 'Swap Argument (next)' }, -- }, -- swap_previous = { -- ['sA'] = { query = '@parameter.inner', desc = 'Swap Argument (prev)' }, -- }, }, }, }) local ts_repeat_move = require('nvim-treesitter.textobjects.repeatable_move') -- Repeat movement with ; and , vim.keymap.set({ 'n', 'x', 'o' }, ';', ts_repeat_move.repeat_last_move_next) vim.keymap.set({ 'n', 'x', 'o' }, ',', ts_repeat_move.repeat_last_move_previous) -- NOTE: You need this, otherwise the normal ; and , won't work for fFtT vim.keymap.set({ 'n', 'x', 'o' }, 'f', ts_repeat_move.builtin_f_expr, { expr = true }) vim.keymap.set({ 'n', 'x', 'o' }, 'F', ts_repeat_move.builtin_F_expr, { expr = true }) vim.keymap.set({ 'n', 'x', 'o' }, 't', ts_repeat_move.builtin_t_expr, { expr = true }) vim.keymap.set({ 'n', 'x', 'o' }, 'T', ts_repeat_move.builtin_T_expr, { expr = true }) end, }