- Fuse search() and available_labels() into a single scan() pass.
Drops the line_index bookkeeping field on match records and one
full traversal of the visible buffer.
- Replace the separate LABELS array with direct indexing into
M.config.labels (a string, ~26 ASCII chars). One less parallel
data structure; no fn.split at setup, no bottom-of-file auto-setup
call needed.
- Label picker switched from nested O(M*L) scan to an O(M+L) cursor
walk. No more double-duty 'avail' set acting as both conflict-set
and consumed-label marker.
- Termcode constants consolidated into a K = { ... } table using
vim.keycode.
- Normalize module state: CONFIG -> M.config.
- Collapse 'if opts then extend end' to 'opts or {}'.
- Fix: hoist create_augroup out of the table-valued label branch so
a second setup() call with a string label clears any stale autocmd
from a prior table-valued call.
- Drop redundant '#line > 0' guard in scan (string.find handles
empty lines correctly).
Net: 186 -> 148 lines. Public API unchanged.
tiny-jump.nvim
A tiny, no-nonsense jump plugin for Neovim. Press a key to trigger, type
one or more characters to narrow the matches, then press the label to
jump. Like / but you don't have to n your way to the match you
actually wanted.
Credit and history
This plugin is a fork of yorickpeterse/nvim-jump, which is excellent and which I used happily for a long time. Big thanks to the original author for a clean, focused implementation.
I forked it because I wanted to pass label highlight attributes directly
to setup() (instead of having to define a separate highlight group and
re-apply it on every colorscheme change). I submitted that as a PR but
it was declined, which is the maintainer's right — the upstream plugin
is explicitly considered feature-complete. See the closed PR for
context: https://github.com/yorickpeterse/nvim-jump/pull/8.
Since the upstream code is MPL-2.0, a fork is fair game. This plugin is
a tiny extension of it — same core behavior, plus a slightly friendlier
highlight API — maintained under the tiny-* family of my other
Neovim plugins.
Requirements
- Neovim 0.11.0 or newer.
Install & basic usage
With vim.pack (Neovim 0.12+):
vim.pack.add({ 'https://github.com/swaits/tiny-jump.nvim' })
vim.keymap.set({ 'n', 'x', 'o' }, 's', require('tiny-jump').start)
Any plugin manager works — just point it at this repo and map
require('tiny-jump').start to a key.
Configuration
All settings are optional. Defaults:
require('tiny-jump').setup({
-- Labels that may be used, in order of preference.
labels = 'fdsaghjklrewqtyuiopvcxzbnm',
-- Highlight group used for match highlights (before labels are shown).
search = 'Search',
-- Highlight for labels. Accepts a group name (string) or a table of
-- `nvim_set_hl` attributes.
label = 'IncSearch',
})
Label colors
Point label at any existing highlight group:
require('tiny-jump').setup({ label = 'IncSearch' })
Or pass attributes inline and let the plugin manage the group for you.
It creates an internal TinyJumpLabel group and re-applies it on
ColorScheme so your colors survive theme changes:
require('tiny-jump').setup({
label = { fg = '#ffff00', bg = '#000000', bold = true },
})
Colemak
require('tiny-jump').setup({
labels = 'tnseriaogmplfuwyqbjdhvkzxc',
})
License
MPL-2.0, inherited from the upstream project. See LICENSE.