Improve iskeyword word motions

- Make within line word motion compatible with iskeyword by default
- Add test
- Update doc
- Thanks @yuex: #101
This commit is contained in:
haya14busa 2014-02-18 13:54:44 +09:00
parent 23bb024632
commit 3f423c28c9
3 changed files with 69 additions and 17 deletions

View File

@ -3,7 +3,7 @@
" Author: Kim Silkebækken <kim.silkebaekken+vim@gmail.com>
" haya14busa <hayabusa1419@gmail.com>
" Source: https://github.com/Lokaltog/vim-easymotion
" Last Change: 16 Feb 2014.
" Last Change: 18 Feb 2014.
"=============================================================================
" Saving 'cpoptions' {{{
scriptencoding utf-8
@ -232,12 +232,12 @@ function! EasyMotion#TL(num_strokes, visualmode, direction) " {{{
endfunction " }}}
function! EasyMotion#WBL(visualmode, direction) " {{{
let s:flag.within_line = 1
call EasyMotion#WB(a:visualmode, a:direction)
call EasyMotion#WBK(a:visualmode, a:direction)
return s:EasyMotion_is_cancelled
endfunction " }}}
function! EasyMotion#EL(visualmode, direction) " {{{
let s:flag.within_line = 1
call EasyMotion#E(a:visualmode, a:direction)
call EasyMotion#EK(a:visualmode, a:direction)
return s:EasyMotion_is_cancelled
endfunction " }}}
function! EasyMotion#LineAnywhere(visualmode, direction) " {{{

View File

@ -1,4 +1,4 @@
*easymotion.txt* Version 2.0 Last change:14 Feb 2014.
*easymotion.txt* Version 2.0 Last change:18 Feb 2014.
______ __ ___ __ _
@ -152,7 +152,15 @@ EasyMotion <Plug> table *easymotion-plug-table*
<Plug>(easymotion-next) | See |<Plug>(easymotion-next)|
<Plug>(easymotion-previous) | See |<Plug>(easymotion-previous)|
<Plug>(easymotion-sol-j) | See |<Plug>(easymotion-sol-j)|
<Plug>(easymotion-sol-k) | See |<Plug>(easymotion-sol-k)|
<Plug>(easymotion-eol-j) | See |<Plug>(easymotion-eol-j)|
<Plug>(easymotion-eol-k) | See |<Plug>(easymotion-eol-k)|
<Plug>(easymotion-iskeyword-w) | See |<Plug>(easymotion-iskeyword-w)|
<Plug>(easymotion-iskeyword-b) | See |<Plug>(easymotion-iskeyword-b)|
<Plug>(easymotion-iskeyword-bd-w) | See |<Plug>(easymotion-iskeyword-bd-w)|
<Plug>(easymotion-iskeyword-e) | See |<Plug>(easymotion-iskeyword-e)|
<Plug>(easymotion-iskeyword-ge) | See |<Plug>(easymotion-iskeyword-ge)|
<Plug>(easymotion-iskeyword-bd-e) | See |<Plug>(easymotion-iskeyword-bd-e)|
|
Within Line Motion | See |easymotion-within-line|
----------------------------------|---------------------------------
@ -360,6 +368,26 @@ End of Line JK motion *<Plug>(easymotion-eol-j)* *<Plug>(easymotion-eol-k)
>
map <Leader>J <Plug>(easymotion-eol-j)
map <Leader>K <Plug>(easymotion-eol-K)
<
iskeyword compatible word motions *<Plug>(easymotion-iskeyword-w)*
*<Plug>(easymotion-iskeyword-b)*
*<Plug>(easymotion-iskeyword-bd-w)*
*<Plug>(easymotion-iskeyword-e)*
*<Plug>(easymotion-iskeyword-ge)*
*<Plug>(easymotion-iskeyword-bd-e)*
Default word motions which EasyMotion provide is not completely
compatible with |iskeyword| options. But if you make default word
motion completely compatible with it, there will be so many targets
that they maybe annoy you, so provide |iskeyword| compatible word
motions with another |<Plug>| mappings.
Example:
>
map <Leader>w <Plug>(easymotion-iskeyword-w)
map <Leader>b <Plug>(easymotion-iskeyword-b)
<
NOTE: Within line motions are compatible with |iskeyword| by default.
Within line motion ~
*easymotion-within-line*
@ -390,28 +418,28 @@ Within line motion ~
range is limited to the current cursor line.
<Plug>(easymotion-wl) *<Plug>(easymotion-wl)*
This function is same as |<Plug>(easymotion-w)|, except the
range is limited to the current cursor line.
This function is same as |<Plug>(easymotion-iskeyword-w)|,
except the range is limited to the current cursor line.
<Plug>(easymotion-bl) *<Plug>(easymotion-bl)*
This function is same as |<Plug>(easymotion-b)|, except the
range is limited to the current cursor line.
This function is same as |<Plug>(easymotion-iskeyword-b)|,
except the range is limited to the current cursor line.
<Plug>(easymotion-bd-wl) *<Plug>(easymotion-bd-wl)*
This function is same as |<Plug>(easymotion-bd-w)|, except the
range is limited to the current cursor line.
This function is same as |<Plug>(easymotion-iskeyword-bd-w)|,
except the range is limited to the current cursor line.
<Plug>(easymotion-el) *<Plug>(easymotion-el)*
This function is same as |<Plug>(easymotion-e)|, except the
range is limited to the current cursor line.
This function is same as |<Plug>(easymotion-iskeyword-e)|,
except the range is limited to the current cursor line.
<Plug>(easymotion-gel) *<Plug>(easymotion-gel)*
This function is same as |<Plug>(easymotion-ge)|, except the
range is limited to the current cursor line.
This function is same as |<Plug>(easymotion-iskeyword-ge)|,
except the range is limited to the current cursor line.
<Plug>(easymotion-bd-el) *<Plug>(easymotion-bd-el)*
This function is same as |<Plug>(easymotion-bd-e)|, except the
range is limited to the current cursor line.
This function is same as |<Plug>(easymotion-iskeyword-bd-e)|,
except the range is limited to the current cursor line.
<Plug>(easymotion-lineforward) *<Plug>(easymotion-lineforward)*
This function is similar to

View File

@ -1,7 +1,7 @@
"=============================================================================
" FILE: t/easymotion_spec.vim
" AUTHOR: haya14busa
" Last Change: 12 Feb 2014.
" Last Change: 18 Feb 2014.
" Test: https://github.com/kana/vim-vspec
" Refer: https://github.com/rhysd/clever-f.vim
" Description: EasyMotion test with vim-vspec
@ -242,6 +242,18 @@ describe 'Default settings'
Expect maparg('<Plug>(easymotion-bd-W)', 'v') ==# '<Esc>:<C-U>call EasyMotion#WBW(1,2)<CR>'
" }}}
" Word Motion IsKeyWord: {{{
Expect maparg('<Plug>(easymotion-iskeyword-w)', 'n') ==# ':<C-U>call EasyMotion#WBK(0,0)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-w)', 'o') ==# ':<C-U>call EasyMotion#WBK(0,0)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-w)', 'v') ==# '<Esc>:<C-U>call EasyMotion#WBK(1,0)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-b)', 'n') ==# ':<C-U>call EasyMotion#WBK(0,1)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-b)', 'o') ==# ':<C-U>call EasyMotion#WBK(0,1)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-b)', 'v') ==# '<Esc>:<C-U>call EasyMotion#WBK(1,1)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-bd-w)', 'n') ==# ':<C-U>call EasyMotion#WBK(0,2)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-bd-w)', 'o') ==# ':<C-U>call EasyMotion#WBK(0,2)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-bd-w)', 'v') ==# '<Esc>:<C-U>call EasyMotion#WBK(1,2)<CR>'
" }}}
" End Of Word Motion: {{{
Expect maparg('<Plug>(easymotion-e)', 'n') ==# ':<C-U>call EasyMotion#E(0,0)<CR>'
Expect maparg('<Plug>(easymotion-e)', 'o') ==# ':<C-U>call EasyMotion#E(0,0)<CR>'
@ -266,6 +278,18 @@ describe 'Default settings'
Expect maparg('<Plug>(easymotion-bd-E)', 'v') ==# '<Esc>:<C-U>call EasyMotion#EW(1,2)<CR>'
" }}}
" End Of Word Motion IsKeyWord: {{{
Expect maparg('<Plug>(easymotion-iskeyword-e)', 'n') ==# ':<C-U>call EasyMotion#EK(0,0)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-e)', 'o') ==# ':<C-U>call EasyMotion#EK(0,0)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-e)', 'v') ==# '<Esc>:<C-U>call EasyMotion#EK(1,0)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-ge)', 'n') ==# ':<C-U>call EasyMotion#EK(0,1)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-ge)', 'o') ==# ':<C-U>call EasyMotion#EK(0,1)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-ge)', 'v') ==# '<Esc>:<C-U>call EasyMotion#EK(1,1)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-bd-e)', 'n') ==# ':<C-U>call EasyMotion#EK(0,2)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-bd-e)', 'o') ==# ':<C-U>call EasyMotion#EK(0,2)<CR>'
Expect maparg('<Plug>(easymotion-iskeyword-bd-e)', 'v') ==# '<Esc>:<C-U>call EasyMotion#EK(1,2)<CR>'
" }}}
" JK Motion: {{{
" default
Expect maparg('<Plug>(easymotion-j)', 'n') ==# ':<C-U>call EasyMotion#JK(0,0)<CR>'