Merge branch 'release/1.0.1' into develop
* release/1.0.1: Update comment header Make the motions work in visual mode Use substitute() for markers, works better with Unicode
This commit is contained in:
commit
4d6903a33a
@ -1,18 +1,17 @@
|
|||||||
" EasyMotion - vim motions on speed
|
" EasyMotion - Vim motions on speed!
|
||||||
"
|
"
|
||||||
" Author: Kim Silkebækken <kim.silkebaekken+github@gmail.com>
|
" Author: Kim Silkebækken <kim.silkebaekken+github@gmail.com>
|
||||||
" Source: https://github.com/Lokaltog/EasyMotion
|
" Source: https://github.com/Lokaltog/EasyMotion
|
||||||
" Version: 1.0
|
" Version: 1.0.1
|
||||||
" Modified: 2011-03-28
|
" Modified: 2011-03-28
|
||||||
"
|
"
|
||||||
" Heavily modified version of Bartlomiej Podolak's PreciseJump script:
|
" Based on Bartlomiej Podolak's PreciseJump script:
|
||||||
" http://www.vim.org/scripts/script.php?script_id=3437
|
" http://www.vim.org/scripts/script.php?script_id=3437
|
||||||
"
|
"
|
||||||
" This script addresses some issues with the original PreciseJump
|
" This script works correctly with the following motions in both normal
|
||||||
" script. It only works in normal mode (for now), and it works correctly
|
" and visual mode: f F t T w e b
|
||||||
" with the following motions: f F t T w e b
|
|
||||||
"
|
"
|
||||||
" Default key mapping:
|
" Default key mapping for both normal and visual mode:
|
||||||
" - <Leader> f {char}
|
" - <Leader> f {char}
|
||||||
" - <Leader> F {char}
|
" - <Leader> F {char}
|
||||||
" - <Leader> t {char}
|
" - <Leader> t {char}
|
||||||
@ -60,14 +59,21 @@
|
|||||||
" Default key mapping {{{
|
" Default key mapping {{{
|
||||||
if g:EasyMotion_do_mapping
|
if g:EasyMotion_do_mapping
|
||||||
nnoremap <silent> <Leader>f :call EasyMotionF(0)<CR>
|
nnoremap <silent> <Leader>f :call EasyMotionF(0)<CR>
|
||||||
|
vnoremap <silent> <Leader>f :<C-U>call EasyMotionF(0, visualmode())<CR>
|
||||||
nnoremap <silent> <Leader>F :call EasyMotionF(1)<CR>
|
nnoremap <silent> <Leader>F :call EasyMotionF(1)<CR>
|
||||||
|
vnoremap <silent> <Leader>F :<C-U>call EasyMotionF(1, visualmode())<CR>
|
||||||
|
|
||||||
nnoremap <silent> <Leader>t :call EasyMotionT(0)<CR>
|
nnoremap <silent> <Leader>t :call EasyMotionT(0)<CR>
|
||||||
|
vnoremap <silent> <Leader>t :<C-U>call EasyMotionT(0, visualmode())<CR>
|
||||||
nnoremap <silent> <Leader>T :call EasyMotionT(1)<CR>
|
nnoremap <silent> <Leader>T :call EasyMotionT(1)<CR>
|
||||||
|
vnoremap <silent> <Leader>T :<C-U>call EasyMotionT(1, visualmode())<CR>
|
||||||
|
|
||||||
nnoremap <silent> <Leader>w :call EasyMotionW()<CR>
|
nnoremap <silent> <Leader>w :call EasyMotionW()<CR>
|
||||||
|
vnoremap <silent> <Leader>w :<C-U>call EasyMotionW(visualmode())<CR>
|
||||||
nnoremap <silent> <Leader>e :call EasyMotionE()<CR>
|
nnoremap <silent> <Leader>e :call EasyMotionE()<CR>
|
||||||
|
vnoremap <silent> <Leader>e :<C-U>call EasyMotionE(visualmode())<CR>
|
||||||
nnoremap <silent> <Leader>b :call EasyMotionB()<CR>
|
nnoremap <silent> <Leader>b :call EasyMotionB()<CR>
|
||||||
|
vnoremap <silent> <Leader>b :<C-U>call EasyMotionB(visualmode())<CR>
|
||||||
endif
|
endif
|
||||||
" }}}
|
" }}}
|
||||||
" Initialize variables {{{
|
" Initialize variables {{{
|
||||||
@ -83,19 +89,19 @@
|
|||||||
" Motion functions {{{
|
" Motion functions {{{
|
||||||
" F key motions {{{
|
" F key motions {{{
|
||||||
" Go to {char} to the right or the left
|
" Go to {char} to the right or the left
|
||||||
function! EasyMotionF(direction)
|
function! EasyMotionF(direction, ...)
|
||||||
call <SID>Prompt('Search for character')
|
call <SID>Prompt('Search for character')
|
||||||
|
|
||||||
let char = getchar()
|
let char = getchar()
|
||||||
|
|
||||||
let re = '\C' . escape(nr2char(char), '.$^~')
|
let re = '\C' . escape(nr2char(char), '.$^~')
|
||||||
|
|
||||||
call <SID>EasyMotion(re, a:direction)
|
call <SID>EasyMotion(re, a:direction, a:0 > 0 ? a:1 : '')
|
||||||
endfunction
|
endfunction
|
||||||
" }}}
|
" }}}
|
||||||
" T key motions {{{
|
" T key motions {{{
|
||||||
" Go to {char} to the right (before) or the left (after)
|
" Go to {char} to the right (before) or the left (after)
|
||||||
function! EasyMotionT(direction)
|
function! EasyMotionT(direction, ...)
|
||||||
call <SID>Prompt('Search for character')
|
call <SID>Prompt('Search for character')
|
||||||
|
|
||||||
let char = getchar()
|
let char = getchar()
|
||||||
@ -106,25 +112,25 @@
|
|||||||
let re = '\C.' . escape(nr2char(char), '.$^~')
|
let re = '\C.' . escape(nr2char(char), '.$^~')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call <SID>EasyMotion(re, a:direction)
|
call <SID>EasyMotion(re, a:direction, a:0 > 0 ? a:1 : '')
|
||||||
endfunction
|
endfunction
|
||||||
" }}}
|
" }}}
|
||||||
" W key motions {{{
|
" W key motions {{{
|
||||||
" Beginning of word forward
|
" Beginning of word forward
|
||||||
function! EasyMotionW()
|
function! EasyMotionW(...)
|
||||||
call <SID>EasyMotion('\<.', 0)
|
call <SID>EasyMotion('\<.', 0, a:0 > 0 ? a:1 : '')
|
||||||
endfunction
|
endfunction
|
||||||
" }}}
|
" }}}
|
||||||
" E key motions {{{
|
" E key motions {{{
|
||||||
" End of word forward
|
" End of word forward
|
||||||
function! EasyMotionE()
|
function! EasyMotionE(...)
|
||||||
call <SID>EasyMotion('.\>', 0)
|
call <SID>EasyMotion('.\>', 0, a:0 > 0 ? a:1 : '')
|
||||||
endfunction
|
endfunction
|
||||||
" }}}
|
" }}}
|
||||||
" B key motions {{{
|
" B key motions {{{
|
||||||
" Beginning of word backward
|
" Beginning of word backward
|
||||||
function! EasyMotionB()
|
function! EasyMotionB(...)
|
||||||
call <SID>EasyMotion('\<.', 1)
|
call <SID>EasyMotion('\<.', 1, a:0 > 0 ? a:1 : '')
|
||||||
endfunction
|
endfunction
|
||||||
" }}}
|
" }}}
|
||||||
" }}}
|
" }}}
|
||||||
@ -163,10 +169,11 @@
|
|||||||
if ! has_key(lines, line_num)
|
if ! has_key(lines, line_num)
|
||||||
let current_line = getline(line_num)
|
let current_line = getline(line_num)
|
||||||
|
|
||||||
let lines[line_num] = { 'orig': current_line, 'marker': split(current_line, '\zs') }
|
let lines[line_num] = { 'orig': current_line, 'marker': current_line }
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let lines[line_num]['marker'][col_num - 1] = s:index_to_key[single_group ? element : current_group]
|
" Substitute marker character
|
||||||
|
let lines[line_num]['marker'] = substitute(lines[line_num]['marker'], '\%' . col_num . 'c.', s:index_to_key[single_group ? element : current_group], '')
|
||||||
|
|
||||||
" Add highlighting coordinates
|
" Add highlighting coordinates
|
||||||
call add(hl_coords, '\%' . line_num . 'l\%' . col_num . 'c')
|
call add(hl_coords, '\%' . line_num . 'l\%' . col_num . 'c')
|
||||||
@ -208,7 +215,7 @@
|
|||||||
catch
|
catch
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
call setline(line_num, join(line['marker'], ''))
|
call setline(line_num, line['marker'])
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
redraw
|
redraw
|
||||||
@ -267,9 +274,10 @@
|
|||||||
endif
|
endif
|
||||||
endtry
|
endtry
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
function! s:EasyMotion(regexp, direction) " {{{
|
function! s:EasyMotion(regexp, direction, ...) " {{{
|
||||||
let orig_pos = [line('.'), col('.')]
|
let orig_pos = [line('.'), col('.')]
|
||||||
let targets = []
|
let targets = []
|
||||||
|
let visualmode = a:0 > 0 ? a:1 : ''
|
||||||
|
|
||||||
" Find motion targets
|
" Find motion targets
|
||||||
while 1
|
while 1
|
||||||
@ -299,6 +307,9 @@
|
|||||||
|
|
||||||
call <SID>Message('No matches')
|
call <SID>Message('No matches')
|
||||||
|
|
||||||
|
" Restore cursor position
|
||||||
|
call setpos('.', [0, orig_pos[0], orig_pos[1]])
|
||||||
|
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -350,10 +361,34 @@
|
|||||||
" Cancelled by user
|
" Cancelled by user
|
||||||
call <SID>Message('Operation cancelled')
|
call <SID>Message('Operation cancelled')
|
||||||
|
|
||||||
|
" Restore cursor position/selection
|
||||||
|
if ! empty(visualmode)
|
||||||
|
silent exec 'normal! `<' . visualmode . '`>'
|
||||||
|
else
|
||||||
|
call setpos('.', [0, orig_pos[0], orig_pos[1]])
|
||||||
|
endif
|
||||||
|
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
" Jump to coords
|
if ! empty(visualmode)
|
||||||
call setpos('.', [0, coords[0], coords[1]])
|
" Store original marks
|
||||||
|
let m_a = getpos("'a")
|
||||||
|
let m_b = getpos("'b")
|
||||||
|
|
||||||
|
" Store start/end positions
|
||||||
|
call setpos("'a", [0, orig_pos[0], orig_pos[1]])
|
||||||
|
call setpos("'b", [0, coords[0], coords[1]])
|
||||||
|
|
||||||
|
" Update selection
|
||||||
|
silent exec 'normal! `a' . visualmode . '`b'
|
||||||
|
|
||||||
|
" Restore original marks
|
||||||
|
call setpos("'a", m_a)
|
||||||
|
call setpos("'b", m_b)
|
||||||
|
else
|
||||||
|
" Update cursor position
|
||||||
|
call setpos('.', [0, coords[0], coords[1]])
|
||||||
|
endif
|
||||||
|
|
||||||
call <SID>Message('Jumping to [' . coords[0] . ', ' . coords[1] . ']')
|
call <SID>Message('Jumping to [' . coords[0] . ', ' . coords[1] . ']')
|
||||||
endif
|
endif
|
||||||
|
Loading…
Reference in New Issue
Block a user