nvim.git

nvim

~
git clone https://github.com/debuman/nvim.git

lua/josean/plugins/nvim-treesitter-text-objects.lua (6186B)

      1 return {
      2   "nvim-treesitter/nvim-treesitter-textobjects",
      3   lazy = true,
      4   config = function()
      5     require("nvim-treesitter.configs").setup({
      6       textobjects = {
      7         select = {
      8           enable = true,
      9 
     10           -- Automatically jump forward to textobj, similar to targets.vim
     11           lookahead = true,
     12 
     13           keymaps = {
     14             -- You can use the capture groups defined in textobjects.scm
     15             ["a="] = { query = "@assignment.outer", desc = "Select outer part of an assignment" },
     16             ["i="] = { query = "@assignment.inner", desc = "Select inner part of an assignment" },
     17             ["l="] = { query = "@assignment.lhs", desc = "Select left hand side of an assignment" },
     18             ["r="] = { query = "@assignment.rhs", desc = "Select right hand side of an assignment" },
     19 
     20             -- works for javascript/typescript files (custom capture I created in after/queries/ecma/textobjects.scm)
     21             ["a:"] = { query = "@property.outer", desc = "Select outer part of an object property" },
     22             ["i:"] = { query = "@property.inner", desc = "Select inner part of an object property" },
     23             ["l:"] = { query = "@property.lhs", desc = "Select left part of an object property" },
     24             ["r:"] = { query = "@property.rhs", desc = "Select right part of an object property" },
     25 
     26             ["aa"] = { query = "@parameter.outer", desc = "Select outer part of a parameter/argument" },
     27             ["ia"] = { query = "@parameter.inner", desc = "Select inner part of a parameter/argument" },
     28 
     29             ["ai"] = { query = "@conditional.outer", desc = "Select outer part of a conditional" },
     30             ["ii"] = { query = "@conditional.inner", desc = "Select inner part of a conditional" },
     31 
     32             ["al"] = { query = "@loop.outer", desc = "Select outer part of a loop" },
     33             ["il"] = { query = "@loop.inner", desc = "Select inner part of a loop" },
     34 
     35             ["af"] = { query = "@call.outer", desc = "Select outer part of a function call" },
     36             ["if"] = { query = "@call.inner", desc = "Select inner part of a function call" },
     37 
     38             ["am"] = { query = "@function.outer", desc = "Select outer part of a method/function definition" },
     39             ["im"] = { query = "@function.inner", desc = "Select inner part of a method/function definition" },
     40 
     41             ["ac"] = { query = "@class.outer", desc = "Select outer part of a class" },
     42             ["ic"] = { query = "@class.inner", desc = "Select inner part of a class" },
     43           },
     44         },
     45         swap = {
     46           enable = true,
     47           swap_next = {
     48             ["<leader>na"] = "@parameter.inner", -- swap parameters/argument with next
     49             ["<leader>n:"] = "@property.outer", -- swap object property with next
     50             ["<leader>nm"] = "@function.outer", -- swap function with next
     51           },
     52           swap_previous = {
     53             ["<leader>pa"] = "@parameter.inner", -- swap parameters/argument with prev
     54             ["<leader>p:"] = "@property.outer", -- swap object property with prev
     55             ["<leader>pm"] = "@function.outer", -- swap function with previous
     56           },
     57         },
     58         move = {
     59           enable = true,
     60           set_jumps = true, -- whether to set jumps in the jumplist
     61           goto_next_start = {
     62             ["]f"] = { query = "@call.outer", desc = "Next function call start" },
     63             ["]m"] = { query = "@function.outer", desc = "Next method/function def start" },
     64             ["]c"] = { query = "@class.outer", desc = "Next class start" },
     65             ["]i"] = { query = "@conditional.outer", desc = "Next conditional start" },
     66             ["]l"] = { query = "@loop.outer", desc = "Next loop start" },
     67 
     68             -- You can pass a query group to use query from `queries/<lang>/<query_group>.scm file in your runtime path.
     69             -- Below example nvim-treesitter's `locals.scm` and `folds.scm`. They also provide highlights.scm and indent.scm.
     70             ["]s"] = { query = "@scope", query_group = "locals", desc = "Next scope" },
     71             ["]z"] = { query = "@fold", query_group = "folds", desc = "Next fold" },
     72           },
     73           goto_next_end = {
     74             ["]F"] = { query = "@call.outer", desc = "Next function call end" },
     75             ["]M"] = { query = "@function.outer", desc = "Next method/function def end" },
     76             ["]C"] = { query = "@class.outer", desc = "Next class end" },
     77             ["]I"] = { query = "@conditional.outer", desc = "Next conditional end" },
     78             ["]L"] = { query = "@loop.outer", desc = "Next loop end" },
     79           },
     80           goto_previous_start = {
     81             ["[f"] = { query = "@call.outer", desc = "Prev function call start" },
     82             ["[m"] = { query = "@function.outer", desc = "Prev method/function def start" },
     83             ["[c"] = { query = "@class.outer", desc = "Prev class start" },
     84             ["[i"] = { query = "@conditional.outer", desc = "Prev conditional start" },
     85             ["[l"] = { query = "@loop.outer", desc = "Prev loop start" },
     86           },
     87           goto_previous_end = {
     88             ["[F"] = { query = "@call.outer", desc = "Prev function call end" },
     89             ["[M"] = { query = "@function.outer", desc = "Prev method/function def end" },
     90             ["[C"] = { query = "@class.outer", desc = "Prev class end" },
     91             ["[I"] = { query = "@conditional.outer", desc = "Prev conditional end" },
     92             ["[L"] = { query = "@loop.outer", desc = "Prev loop end" },
     93           },
     94         },
     95       },
     96     })
     97 
     98     local ts_repeat_move = require("nvim-treesitter.textobjects.repeatable_move")
     99 
    100     -- vim way: ; goes to the direction you were moving.
    101     vim.keymap.set({ "n", "x", "o" }, ";", ts_repeat_move.repeat_last_move)
    102     vim.keymap.set({ "n", "x", "o" }, ",", ts_repeat_move.repeat_last_move_opposite)
    103 
    104     -- Optionally, make builtin f, F, t, T also repeatable with ; and ,
    105     vim.keymap.set({ "n", "x", "o" }, "f", ts_repeat_move.builtin_f)
    106     vim.keymap.set({ "n", "x", "o" }, "F", ts_repeat_move.builtin_F)
    107     vim.keymap.set({ "n", "x", "o" }, "t", ts_repeat_move.builtin_t)
    108     vim.keymap.set({ "n", "x", "o" }, "T", ts_repeat_move.builtin_T)
    109   end,
    110 }