Home

Awesome

<p align="center"><a href="https://plugins.jetbrains.com/plugin/7086"> <img src="logo.png" alt="AceJumpLogo"></a></p> <p align="center"> <a href="https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub" title="JetBrains on GitHub"><img src="https://jb.gg/badges/team.svg"></a> <a href="https://github.com/acejump/AceJump/actions/workflows/build.yml" title="Build Plugin"><img src="https://github.com/acejump/AceJump/actions/workflows/build.yml/badge.svg"></a> <a href="https://plugins.jetbrains.com/plugin/7086-acejump" title="JetBrains Plugin"><img src="https://img.shields.io/jetbrains/plugin/v/7086-acejump.svg"></a> <a href="LICENSE" title="License"><img src="https://img.shields.io/badge/License-GPL%20v3-blue.svg"></a> <a href="https://twitter.com/search?q=AceJump&f=live" title="Twitter"><img src="https://img.shields.io/twitter/url/http/shields.io.svg?style=social"></a> </p>

AceJump is a plugin for the IntelliJ Platform that lets you jump to any symbol in the editor with just a few keystrokes. Press the keyboard shortcut for AceAction (<kbd>Ctrl</kbd>+<kbd>;</kbd> by default) to activate AceJump. Type any string in the editor, followed by one of the illustrated tags, to jump its position:

Press the AceJump shortcut a second time to activate Declaration Mode, which is equivalent to the Navigate To action in the IDE. Press the AceJump shortcut three times before completing a tag to activate Target Mode. Once Target Mode is activated, jumping to a tag will select an entire word. Target Mode can also be activated directly by pressing the shortcut for AceTargetAction (<kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>;</kbd> by default).

Press the AceJump shortcut for Line Mode(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>;</kbd> by default), to target the beginning, first non-whitespace, and last character of every line in the editor). Then jump to one by completing the tag.

Press the AceJump shortcut, followed by <kbd>β†’</kbd> to target the last, <kbd>←</kbd> to target the first, or <kbd>↑</kbd>, to target the first non-whitespace characters of every line in the editor.

Tips

Installing

AceJump can be installed directly from the IDE, via Settings | Plugins | Browse Repositories... | πŸ” "AceJump".

Configuring

IdeaVim users can choose to activate AceJump with a single keystroke (<kbd>f</kbd>, <kbd>F</kbd> and <kbd>g</kbd> are arbitrary) by running:

echo -e '

" Press `f` to activate AceJump
map f <Action>(AceAction)
" Press `F` to activate Target Mode
map F <Action>(AceTargetAction)
" Press `g` to activate Line Mode
map g <Action>(AceLineAction)

' >> ~/.ideavimrc

To customize AceJump's behavior further with additional actions, see the <action> tags in plugin.xml. The following example shows how to activate AceJump before or after the caret.

" Press `S` in normal mode to activate AceJump mode before the caret
nmap S <Action>(AceBackwardAction)

" Press `s` in normal mode to activate AceJump mode after the caret
nmap s <Action>(AceForwardAction)

To change the default keyboard shortcuts, open File | Settings | Keymap | πŸ” "AceJump" | AceJump | <kbd>Enter⏎</kbd>.

Keymap

Building

Prerequisites: JDK 8 or higher.

To build AceJump, clone and run the Gradle task buildPlugin like so:

The build artifact will be placed in build/distributions/.

Miscellaneous: AceJump is built using Gradle with the Gradle Kotlin DSL and the gradle-intellij-plugin.

Extending

AceJump can be used by other IntelliJ Platform plugins. To do so, add the following snippet to your build.gradle.kts file:

intellij {
  plugins.set("AceJump:<LATEST_VERSION>")
}

Callers who pass an instance of Editor into SessionManager.start(editor) will receive a Session instance in return. Sessions are disposed after use.

To use AceJump externally, please see the following example:

import org.acejump.session.SessionManager
import org.acejump.session.AceJumpListener
import org.acejump.boundaries.StandardBoundaries.*
import org.acejump.search.Pattern.*

val aceJumpSession = SessionManager.start(editorInstance)

aceJumpSession.addAceJumpListener(object: AceJumpListener {
  override fun finished() {
    // ...
  }
})

// Sessions provide these endpoints for external consumers:

/*1.*/ aceJumpSession.markResults(sortedSetOf(/*...*/)) // Pass a set of offsets
/*2.*/ aceJumpSession.startRegexSearch("[aeiou]+", WHOLE_FILE) // Search for regex
/*3.*/ aceJumpSession.startRegexSearch(ALL_WORDS, VISIBLE_ON_SCREEN) // Search for Pattern

Custom boundaries for search (i.e. current line before caret etc.) can also be defined using the Boundaries interface.

Contributing

AceJump is supported by community members like you. Contributions are highly welcome!

If you would like to contribute, here are a few of the ways you can help improve AceJump:

To start IntelliJ IDEA CE with AceJump installed, run ./gradlew runIde -PluginDev [-x test].

To just run the tests, execute ./gradlew test - this is usually much faster than starting an IDE.

For documentation on plugin development, see the IntelliJ Platform SDK.

Release notes

Please see here for a detailed list of changes.

Comparison

AceJump is inspired by prior work, but adds several improvements, including:

The following plugins have a similar UI for navigating text and web browsing:

Source CodeDownloadApplicationActively MaintainedLanguage
AceJump⬇IntelliJ Platform:heavy_check_mark:Kotlin
IdeaVim-EasyMotion⬇IntelliJ Platform:heavy_check_mark:Kotlin
KJump⬇IntelliJ Platform:heavy_check_mark:Kotlin
AceJump-Lite⬇IntelliJ Platform:x:Java
emacsIDEAs⬇IntelliJ Platform:x:Java
TraceJump⬇Desktop:x:Kotlin
ace-jump-mode⬇emacs:x:Emacs Lisp
avy⬇emacs:heavy_check_mark:Emacs Lisp
EasyMotion⬇Vim:x:Vimscript
eyeliner.nvim⬇NeoVim:heavy_check_mark:Lua
Hop⬇NeoVim:heavy_check_mark:Lua
leap.nvim⬇NeoVim:heavy_check_mark:Fennel
lightspeed.nvim⬇NeoVim:x:Fennel
Sublime EasyMotion⬇Sublime:x:Python
AceJump⬇Sublime:x:Python
Jumpy⬇Atom:heavy_check_mark:TypeScript
Jumpy2⬇Visual Studio Code:heavy_check_mark:TypeScript
Find-Jump⬇Visual Studio Code:x:TypeScript
MetaGo⬇Visual Studio Code:heavy_check_mark:TypeScript
VSCodeVim⬇Visual Studio Code:heavy_check_mark:TypeScript
CodeAceJumper⬇Visual Studio Code:x:TypeScript
AceJump⬇Visual Studio:x:C#
EasyMotion⬇Visual Studio:x:C#
tmux-fingers⬇tmux:heavy_check_mark:Crystal
tmux-thumb⬇tmux:heavy_check_mark:Rust
tmux-jump⬇tmux:heavy_check_mark:Ruby
tmux-copycat⬇tmux:x:Shell
cVim⬇Chrome:x:JavaScript
SurfingKeys⬇Chrome/Firefox/Edge:heavy_check_mark:JavaScript
Vimium⬇Chrome/Firefox/Edge:heavy_check_mark:JavaScript
Vimium-C⬇Chrome/Firefox/Edge:heavy_check_mark:TypeScript
Vrome⬇Chrome:x:CoffeeScript
ViChrome⬇Chrome:x:CoffeeScript
VimFx⬇Firefox:heavy_check_mark:CoffeeScript
Vimperator⬇Firefox:x:JavaScript
Pentadactyl⬇Firefox:x:JavaScript
Vim Vixen⬇Firefox 57+:heavy_check_mark:JavaScript
Tridactyl⬇Firefox 57+:heavy_check_mark:TypeScript
Vimari⬇Safari:x:JavaScript
Jump To Link⬇Obsidian:heavy_check_mark:TypeScript

Acknowledgements

The following individuals have significantly improved AceJump through their contributions and feedback:

AceJump is made possible by users just like you! If you enjoy using AceJump, please consider Contributing.

<!-- Badges -->