atusy/treemonkey.nvim

github github
motiontreesitter-based
stars 23
issues 1
subscribers 1
forks 0
CREATED

2023-12-23

UPDATED

3 months ago


treemonkey.nvim

Yet another label-based node selection plugin.

There are some cases that start or end of the node position overlaps with the other nodes. If labels are overlayed, there is a difficulty on selecting the intended one (e.g., nvim-treehopper or leap-ast.nvim). If labels are inserted inline, your eyes may fail to track the node (e.g., flash.nvim).

Instead, this plugin does...

  1. Label start of nodes with lower case letters and end of nodes with the corresponding upper case letters.
  2. Ask user to input a label.
  3. If there are any labels hidden by the chosen label, then ask again to choose the label from the subset of choises.
  4. Select the node of the choice.

It's like monkey hanging around the Abstract Syntax Tree. Isn't it?

2023-12-29 12-39-32 mkv

Example

vim.keymap.set({"x", "o"}, "m", function()
  require("treemonkey").select({
    ignore_injections = false,
    highlight = { backdrop = "Comment" }
  })
end)

With lazy.nvim, ...

{
  "https://github.com/atusy/treemonkey.nvim",
  init = function()
    vim.keymap.set({"x", "o"}, "m", function()
      require("treemonkey").select({ ignore_injections = false })
    end)
  end
}