2014-02-05 07:02:56 -05:00
Vim motion on speed! [![Build Status ](https://travis-ci.org/Lokaltog/vim-easymotion.png?branch=master )](https://travis-ci.org/Lokaltog/vim-easymotion)
2014-01-30 07:32:28 -05:00
=====
2013-06-03 18:54:49 -04:00
2014-01-30 19:50:15 -05:00
![Animated demonstration ](https://f.cloud.github.com/assets/3797062/2039359/a8e938d6-899f-11e3-8789-60025ea83656.gif )
2014-02-09 12:41:45 -05:00
About the authors
2014-01-30 07:32:28 -05:00
=====
2014-02-09 12:41:45 -05:00
2014-01-30 07:32:28 -05:00
- Kim Silkebækken (https://github.com/Lokaltog)
2014-02-09 12:41:45 -05:00
- haya14busa (https://github.com/haya14busa) (since version 2.0)
2013-06-03 18:54:49 -04:00
2014-02-09 12:41:45 -05:00
The EasyMotion project was revived!
2014-01-30 07:32:28 -05:00
======
2014-02-09 12:41:45 -05:00
Since version 2.0 [haya14busa ](https://github.com/haya14busa ) took over the project from
[Lokaltog ](https://github.com/Lokaltog ). He improved the default motions, implemented many new useful features,
2014-01-30 07:32:28 -05:00
and fixed some bugs.
2013-06-03 18:54:49 -04:00
2014-02-09 12:41:45 -05:00
EasyMotion is now completely
2013-10-04 13:34:48 -04:00
2014-02-09 12:41:45 -05:00
- **Well-behaved**: It's consistent with the default motions of Vim and works well in all modes. And it now suports dot repeat.
- **Configurable**. You can easily configure its behavior and map it to any key you want.
2013-06-03 18:54:49 -04:00
2014-02-09 12:41:45 -05:00
Even though some default behaviors where modified and many new features where added, I carefully considered backward compatibility, so you can easily update and enjoy significant benefit!
2011-03-28 06:54:03 -04:00
2014-01-30 07:32:28 -05:00
Introduction
=====
2014-02-09 12:41:45 -05:00
2011-06-01 04:14:20 -04:00
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
2011-03-28 06:54:03 -04:00
jump directly to the target.
2011-06-01 04:14:20 -04:00
When one of the available motions is triggered, all visible text
preceding or following the cursor is faded, and motion targets are
2011-03-28 06:54:03 -04:00
highlighted.
2011-03-31 02:23:06 -04:00
EasyMotion is triggered by one of the provided mappings.
2011-03-28 06:54:03 -04:00
2014-02-09 12:41:45 -05:00
See `:help easymotion.txt` for more detail!
2014-01-30 07:32:28 -05:00
Important notes
=====
2011-04-07 04:29:03 -04:00
2014-02-09 12:41:45 -05:00
### Default bindings
2013-10-04 07:35:22 -04:00
**The default leader has been changed to `<Leader><Leader>` to avoid
conflicts with other plugins you may have installed.** This can easily be
2011-11-07 08:39:51 -05:00
changed back to pre-1.3 behavior by rebinding the leader in your vimrc:
2011-04-07 04:29:03 -04:00
2014-01-30 07:32:28 -05:00
```vim
map < Leader > < Plug > (easymotion-prefix)
```
All motions are now triggered with `<Leader>` by default, e.g.
`<Leader>s` , `<Leader>gE` .
2011-04-07 04:29:03 -04:00
2014-02-09 12:41:45 -05:00
### For users of the forked version
SelectLines and SelectPhrase are not related to *motion* , so I've moved them out
to seperate plugins.
2011-04-07 04:29:03 -04:00
2014-01-30 19:50:15 -05:00
- https://github.com/haya14busa/vim-easyoperator-line
- https://github.com/haya14busa/vim-easyoperator-phrase
2011-03-28 06:54:03 -04:00
2014-02-09 12:41:45 -05:00
Usage example for the base features
2014-01-30 07:32:28 -05:00
=====
2014-02-09 12:41:45 -05:00
< cursor > Lorem ipsum dolor sit amet.
2014-01-30 07:32:28 -05:00
Type `<Leader><Leader>w` (`< Plug > (easymotion-w)`) to trigger the word motion `w` . When the motion is
2011-06-01 04:14:20 -04:00
triggered, the text is updated (no braces are actually added, the text
2011-03-31 02:23:06 -04:00
is highlighted in red by default):
2011-03-28 06:54:03 -04:00
< 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.
2011-06-01 04:14:20 -04:00
Similarly, if you're looking for an "o", you can use the `f` motion.
2011-11-07 08:39:51 -05:00
Type `<Leader><Leader>fo` , and all "o" characters are highlighted:
2011-03-31 02:23:06 -04:00
< 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.
2011-06-01 04:14:20 -04:00
Jeffrey Way of Nettuts+ has also [written
a tutorial](http://net.tutsplus.com/tutorials/other/vim-essential-plugin-easymotion/)
2014-01-30 19:50:15 -05:00
about EasyMotion.
2011-03-28 06:54:03 -04:00
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
New features since 2.0
====
### Two key highlighting
When EasyMotion runs out of single characters to highlight movement targets, it now tells you
right away both keys you have press.
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
In previous versions you would see the same character repeated over and over again for distant
movement targets. You first had to type this key before the highlighting changed to expose the
next key you had to press.
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
### Bidirectional motions
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
All motions now come in a bidirectional variant (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 ](https://github.com/goldfeld/vim-seek )/[vim-sneak](https://github.com/justinmk/vim-sneak) with `<Plug>(easymotion-s2)` . For example you can highlight all words that start with `fu` .
2013-10-04 13:34:48 -04:00
2014-01-30 07:32:28 -05:00
![2-key-find-motion ](https://f.cloud.github.com/assets/3797062/2039612/7cafcec8-89a5-11e3-8f2c-5f26a6b83efd.gif )
2014-02-09 12:41:45 -05:00
2014-01-30 19:50:15 -05:00
```vim
2014-02-01 01:00:26 -05:00
" Gif config
2014-01-30 19:50:15 -05:00
nmap s < Plug > (easymotion-s2)
nmap t < Plug > (easymotion-t2)
```
2013-10-04 13:34:48 -04:00
2014-02-09 12:41:45 -05:00
### n-character search motion
2013-10-04 13:34:48 -04:00
2014-02-09 12:41:45 -05:00
You can also search for `n` characters, which basically can be used to replace the default search of Vim.
It suports incremental highlighting and you can use `<Tab>` and `<S-Tab>` to scroll down/up a page. If you press
`<CR>` you get the usual EasyMotion highlighting and can jump to any matching target destination with a
single keystroke.
What sounds complicated should become clear if you look at the following examples.
2013-10-04 13:34:48 -04:00
2014-01-30 07:32:28 -05:00
![n-key-motion-scroll ](https://f.cloud.github.com/assets/3797062/2039254/4fbf7276-899e-11e3-9bf3-1e446cabc097.gif )
2013-10-04 13:34:48 -04:00
2014-01-30 07:32:28 -05:00
![replace-search ](https://f.cloud.github.com/assets/3797062/2039751/64b72bd8-89a8-11e3-80ea-2a6b578040b2.gif )
2013-10-04 13:34:48 -04:00
2014-01-30 07:32:28 -05:00
```vim
2014-02-01 01:00:26 -05:00
" Gif config
2014-01-30 07:32:28 -05:00
map / < Plug > (easymotion-sn)
omap / < Plug > (easymotion-tn)
map n < Plug > (easymotion-next)
map N < Plug > (easymotion-prev)
```
2013-10-04 13:34:48 -04:00
2014-02-09 12:41:45 -05:00
### Within line motion
Every motion can also be restricted to the current line (e.g. `<Plug>(easymotion-sl)` ,
`<Plug>(easymotion-bd-wl)` , etc...). These motions match only the current line.
### hjkl motions
2013-10-04 13:34:48 -04:00
2014-02-09 12:41:45 -05:00
EasyMotion can be configured to avoid repetitive use of the `h` `j` `k` and `l` keys.
![hjkl-motoin ](https://f.cloud.github.com/assets/3797062/2039413/d8b32ab2-89a0-11e3-894f-3e81db084cfd.gif )
2013-10-04 13:34:48 -04:00
2014-01-30 07:32:28 -05:00
```vim
2014-02-01 01:00:26 -05:00
" Gif config
2014-01-30 07:32:28 -05:00
map < Leader > h < Plug > (easymotion-lineforward)
map < Leader > j < Plug > (easymotion-j)
map < Leader > k < Plug > (easymotion-k)
map < Leader > l < Plug > (easymotion-linebackward)
2013-10-04 13:34:48 -04:00
2014-01-30 07:32:28 -05:00
let g:EasyMotion_startofline = 0 " keep cursor colum when JK motion
```
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
### Smartcase & Smartsign
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
With this new setting EasyMotion works similar to Vim's smartcase option.
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
```vim
let g:EasyMotion_smartcase = 1
```
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
Type `v` to match `v` and `V` . Type `V` to match `V` only. Default: 0.
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
```vim
let g:EasyMotion_use_smartsign_us = 1 " US layout
" or
let g:EasyMotion_use_smartsign_jp = 1 " JP layout
```
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
Type `1` to match `1` and `!` . Type `!` to match `!` only. Default: 0.
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
### Migemo feature (for Japanese user)
2013-12-21 09:58:24 -05:00
2014-01-30 07:32:28 -05:00
```vim
2014-02-09 12:41:45 -05:00
let g:EasyMotion_use_migemo = 1
2014-01-30 07:32:28 -05:00
```
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
2014-02-01 01:06:37 -05:00
Easymotion can match multibyte Japanese characters with a alphabet input.
For example, `<Leader><Leader>sa` can search 'あ'.
2014-01-30 07:32:28 -05:00
This feature doesn't require cmigemo because Easymotion includes regex
patterns generated by cmigemo. However if you installed `cmigemo` ,
2014-02-09 12:41:45 -05:00
2-character and n-character search motions also support the migemo feature.
Default:0
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
### Repeat motions
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
#### Repeat the last motion
2013-12-21 09:58:24 -05:00
2014-02-09 12:41:45 -05:00
`<Plug>(easymotion-repeat)`
2014-01-30 19:50:15 -05:00
2014-02-09 12:41:45 -05:00
#### Repeat the last find motion
2014-01-30 19:50:15 -05:00
2014-02-09 12:41:45 -05:00
In a find motion (e.g. `<Plug>(easymotion-s)` ), type `<CR>` without
input characters to find the last motion again.
2014-01-30 19:50:15 -05:00
2014-02-09 12:41:45 -05:00
#### Jump to next/previous match (even on next/previous page)
2014-01-30 07:32:28 -05:00
2014-02-09 12:41:45 -05:00
* `<Plug>(easymotion-next)`
* `<Plug>(easymotion-prev)`
2014-01-30 07:32:28 -05:00
2014-02-09 12:41:45 -05:00
#### Support for dot repeat
2014-01-30 19:50:15 -05:00
2014-02-09 12:41:45 -05:00
This requires https://github.com/tpope/vim-repeat.
2014-01-30 19:50:15 -05:00
You can use EasyMotion in operator-pending and press `.` to repeat!
It is well-behaved, consistent with default behavior of Vim.
2014-01-30 07:32:28 -05:00
![repeat-motion ](https://f.cloud.github.com/assets/3797062/2039538/0aef66aa-89a4-11e3-8242-c27a5208cfca.gif )
```vim
2014-02-01 01:00:26 -05:00
" Gif config
2014-01-30 07:32:28 -05:00
" Require tpope/vim-repeat to enable dot repeat support
" Jump to anywhere with only `s{char}{target}`
" `s<CR>` repeat last find motion.
nmap s < Plug > (easymotion-s)
" Bidirectional & within line 't' motion
omap t < Plug > (easymotion-bd-tl)
" Use uppercase target labels and type as a lower case
let g:EasyMotion_use_upper = 1
" type `l` and match `l` & `L`
let g:EasyMotion_smartcase = 1
" Smartsign (type `3` and match `3` & `#`)
let g:EasyMotion_use_smartsign_us = 1
```