From 9d474722d5f687fc5690e8db427a4987a335a320 Mon Sep 17 00:00:00 2001 From: haya14busa Date: Fri, 10 Jan 2014 21:33:17 +0900 Subject: [PATCH] Support migemo & smartsign to SelectPhrase And some refactoring Escape '[' & ']' in s:findmotion for SelectPhrase --- autoload/EasyMotion.vim | 82 +++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 28 deletions(-) diff --git a/autoload/EasyMotion.vim b/autoload/EasyMotion.vim index 82bd7b2..e94e532 100644 --- a/autoload/EasyMotion.vim +++ b/autoload/EasyMotion.vim @@ -236,33 +236,58 @@ function! EasyMotion#SelectPhrase() "{{{ return endif + " Generate regexp {{{ + if chars[0] ==# chars[1] + let re = s:findMotion(chars[0]) + else + " Convert chars {{{ + " let g:EasyMotion_smartcase to 0 temporarily + let save_smart = g:EasyMotion_smartcase + let g:EasyMotion_smartcase = 0 + + let re1 = s:findMotion(chars[0]) + let re2 = s:findMotion(chars[1]) + + let g:EasyMotion_smartcase = save_smart + unlet save_smart + "}}} + + let re = re1 . '\|' . re2 + + if g:EasyMotion_smartcase && chars[0] =~# '\U' || chars[1] =~# '\U' + let re = '\c' . re + else + let re = '\C' . re + endif + endif + "}}} + + " Store original pos let orig_pos = [line('.'), col('.')] - if g:EasyMotion_smartcase && chars[0] =~# '\v\U' || chars[1] =~# '\v\U' - let re = '\c' - else - let re = '\C' - endif - - let re = re . escape(chars[0], '.$^~') . '\|' . escape(chars[1], '.$^~') + " First call s:EasyMotion(re, 2, '', '', 0, 0, 0, 0) if s:EasyMotion_cancelled keepjumps call cursor(orig_pos[0], orig_pos[1]) return '' - else - let pos1 = [line('.'), col('.')] - keepjumps call cursor(orig_pos[0], orig_pos[1]) - call s:EasyMotion(re, 2, '', '', 0, 0, 0, pos1) - if s:EasyMotion_cancelled - keepjumps call cursor(orig_pos[0], orig_pos[1]) - return '' - else - normal! v - keepjumps call cursor(pos1[0], pos1[1]) - normal! o - return 1 - endif endif + + " Store first pos + let pos1 = [line('.'), col('.')] + keepjumps call cursor(orig_pos[0], orig_pos[1]) + + " Second + call s:EasyMotion(re, 2, '', '', 0, 0, 0, pos1) + if s:EasyMotion_cancelled + keepjumps call cursor(orig_pos[0], orig_pos[1]) + return '' + endif + + " Success + normal! v + keepjumps call cursor(pos1[0], pos1[1]) + normal! o + return 1 endfunction "}}} function! EasyMotion#SelectPhraseYank() "{{{ let orig_pos = [line('.'), col('.')] @@ -431,12 +456,16 @@ endfunction " }}} " -- Find Motion Helper ------------------ function! s:findMotion(char) "{{{ " Find Motion: S,F,T - let re = escape(a:char, '.$^~\') + let re = escape(a:char, '.$^~\[]') if g:EasyMotion_use_migemo && a:char =~# '\a' let re = s:convertMigemo(re) endif + if s:useSmartsign(a:char) + let re = s:convertSmartsign(re, a:char) + endif + if g:EasyMotion_smartcase let re = s:convertSmartcase(re, a:char) endif @@ -456,10 +485,6 @@ endfunction "}}} function! s:convertSmartcase(re, char) "{{{ let re = a:re if a:char =~# '\U' "nonuppercase - if s:useSmartsign() - let re = s:convertSmartsign(a:re, a:char) - endif - return '\c' . re else "uppercase return '\C' . re @@ -475,9 +500,10 @@ function! s:convertSmartsign(re, char) "{{{ return re endif endfunction "}}} -function! s:useSmartsign() "{{{ - if exists('g:EasyMotion_use_smartsign_us') || - \ exists('g:EasyMotion_use_smartsign_jp') +function! s:useSmartsign(char) "{{{ + if (exists('g:EasyMotion_use_smartsign_us') || + \ exists('g:EasyMotion_use_smartsign_jp')) && + \ a:char =~# '\A' return 1 else return 0