From 3708aa2f65d18ad010e0b68542a01891105a0efc Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Mon, 14 Oct 2024 16:09:03 +0200 Subject: [PATCH] nvim: treesitter: enable textobjects. --- nvim/lua/user/plugins/editor/treesitter.lua | 53 ++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/nvim/lua/user/plugins/editor/treesitter.lua b/nvim/lua/user/plugins/editor/treesitter.lua index cbf5649..238d85b 100644 --- a/nvim/lua/user/plugins/editor/treesitter.lua +++ b/nvim/lua/user/plugins/editor/treesitter.lua @@ -4,7 +4,7 @@ return { require("nvim-treesitter.install").update({ with_sync = true }) end, dependencies = { - -- "nvim-treesitter/nvim-treesitter-textobjects", + "nvim-treesitter/nvim-treesitter-textobjects", { "windwp/nvim-ts-autotag", opts = {} @@ -38,6 +38,57 @@ return { indent = { enable = true, }, + + textobjects = { + select = { + enable = true, + lookahead = true, + keymaps = { + -- Functions/Methods + ["af"] = { query = "@function.outer", desc = "outer function"}, + ["if"] = { query = "@function.inner", desc = "inner function"}, + -- Class + ["ac"] = { query = "@class.outer", desc = "around class" }, + ["ic"] = { query = "@class.inner", desc = "inner class" }, + -- Parameters/arguments + ["av"] = { query = "@parameter.outer", desc = "around parameter" }, + ["iv"] = { query = "@parameter.inner", desc = "inner parameter" }, + } + }, + swap = { + enable = true, + swap_next = { + ["]"] = { query = "@parameter.inner", desc = "Swap next parameter with the one under cursor"}, + }, + swap_previous = { + ["["] = { query = "@parameter.inner", desc = "Swap previous parameter with the one under cursor"}, + }, + }, + move = { + enable = true, + set_jumps = true, + goto_next_start = { + ["]f"] = { query = "@function.outer", desc = "Goto the beginning of the next function" }, + ["]c"] = { query = "@class.outer", desc = "Goto the beginning of the next class" }, + ["]v"] = { query = "@parameter.inner", desc = "Goto the beginning of the next parameter" }, + }, + goto_next_end = { + ["]F"] = { query = "@function.outer", desc = "Goto the end of the next function" }, + ["]C"] = { query = "@class.outer", desc = "Goto the end of the next class" }, + ["]V"] = { query = "@parameter.inner", desc = "Goto the end of the next parameter" }, + }, + goto_previous_start = { + ["[f"] = { query = "@function.outer", desc = "Goto the beginning of the previous function" }, + ["[c"] = { query = "@class.outer", desc = "Goto the beginning of the previous class" }, + ["[v"] = { query = "@parameter.inner", desc = "Goto the beginning of the previous parameter" }, + }, + goto_previous_end = { + ["[F"] = { query = "@function.outer", desc = "Goto the end of the previous function" }, + ["[C"] = { query = "@class.outer", desc = "Goto the end of the previous class" }, + ["[V"] = { query = "@parameter.inner", desc = "Goto the end of the previous parameter" }, + }, + } + } }, config = function(_, opts) local parser_config = require("nvim-treesitter.parsers").get_parser_configs()