From 9605a0e0fe798392546e4cb84f204dafa0ab4351 Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Wed, 5 Mar 2025 19:21:39 +0000 Subject: Add more text objects. --- init.vim | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/init.vim b/init.vim index 30fff1f..8f8a867 100644 --- a/init.vim +++ b/init.vim @@ -306,6 +306,74 @@ lua << EOF vim.cmd("startinsert") end + 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", + ["aS"] = "@statement.outer", + ["iS"] = "@statement.inner", + -- 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, + }, + move = { + enable = true, + set_jumps = true, + goto_next_start = { + ["]C"] = "@injectable_constructor.params.inner", + ["]c"] = "@class.outer", + }, + goto_previous_start = { + ["[C"] = "@injectable_constructor.params.inner", + ["[c"] = "@class.outer", + }, + }, + }, + } + + + function remove_package(str) for k, v in pairs(package.loaded) do if string.match(k, "^" .. str) then -- cgit