diff --git a/nvim/.config/nvim/lua/plugins/treesitter.lua b/nvim/.config/nvim/lua/plugins/treesitter.lua index 1441da8..72b0d0f 100644 --- a/nvim/.config/nvim/lua/plugins/treesitter.lua +++ b/nvim/.config/nvim/lua/plugins/treesitter.lua @@ -18,6 +18,86 @@ return { -- Highlight, edit, and navigate code additional_vim_regex_highlighting = { "ruby" }, }, indent = { enable = true, disable = { "ruby" } }, + textobjects = { + move = { + enable = true, + set_jumps = true, -- whether to set jumps in the jumplist + goto_next_start = { + [""] = "@function.outer", + -- ["]]"] = { query = "@class.outer", desc = "Next class start" }, + -- -- + -- -- You can use regex matching (i.e. lua pattern) and/or pass a list in a "query" key to group multiple queries. + -- ["]o"] = "@loop.*", + -- -- ["]o"] = { query = { "@loop.inner", "@loop.outer" } } + -- -- + -- -- 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" }, + -- ["]z"] = { query = "@fold", query_group = "folds", desc = "Next fold" }, + }, + -- goto_next_end = { + -- ["]M"] = "@function.outer", + -- ["]["] = "@class.outer", + -- }, + goto_previous_start = { + [""] = "@function.outer", + -- ["[["] = "@class.outer", + }, + -- goto_previous_end = { + -- ["[M"] = "@function.outer", + -- ["[]"] = "@class.outer", + -- }, + -- Below will go to either the start or the end, whichever is closer. + -- Use if you want more granular movements + -- Make it even more gradual by adding multiple queries and regex. + goto_next = { + -- [""] = "@conditional.outer", + }, + goto_previous = { + -- [""] = "@conditional.outer", + }, + }, + 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 + ["af"] = "@function.outer", + ["if"] = "@function.inner", + ["ac"] = "@class.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 also use captures from other query groups like `locals.scm` + ["as"] = { query = "@scope", query_group = "locals", desc = "Select 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", -- charwise + ["@function.outer"] = "V", -- linewise + ["@class.outer"] = "", -- blockwise + }, + -- 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 or false + include_surrounding_whitespace = false, + }, + }, }, config = function(_, opts) -- [[ Configure Treesitter ]] See `:help nvim-treesitter`