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 ["am"] = "@function.outer", ["im"] = "@function.inner", ["af"] = "@function.outer", ["if"] = "@function.inner", ["aC"] = "@class.outer", ["aa"] = "@parameter.outer", ["ia"] = "@parameter.inner", ["iq"] = "@block.inner", ["aq"] = "@block.outer", -- You can optionally set descriptions to the mappings (used in the desc parameter of -- nvim_buf_set_keymap) which plugins like which-key display ["iC"] = { query = "@class.inner", desc = "Select inner part of a class region" }, }, -- 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 ['@function.inner'] = 'V', -- linewise }, -- 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 = function (q) return string.match(q.query_string, '.inner$') == nil and string.match(q.query_string, '^function') end, }, }, }