A flash.nvim-like Neovim plugin for jumping to treesitter nodes. Press a key, see labels appear on all visible treesitter nodes, type the label to jump to that location.
- Jump to any visible treesitter node with minimal keystrokes
- Labels use home row keys for quick access
- Works in normal, visual, and operator-pending modes
- Configurable labels, keymaps, and appearance
- Neovim >= 0.8.0
- Treesitter parser for your language (
:TSInstall <language>)
Using lazy.nvim
{
"burneikis/nodejumper.nvim",
event = "VeryLazy",
opts = {},
keys = {
{ "S", mode = { "n", "x", "o" }, function() require("nodejumper").jump() end, desc = "Jump to treesitter node" },
},
}Using packer.nvim
use {
"burneikis/nodejumper.nvim",
config = function()
require("nodejumper").setup()
vim.keymap.set({ "n", "x", "o" }, "S", function() require("nodejumper").jump() end, { desc = "Jump to treesitter node" })
end
}- Press your configured key (e.g.,
S) in normal, visual, or operator-pending mode - Labels appear on all visible treesitter nodes
- Type the label character(s) to jump to that node
- Press
<Esc>to cancel
:NodejumperJump- Start a jump session:NodejumperCancel- Cancel active jump session
Pass options via the opts table in your lazy.nvim spec:
{
"burneikis/nodejumper.nvim",
event = "VeryLazy",
opts = {
-- Labels used for jumping (home row keys first)
labels = "asdfghjklqwertyuiopzxcvbnm",
-- Minimum node size to show labels (reduces clutter)
min_node_size = 3,
-- Minimum spacing between labels on same line
min_spacing = 2,
-- Dim background text during jump mode
dim_background = true,
-- Include all nodes (even tiny ones) - expert mode
all_nodes = false,
-- Advanced options (rarely need to change)
advanced = {
cancel_key = "<Esc>",
min_word_length = 0,
priority = 1000,
highlight = {
label = "NodejumperLabel",
dim = "NodejumperDim",
},
},
},
keys = {
{ "S", mode = { "n", "x", "o" }, function() require("nodejumper").jump() end, desc = "Jump to treesitter node" },
},
}You can customize the appearance by setting these highlight groups:
-- Labels (default: white on pink, bold)
vim.api.nvim_set_hl(0, "NodejumperLabel", { fg = "#ffffff", bg = "#ff007c", bold = true })
-- Dimmed text (default: gray)
vim.api.nvim_set_hl(0, "NodejumperDim", { fg = "#545c7e" })local nodejumper = require('nodejumper')
-- Start a jump session
nodejumper.jump()
-- Cancel active jump session
nodejumper.cancel()
-- Check if jump session is active
nodejumper.is_active()MIT