mini.jump documentation

Generated from the main branch of ‘mini.nvim’

mini.jump Jump to next/previous single character

MIT License Copyright (c) 2021 Evgeni Chasnovski, Adam Blažek


Module

Features:

  • Extend f, F, t, T to work on multiple lines.

  • Repeat jump by pressing f, F, t, T again. It is reset when cursor moved as a result of not jumping or timeout after idle time (duration customizable).

  • Highlight (after customizable delay) all possible target characters and stop it after some (customizable) idle time.

  • Normal, Visual, and Operator-pending (with full dot-repeat) modes are supported.

This module follows vim’s ‘ignorecase’ and ‘smartcase’ options. When ‘ignorecase’ is set, f, F, t, T will match case-insensitively. When ‘smartcase’ is also set, f, F, t, T will only match lowercase characters case-insensitively.

Setup

This module needs a setup with require('mini.jump').setup({}) (replace {} with your config table). It will create global Lua table MiniJump which you can use for scripting or manually (with :lua MiniJump.*).

See MiniJump.config for config structure and default values.

You can override runtime config settings locally to buffer inside vim.b.minijump_config which should have same structure as MiniJump.config. See mini.nvim-buffer-local-config for more details.

To stop module from showing non-error feedback, set config.silent = true.

Highlight groups

  • MiniJump - all possible cursor positions.

To change any highlight group, set it directly with nvim_set_hl().

Disabling

To disable core functionality, set vim.g.minijump_disable (globally) or vim.b.minijump_disable (for a buffer) to true. Considering high number of different scenarios and customization intentions, writing exact rules for disabling module’s functionality is left to user. See mini.nvim-disabling-recipes for common recipes.


Events

To allow user customization and integration of external tools, certain User autocommand events are triggered under common circumstances:

  • MiniJumpGetTarget - before asking user for the target. Use MiniJump.state for more information about the upcoming jump.

  • MiniJumpStart - after jumping has started.

  • MiniJumpJump - after performing a jump.

  • MiniJumpStop - after jumping is stopped.


setup()

MiniJump.setup({config})

Module setup

Parameters

{config} (table|nil) Module config table. See MiniJump.config.

Usage

require('mini.jump').setup() -- use default config
-- OR
require('mini.jump').setup({}) -- replace {} with your config table

config

MiniJump.config

Defaults

MiniJump.config = {
  -- Module mappings. Use `''` (empty string) to disable one.
  mappings = {
    forward = 'f',
    backward = 'F',
    forward_till = 't',
    backward_till = 'T',
    repeat_jump = ';',
  },

  -- Delay values (in ms) for different functionalities. Set any of them to
  -- a very big number (like 10^7) to virtually disable.
  delay = {
    -- Delay between jump and highlighting all possible jumps
    highlight = 250,

    -- Delay between jump and automatic stop if idle (no jump is done)
    idle_stop = 10000000,
  },

  -- Whether to disable showing non-error feedback
  -- This also affects (purely informational) helper messages shown after
  -- idle time if user input is required.
  silent = false,
}

state

MiniJump.state

Data about jumping state

It stores various information used in this module. All elements, except jumping, is about the latest jump. They are used as default values for similar arguments.

Usage

This can be used to define mappings which depend on state; either as a standalone mapping or part of MiniKeymap.map_multistep(). For example:

-- Stop jumping after pressing `<Esc>`
local jump_stop = function()
  if not MiniJump.state.jumping then return '<Esc>' end
  MiniJump.stop_jumping()
end
local opts = { expr = true, desc = 'Stop jumping' }
vim.keymap.set({ 'n', 'x', 'o' }, '<Esc>', jump_stop, opts)

Class

{JumpingState}

Fields

{target} (string|nil) The string to jump to.

{backward} (boolean|nil) Whether to jump backward.

{till} (boolean|nil) Whether to jump just before/after the match instead of exactly on target. This includes positioning cursor past the end of previous/current line. Note that with backward jump this might lead to cursor being on target if can’t be put past the line.

{n_times} (number|nil) Number of times to perform consecutive jumps.

{mode} (string) Mode of latest jump (output of mode() with non-zero argument).

{jumping} (boolean) Whether module is currently in “jumping mode”: usage of MiniJump.smart_jump() and all mappings won’t require target.

Initial values:

MiniJump.state = {
  target = nil,
  backward = false,
  till = false,
  n_times = 1,
  mode = nil,
  jumping = false,
}

jump()

MiniJump.jump({target}, {backward}, {till}, {n_times})

Jump to target

Takes a string and jumps to its first occurrence in desired direction.

All default values are taken from MiniJump.state to emulate latest jump.

Parameters

{target} (string|nil) The string to jump to.

{backward} (boolean|nil) Whether to jump backward.

{till} (boolean|nil) Whether to jump just before/after the match instead of exactly on target. This includes positioning cursor past the end of previous/current line. Note that with backward jump this might lead to cursor being on target if can’t be put past the line.

{n_times} (number|nil) Number of times to perform consecutive jumps.


smart_jump()

MiniJump.smart_jump({backward}, {till})

Make smart jump

If the last movement was a jump, perform another jump with the same target. Otherwise, wait for a target input (via getcharstr()). Respects v:count.

All default values are taken from MiniJump.state to emulate latest jump.

Parameters

{backward} (boolean|nil) Whether to jump backward.

{till} (boolean|nil) Whether to jump just before/after the match instead of exactly on target. This includes positioning cursor past the end of previous/current line. Note that with backward jump this might lead to cursor being on target if can’t be put past the line.


stop_jumping()

MiniJump.stop_jumping()

Stop jumping

Removes highlights (if any) and forces the next smart jump to prompt for the target. Automatically called on appropriate Neovim events.