54 lines
2.9 KiB
Lua
54 lines
2.9 KiB
Lua
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'] = '<c-v>', -- blockwise
|
|
['@assignment.rhs'] = 'v', -- charwise
|
|
},
|
|
},
|
|
swap = {
|
|
enable = true,
|
|
-- swap_next = {
|
|
-- ['<leader>sa'] = { query = '@parameter.inner', desc = 'Swap Argument (next)' },
|
|
-- },
|
|
-- swap_previous = {
|
|
-- ['<leader>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,
|
|
}
|