Syntax trees + hop = Treehopper
A Plugin that provides region selection using hints on the abstract syntax tree of a document.
- Neovim 0.7.2+
Treehopper operates on syntax trees. It uses tree-sitter to retrieve the tree
if a parser is available, otherwise it tries to use the built-in LSP client in
Neovim (using the selectionRange
functionality).
You can install tree-sitter parsers either via:
- nvim-treesitter
TSInstall
- Manually: You need to download and compile the language specific parsers
using
gcc
and place the object files into~/.config/nvim/parser
. See http://tree-sitter.github.io/tree-sitter/
- Install it like any other neovim plugin:
- If using vim-plug:
Plug mfussenegger/nvim-treehopper
- If using packer.nvim:
use mfussenegger/nvim-treehopper
- If using vim-plug:
Define two mappings:
omap <silent> m :<C-U>lua require('tsht').nodes()<CR>
xnoremap <silent> m :lua require('tsht').nodes()<CR>
You can configure which keys are used for hint labels, the first N characters will be taken from the hint_keys
and then after that it will restart from a-zA-Z
require("tsht").config.hint_keys = { "h", "j", "f", "d", "n", "v", "s", "l", "a" }
Moving depends on hop.nvim
If you want to move to the start or end of a syntax node you can use
require('tsht').move({ side = "start" })
.
The parameter is optional and defaults to start
. Use side = "end"
if you
want to move to the end of a node.