diff --git a/nvim/.config/nvim/lua/plugins/treesitter.lua b/nvim/.config/nvim/lua/plugins/treesitter.lua index 0b998d3..5961bc5 100644 --- a/nvim/.config/nvim/lua/plugins/treesitter.lua +++ b/nvim/.config/nvim/lua/plugins/treesitter.lua @@ -15,70 +15,134 @@ vim.api.nvim_create_autocmd("PackChanged", { }) vim.pack.add({ - { src = "https://github.com/nvim-treesitter/nvim-treesitter-textobjects", version = "master" }, - { src = "https://github.com/nvim-treesitter/nvim-treesitter", version = "master" }, + { src = "https://github.com/nvim-treesitter/nvim-treesitter-textobjects", version = "main" }, + { src = "https://github.com/nvim-treesitter/nvim-treesitter", version = "main" }, }) -local ok, configs = pcall(require, "nvim-treesitter.configs") +local ok = pcall(require, "nvim-treesitter") if ok then - configs.setup({ - highlight = { - enable = true, - }, - textobjects = { - select = { - enable = true, - lookahead = true, - keymaps = { - ["aa"] = "@parameter.outer", - ["ia"] = "@parameter.inner", - ["af"] = "@function.outer", - ["if"] = "@function.inner", - ["ac"] = "@class.outer", - ["ic"] = "@class.inner", - ["al"] = "@call.outer", - ["il"] = "@call.inner", - ["ao"] = "@loop.outer", - ["io"] = "@loop.inner", - ["ad"] = "@conditional.outer", - ["id"] = "@conditional.inner", - ["ar"] = "@return.outer", - ["ir"] = "@return.inner", - ["as"] = "@statement.outer", - ["ag"] = "@assignment.outer", - ["ig"] = "@assignment.inner", - }, - }, - move = { - enable = true, - set_jumps = true, - goto_next_start = { - ["]m"] = "@function.outer", - ["]]"] = "@class.outer", - }, - goto_next_end = { - ["]M"] = "@function.outer", - ["]["] = "@class.outer", - }, - goto_previous_start = { - ["[m"] = "@function.outer", - ["[["] = "@class.outer", - }, - goto_previous_end = { - ["[M"] = "@function.outer", - ["[]"] = "@class.outer", - }, - }, - swap = { - enable = true, - swap_next = { - ["cp"] = "@parameter.inner", - }, - swap_previous = { - ["cP"] = "@parameter.inner", - }, - }, - }, + vim.api.nvim_create_autocmd('FileType', { + pattern = { 'odin', 'go' }, + callback = function() vim.treesitter.start() end, }) else print("plugin nvim-treesitter.configs missing") end + +local textobjects +ok, textobjects = pcall(require, "nvim-treesitter-textobjects") +if ok then + textobjects.setup { + move = { + set_jumps = true, + }, + select = { + -- Automatically jump forward to textobj, similar to targets.vim + lookahead = true, + -- 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 of false + include_surrounding_whitespace = false, + }, + } + local function key_select(key, object) + vim.keymap.set({ "x", "o" }, key, function() + require "nvim-treesitter-textobjects.select".select_textobject(object, "textobjects") + end) + end + key_select("aa", "@parameter.outer") + key_select("ia", "@parameter.inner") + key_select("af", "@function.outer") + key_select("if", "@function.inner") + key_select("ac", "@class.outer") + key_select("ic", "@class.inner") + key_select("al", "@call.outer") + key_select("il", "@call.inner") + key_select("ao", "@loop.outer") + key_select("io", "@loop.inner") + key_select("ad", "@conditional.outer") + key_select("id", "@conditional.inner") + key_select("ar", "@return.outer") + key_select("ir", "@return.inner") + key_select("as", "@statement.outer") + key_select("ag", "@assignment.outer") + key_select("ig", "@assignment.inner") + + vim.keymap.set({ "x", "o" }, "ax", function() + require "nvim-treesitter-textobjects.select".select_textobject("@local.scope", "locals") + end) + vim.keymap.set("n", "cp", function() + require("nvim-treesitter-textobjects.swap").swap_next "@parameter.inner" + end) + vim.keymap.set("n", "cP", function() + require("nvim-treesitter-textobjects.swap").swap_previous "@parameter.inner" + end) + + vim.keymap.set({ "n", "x", "o" }, "]m", function() + require("nvim-treesitter-textobjects.move").goto_next_start("@function.outer", "textobjects") + end) + vim.keymap.set({ "n", "x", "o" }, "]]", function() + require("nvim-treesitter-textobjects.move").goto_next_start("@class.outer", "textobjects") + end) + -- You can also pass a list to group multiple queries. + vim.keymap.set({ "n", "x", "o" }, "]o", function() + require("nvim-treesitter-textobjects.move").goto_next_start({ "@loop.inner", "@loop.outer" }, + "textobjects") + end) + -- You can also use captures from other query groups like `locals.scm` or `folds.scm` + vim.keymap.set({ "n", "x", "o" }, "]s", function() + require("nvim-treesitter-textobjects.move").goto_next_start("@local.scope", "locals") + end) + vim.keymap.set({ "n", "x", "o" }, "]z", function() + require("nvim-treesitter-textobjects.move").goto_next_start("@fold", "folds") + end) + + vim.keymap.set({ "n", "x", "o" }, "]M", function() + require("nvim-treesitter-textobjects.move").goto_next_end("@function.outer", "textobjects") + end) + vim.keymap.set({ "n", "x", "o" }, "][", function() + require("nvim-treesitter-textobjects.move").goto_next_end("@class.outer", "textobjects") + end) + + vim.keymap.set({ "n", "x", "o" }, "[m", function() + require("nvim-treesitter-textobjects.move").goto_previous_start("@function.outer", "textobjects") + end) + vim.keymap.set({ "n", "x", "o" }, "[[", function() + require("nvim-treesitter-textobjects.move").goto_previous_start("@class.outer", "textobjects") + end) + + vim.keymap.set({ "n", "x", "o" }, "[M", function() + require("nvim-treesitter-textobjects.move").goto_previous_end("@function.outer", "textobjects") + end) + vim.keymap.set({ "n", "x", "o" }, "[]", function() + require("nvim-treesitter-textobjects.move").goto_previous_end("@class.outer", "textobjects") + end) + + -- Go to either the start or the end, whichever is closer. + -- Use if you want more granular movements + vim.keymap.set({ "n", "x", "o" }, "]d", function() + require("nvim-treesitter-textobjects.move").goto_next("@conditional.outer", "textobjects") + end) + vim.keymap.set({ "n", "x", "o" }, "[d", function() + require("nvim-treesitter-textobjects.move").goto_previous("@conditional.outer", "textobjects") + end) +else + print("plugin nvim-treesitter-textobjects missing") +end diff --git a/nvim/.config/nvim/nvim-pack-lock.json b/nvim/.config/nvim/nvim-pack-lock.json index 1099111..fb8b9db 100644 --- a/nvim/.config/nvim/nvim-pack-lock.json +++ b/nvim/.config/nvim/nvim-pack-lock.json @@ -1,7 +1,7 @@ { "plugins": { "LuaSnip": { - "rev": "5a1e39223db9a0498024a77b8441169d260c8c25", + "rev": "642b0c595e11608b4c18219e93b88d7637af27bc", "src": "https://github.com/L3MON4D3/LuaSnip", "version": "2.0.0 - 3.0.0" }, @@ -14,7 +14,7 @@ "src": "https://github.com/rmagatti/auto-session" }, "conform.nvim": { - "rev": "c2526f1cde528a66e086ab1668e996d162c75f4f", + "rev": "086a40dc7ed8242c03be9f47fbcee68699cc2395", "src": "https://github.com/stevearc/conform.nvim" }, "flash.nvim": { @@ -26,7 +26,7 @@ "src": "https://github.com/kepano/flexoki-neovim" }, "fzf-lua": { - "rev": "d9908fd0a5474994f00526ed17f0b77339dc0152", + "rev": "9f0432fdd7825ab163520045831a40b6df82ea28", "src": "https://github.com/ibhagwan/fzf-lua" }, "fzf-lua-frecency.nvim": { @@ -45,8 +45,12 @@ "rev": "9c60ec2279d62487d942ce095e49006af28eed6e", "src": "https://github.com/rktjmp/lush.nvim" }, + "miasma.nvim": { + "rev": "627f2e1cac91de0d1d4dd7472b506a30f41b2b7d", + "src": "https://github.com/xero/miasma.nvim" + }, "multicursor.nvim": { - "rev": "630dd29dd696bc977cb81d7dd2fa6bb280f60fc4", + "rev": "704b99f10a72cc05d370cfeb294ff83412a8ab55", "src": "https://github.com/jake-stewart/multicursor.nvim", "version": "'1.0'" }, @@ -60,29 +64,29 @@ "version": "3.0.0 - 4.0.0" }, "nvim-treesitter": { - "rev": "42fc28ba918343ebfd5565147a42a26580579482", + "rev": "4916d6592ede8c07973490d9322f187e07dfefac", "src": "https://github.com/nvim-treesitter/nvim-treesitter", - "version": "'master'" + "version": "'main'" }, "nvim-treesitter-textobjects": { - "rev": "5ca4aaa6efdcc59be46b95a3e876300cfead05ef", + "rev": "851e865342e5a4cb1ae23d31caf6e991e1c99f1e", "src": "https://github.com/nvim-treesitter/nvim-treesitter-textobjects", - "version": "'master'" + "version": "'main'" }, "nvim-various-textobjs": { - "rev": "34ca4f6b54cf167554c5792cacc69c930b654136", + "rev": "e049b24fc2042a424843a8db79af5ceb273be6f6", "src": "https://github.com/chrisgrieser/nvim-various-textobjs" }, "oil.nvim": { - "rev": "f55b25e493a7df76371cfadd0ded5004cb9cd48a", + "rev": "0fcc83805ad11cf714a949c98c605ed717e0b83e", "src": "https://github.com/stevearc/oil.nvim" }, "slimline.nvim": { - "rev": "6b1f20780a26813ba3c2f248c6c6f61e7281bb7b", + "rev": "2ca5a979698fd0af0406770fa5dc81899fb53106", "src": "https://github.com/sschleemilch/slimline.nvim" }, "snacks.nvim": { - "rev": "fe7cfe9800a182274d0f868a74b7263b8c0c020b", + "rev": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e", "src": "https://github.com/folke/snacks.nvim" }, "which-key.nvim": { @@ -94,4 +98,4 @@ "src": "https://github.com/zenbones-theme/zenbones.nvim" } } -} \ No newline at end of file +}