return { { 'nvim-treesitter/nvim-treesitter', event = 'VeryLazy', dependencies = { { 'nvim-treesitter/nvim-treesitter-context', opts = { max_lines = 2, min_window_height = 50, }, }, 'nvim-treesitter/nvim-treesitter-textobjects', { 'aaronik/treewalker.nvim', keys = { { 'wj', 'Treewalker Down', silent = true, desc = 'Down (Treewalker)' }, { 'wk', 'Treewalker Up', silent = true, desc = 'Up (Treewalker)' }, { 'wh', 'Treewalker Left', silent = true, desc = 'Left (Treewalker)' }, { 'wl', 'Treewalker Right', silent = true, desc = 'Right (Treewalker)' }, { 'w', 'Treewalker SwapDown', silent = true, desc = 'SwapDown (Treewalker)' }, { 'w', 'Treewalker SwapUp', silent = true, desc = 'SwapUp (Treewalker)' }, { 'w', 'Treewalker SwapLeft', silent = true, desc = 'SwapLeft (Treewalker)' }, { 'w', 'Treewalker SwapRight', silent = true, desc = 'SwapRight (Treewalker)' }, }, }, }, config = function() require('nvim-treesitter.configs').setup { ensure_installed = {}, ignore_install = { 'org' }, auto_install = false, highlight = { enable = true, additional_vim_regex_highlighting = false, }, indent = { enable = true, }, matchup = { enable = true, }, textobjects = { select = { enable = true, keymaps = { ['af'] = '@function.outer', ['if'] = '@function.inner', ['ia'] = '@parameter.inner', ['ik'] = '@assignment.lhs', ['iv'] = '@assignment.rhs', ['is'] = { query = '@local.scope', query_group = 'locals', desc = 'Select language scope' }, }, }, move = { enable = true, goto_next_start = { [']a'] = '@parameter.inner', [']f'] = '@function.outer', [']]'] = '@statement.outer', }, goto_previous_start = { ['[a'] = '@parameter.inner', ['[f'] = '@function.outer', ['[['] = '@statement.outer', }, }, swap = { enable = true, swap_next = { ['a]'] = '@parameter.inner', }, swap_previous = { ['a['] = '@parameter.inner', }, }, }, incremental_selection = { enable = true, keymaps = { init_selection = '', node_incremental = 'v', node_decremental = '', }, }, } end, }, }