diff --git a/lazy-lock.json b/lazy-lock.json index b409773..966cd1d 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -30,6 +30,7 @@ "nvim-treesitter": { "branch": "master", "commit": "7821feb7e7d55a76b7ffeeb6b0bfb7b8f499ce94" }, "nvim-treesitter-context": { "branch": "master", "commit": "78a81c7494e7d1a08dd1200b556933e513fd9f29" }, "nvim-treesitter-endwise": { "branch": "master", "commit": "8b34305ffc28bd75a22f5a0a9928ee726a85c9a6" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "b91c98afa6c42819aea6cbc1ba38272f5456a5cf" }, "nvim-ufo": { "branch": "main", "commit": "203c9f434feec57909ab4b1e028abeb3349b7847" }, "nvim-web-devicons": { "branch": "master", "commit": "56f17def81478e406e3a8ec4aa727558e79786f3" }, "oil.nvim": { "branch": "master", "commit": "ccab9d5e09e2d0042fbbe5b6bd05e82426247067" }, diff --git a/lua/valeth/plugins/treesitter.lua b/lua/valeth/plugins/treesitter.lua index 82305a7..0cd70a8 100644 --- a/lua/valeth/plugins/treesitter.lua +++ b/lua/valeth/plugins/treesitter.lua @@ -5,6 +5,7 @@ local spec = { spec.dependencies = { "nvim-treesitter/nvim-treesitter-context", + "nvim-treesitter/nvim-treesitter-textobjects", "RRethy/nvim-treesitter-endwise", } @@ -34,7 +35,45 @@ spec.config = function() additional_vim_regex_highlighting = false, }, - endwise = { enable = true } + endwise = { enable = true }, + + textobjects = { + select = { + enable = true, + lookahead = true, + keymaps = { + ["am"] = { query = "@function.outer", desc = "Select outer function" }, + ["im"] = { query = "@function.inner", desc = "Select inner function" }, + ["ab"] = { query = "@block.outer", desc = "Select outer block" }, + ["ib"] = { query = "@block.inner", desc = "Select inner block" }, + }, + }, + + move = { + enable = true, + set_jumps = true, + goto_next_start = { + ["]m"] = { query = "@function.outer", desc = "Go to start of next function" }, + ["]b"] = { query = "@block.outer", desc = "Go to start of next block" }, + ["]s"] = { query = "@class.outer", desc = "Go to start of next struct-like" }, + }, + goto_next_end = { + ["]M"] = { query = "@function.outer", desc = "Go to end of next function" }, + ["]B"] = { query = "@block.outer", desc = "Go to end of next block" }, + ["]S"] = { query = "@class.outer", desc = "Go to end of next struct-like" }, + }, + goto_previous_start = { + ["[m"] = { query = "@function.outer", desc = "Go to start of previous function" }, + ["[b"] = { query = "@block.outer", desc = "Go to start of previous block" }, + ["[s"] = { query = "@class.outer", desc = "Go to start of previous struct-like" }, + }, + goto_previous_end = { + ["[M"] = { query = "@function.outer", desc = "Go to end of previous function" }, + ["[B"] = { query = "@block.outer", desc = "Go to end of previous block" }, + ["[S"] = { query = "@class.outer", desc = "Go to end of previous struct-like" }, + }, + }, + }, }) require("treesitter-context").setup()