diff --git a/modules/hm/nvim/telescope-config.lua b/modules/hm/nvim/telescope-config.lua index c1bc768..066de86 100644 --- a/modules/hm/nvim/telescope-config.lua +++ b/modules/hm/nvim/telescope-config.lua @@ -22,4 +22,5 @@ keymap.set("n", "fr", "Telescope oldfiles", { desc = "Fuzzy fin keymap.set("n", "fs", "Telescope live_grep", { desc = "Find string in cwd" }) keymap.set("n", "fc", "Telescope grep_string", { desc = "Fuzzy string under cursor in cwd" }) keymap.set("n", "b", "Telescope buffers", { desc = "Fuzzy search buffer names" }) +keymap.set("n", "s", "Telescope treesitter", { desc = "Fuzzy search treesitter symbols" }) diff --git a/modules/hm/vim.nix b/modules/hm/vim.nix index d02574b..41e895c 100644 --- a/modules/hm/vim.nix +++ b/modules/hm/vim.nix @@ -137,8 +137,57 @@ let vp = pkgs.vimPlugins; in { type = "lua"; } - # vp.nvim-treesitter-textobjects - # vp.nvim-treesitter + vp.nvim-treesitter.withAllGrammars + { + plugin = vp.nvim-treesitter-textobjects; + type = "lua"; + config = '' + 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 + ["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 = true, + }, + }, + } + ''; + } # Highlighting {