diff --git a/.config/nvim/lua/plugins/ts-text-objects.lua b/.config/nvim/lua/plugins/ts-text-objects.lua index c04762f..5768b21 100644 --- a/.config/nvim/lua/plugins/ts-text-objects.lua +++ b/.config/nvim/lua/plugins/ts-text-objects.lua @@ -18,12 +18,6 @@ return { ['l='] = { query = '@assignment.lhs', desc = 'Select left hand side of an assignment' }, ['r='] = { query = '@assignment.rhs', desc = 'Select right hand side of an assignment' }, - -- works for javascript/typescript files (custom capture I created in after/queries/ecma/textobjects.scm) - ['a:'] = { query = '@property.outer', desc = 'Select outer part of an object property' }, - ['i:'] = { query = '@property.inner', desc = 'Select inner part of an object property' }, - ['l:'] = { query = '@property.lhs', desc = 'Select left part of an object property' }, - ['r:'] = { query = '@property.rhs', desc = 'Select right part of an object property' }, - ['aa'] = { query = '@parameter.outer', desc = 'Select outer part of a parameter/argument' }, ['ia'] = { query = '@parameter.inner', desc = 'Select inner part of a parameter/argument' }, @@ -33,15 +27,31 @@ return { ['al'] = { query = '@loop.outer', desc = 'Select outer part of a loop' }, ['il'] = { query = '@loop.inner', desc = 'Select inner part of a loop' }, - ['af'] = { query = '@call.outer', desc = 'Select outer part of a function call' }, - ['if'] = { query = '@call.inner', desc = 'Select inner part of a function call' }, + ['aC'] = { query = '@call.outer', desc = 'Select outer part of a function call' }, + ['iC'] = { query = '@call.inner', desc = 'Select inner part of a function call' }, - ['am'] = { query = '@function.outer', desc = 'Select outer part of a method/function definition' }, - ['im'] = { query = '@function.inner', desc = 'Select inner part of a method/function definition' }, + ['af'] = { query = '@function.outer', desc = 'Select outer part of a method/function definition' }, + ['if'] = { query = '@function.inner', desc = 'Select inner part of a method/function definition' }, ['ac'] = { query = '@class.outer', desc = 'Select outer part of a class' }, ['ic'] = { query = '@class.inner', desc = 'Select inner part of a class' }, + + ['as'] = { query = '@scope', query_group = 'locals', desc = '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', + ['@function.outer'] = 'v', + ['@class.outer'] = 'V', + ['@scope'] = '', + }, + include_surrounding_whitespace = false, }, swap = { enable = true, @@ -64,11 +74,11 @@ return { [']m'] = { query = '@function.outer', desc = 'Next method/function def start' }, [']c'] = { query = '@class.outer', desc = 'Next class start' }, [']i'] = { query = '@conditional.outer', desc = 'Next conditional start' }, - [']l'] = { query = '@loop.outer', desc = 'Next loop start' }, + [']l'] = { query = '@loop.*', desc = 'Next loop start' }, -- You can pass a query group to use query from `queries//.scm file in your runtime path. -- Below example nvim-treesitter's `locals.scm` and `folds.scm`. They also provide highlights.scm and indent.scm. - [']s'] = { query = '@scope', query_group = 'locals', desc = 'Next scope' }, + [']S'] = { query = '@scope', query_group = 'locals', desc = 'Next scope' }, [']z'] = { query = '@fold', query_group = 'folds', desc = 'Next fold' }, }, goto_next_end = { @@ -93,6 +103,14 @@ return { ['[L'] = { query = '@loop.outer', desc = 'Prev loop end' }, }, }, + lsp_interop = { + enable = true, + border = 'rounded', + peek_definition_code = { + ['df'] = '@function.outer', + ['dF'] = '@class.outer', + }, + }, }, }, @@ -101,14 +119,9 @@ return { local ts_repeat_move = require('nvim-treesitter.textobjects.repeatable_move') - -- vim way: ; goes to the direction you were moving. + -- Repeat movement with ; and , + -- ensure ; goes forward and , goes backward regardless of the last direction vim.keymap.set({ 'n', 'x', 'o' }, ';', ts_repeat_move.repeat_last_move) - vim.keymap.set({ 'n', 'x', 'o' }, ',', ts_repeat_move.repeat_last_move_opposite) - - -- -- Optionally, make builtin f, F, t, T also repeatable with ; and , - -- vim.keymap.set({ 'n', 'x', 'o' }, 'f', ts_repeat_move.builtin_f) - -- vim.keymap.set({ 'n', 'x', 'o' }, 'F', ts_repeat_move.builtin_F) - -- vim.keymap.set({ 'n', 'x', 'o' }, 't', ts_repeat_move.builtin_t) - -- vim.keymap.set({ 'n', 'x', 'o' }, 'T', ts_repeat_move.builtin_T) + vim.keymap.set({ 'n', 'x', 'o' }, ',', ts_repeat_move.repeat_last_move_previous) end, -} \ No newline at end of file +}