An excerpt from the repository, fetched Nov 13, 2026.
Read the project’s introduction
Vim motion on speed!
About the authors
Authors
Kim Silkebækken
https://github.com/Lokaltog
haya14busa
https://github.com/haya14busa
The EasyMotion project, revived!
Starting from version 2.0 haya14busa will be
taking over the project from Lokaltog. He's
improved the default motions, implemented many useful new features, and fixed
some bugs.
EasyMotion is now completely:
Well-behaved: It's consistent with the default motions of Vim and works
well in all modes. And it now supports repeating with the dot operator.
Configurable: You can easily configure its behavior and map it to any key
Sophisticated: Provide flawless, smooth and fast motions with minimal keystrokes
Even though some default behaviors were modified and many new features were
added, I carefully considered backward compatibility. So those of you updating
from older versions can do so without worry and start benefiting immediately
from all the new features!
Introduction
EasyMotion provides a much simpler way to use some motions in vim. It
takes the <number> out of <number>w or <number>f{char} by
highlighting all possible choices and allowing you to press one key to
jump directly to the target.
When one of the available motions is triggered, all visible text
preceding or following the cursor is faded, and motion targets are
highlighted.
EasyMotion is triggered by the provided mappings. This readme only covers the
basics; please refer to
:help easymotion.txt
to see all the available mappings.
Important notes
Default bindings
The default leader has been changed to <Leader><Leader> to avoid
conflicts with other plugins you may have installed. This can easily be
changed back to pre-1.3 behavior by rebinding the leader in your vimrc:
map <Leader> <Plug>(easymotion-prefix)
All motions will then be triggered with <Leader> by default, e.g.
<Leader>s, <Leader>gE.
For users of the forked version
SelectLines and SelectPhrase are not actually motions, so I've moved them into
separate plugins.
https://github.com/haya14busa/vim-easyoperator-line
https://github.com/haya14busa/vim-easyoperator-phrase
Usage example for the base features
<cursor>Lorem ipsum dolor sit amet.
Type <Leader><Leader>w(<Plug>(easymotion-w)) to trigger the word motion w.
When the motion is triggered, the text is updated (no braces are actually added,
the text is highlighted in red by default):
<cursor>Lorem {a}psum {b}olor {c}it {d}met.
Press c to jump to the beginning of the word "sit":
Lorem ipsum dolor <cursor>sit amet.
Similarly, if you're looking for an "o", you can use the f motion.
Type <Leader><Leader>fo, and all "o" characters are highlighted:
<cursor>L{a}rem ipsum d{b}l{c}r sit amet.
Press b to jump to the second "o":
Lorem ipsum d<cursor>olor sit amet.
Jeffrey Way of Nettuts+ has also written
a tutorial
about EasyMotion.
New features in version 3.0
Overwin motions
EasyMotion now supports moving cursor across/over window.
Since it doesn't make sense that moving cursor to other window while Visual or
Operator-pending mode, overwin motions only provides mappings for Normal
mode. Please use nmap to use overwin motions. Overwin motions only
supports bi-directional motions.
Example configuration
" <Leader>f{char} to move to {char}
map <Leader>f <Plug>(easymotion-bd-f)
nmap <Leader>f <Plug>(easymotion-overwin-f)
" s{char}{char} to move to {char}{char}
nmap s <Plug>(easymotion-overwin-f2)
" Move to line
map <Leader>L <Plug>(easymotion-bd-jk)
nmap <Leader>L <Plug>(easymotion-overwin-line)
" Move to word
map <Leader>w <Plug>(easymotion-bd-w)
nmap <Leader>w <Plug>(easymotion-overwin-w)
Integration with incsearch.vim
haya14busa/incsearch.vim
haya14busa/incsearch-easymotion.vim
" You can use other keymappings like <C-l> instead of <CR> if you want to
" use these mappings as default search and sometimes want to move cursor with
" EasyMotion.
function! s:incsearch_config(...) abort
return incsearch#util#deepextend(deepcopy({
\ 'modules': [incsearch#config#easymotion#module({'overwin': 1})],
\ 'keymap': {
\ "\<CR>": '<Over>(easymotion)'
\ },
\ 'is_expr': 0
\ }), get(a:, 1, {}))
endfunction
noremap <silent><expr> / incsearch#go(<SID>incsearch_config())
noremap <silent><expr> ? incsearch#go(<SID>incsearch_config({'command': '?'}))
noremap <silent><expr> g/ incsearch#go(<SID>incsearch_config({'is_stay': 1}))
Bonus fuzzy-search with EasyMotion
haya14busa/incsearch.vim
haya14busa/incsearch-fuzzy.vim
haya14busa/incsearch-easymotion.vim
function! s:config_easyfuzzymotion(...) abort
return extend(copy({
\ 'converters': [incsearch#config#fuzzyword#converter()],
\ 'modules': [incsearch#config#easymotion#module({'overwin': 1})],
\ 'keymap': {"\<CR>": '<Over>(easymotion)'},
\ 'is_expr': 0,
\ 'is_stay': 1
\ }), get(a:, 1, {}))
endfunction
noremap <silent><expr> <Space>/ incsearch#go(<SID>config_easyfuzzymotion())
New features in version 2.0
Two key highlighting
When EasyMotion runs out of single characters to highlight movement targets, it
immediately shows you the keys you have to press.
In previous versions you could not see the next character you would need to
press until you entered the first one. This made movement over long distances
less fluid. Now you can see at a glance exactly which characters to select to
get to your destination.
Bidirectional motions
All motions now come in bidirectional variants (e.g. <Plug>(easymotion-s),
<Plug>(easymotion-bd-w) and so forth).
By default, you can already jump forward or backward with <Leader>s. A useful
trick is to map nmap s <Plug>(easymotion-s) to use s instead and save one
keystroke!
2-character search motion
You can now also perform a 2-character search, similar to vim-seek/vim-sneak with <Plug>(easymotion-s2). For example, you can highlight all words that start with fu.
" Gif config
nmap s <Plug>(easymotion-s2)
nmap t <Plug>(easymotion-t2)
n-character search motion
You can also search for n characters, which can be used to replace the default sea
Read the full README on GitHub