mirror of
https://github.com/amix/vimrc
synced 2025-07-04 15:04:59 +08:00
Adding submodules and stuff.
This commit is contained in:
1
sources_non_forked/vim-easymotion/.gitignore
vendored
Normal file
1
sources_non_forked/vim-easymotion/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
doc/tags
|
52
sources_non_forked/vim-easymotion/README.md
Normal file
52
sources_non_forked/vim-easymotion/README.md
Normal file
@ -0,0 +1,52 @@
|
||||
# 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 one of the provided mappings.
|
||||
|
||||
# Important notes about the 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:
|
||||
|
||||
let g:EasyMotion_leader_key = '<Leader>'
|
||||
|
||||
All motions are now triggered with `<Leader><Leader>` by default, e.g.
|
||||
`<Leader><Leader>t`, `<Leader><Leader>gE`.
|
||||
|
||||
## Usage example
|
||||
|
||||
Type `<Leader><Leader>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](http://net.tutsplus.com/tutorials/other/vim-essential-plugin-easymotion/)
|
||||
about EasyMotion.
|
||||
|
||||
## Animated demonstration
|
||||
|
||||

|
573
sources_non_forked/vim-easymotion/autoload/EasyMotion.vim
Normal file
573
sources_non_forked/vim-easymotion/autoload/EasyMotion.vim
Normal file
@ -0,0 +1,573 @@
|
||||
" EasyMotion - Vim motions on speed!
|
||||
"
|
||||
" Author: Kim Silkebækken <kim.silkebaekken+vim@gmail.com>
|
||||
" Source repository: https://github.com/Lokaltog/vim-easymotion
|
||||
|
||||
" Default configuration functions {{{
|
||||
function! EasyMotion#InitOptions(options) " {{{
|
||||
for [key, value] in items(a:options)
|
||||
if ! exists('g:EasyMotion_' . key)
|
||||
exec 'let g:EasyMotion_' . key . ' = ' . string(value)
|
||||
endif
|
||||
endfor
|
||||
endfunction " }}}
|
||||
function! EasyMotion#InitHL(group, colors) " {{{
|
||||
let group_default = a:group . 'Default'
|
||||
|
||||
" Prepare highlighting variables
|
||||
let guihl = printf('guibg=%s guifg=%s gui=%s', a:colors.gui[0], a:colors.gui[1], a:colors.gui[2])
|
||||
if !exists('g:CSApprox_loaded')
|
||||
let ctermhl = &t_Co == 256
|
||||
\ ? printf('ctermbg=%s ctermfg=%s cterm=%s', a:colors.cterm256[0], a:colors.cterm256[1], a:colors.cterm256[2])
|
||||
\ : printf('ctermbg=%s ctermfg=%s cterm=%s', a:colors.cterm[0], a:colors.cterm[1], a:colors.cterm[2])
|
||||
else
|
||||
let ctermhl = ''
|
||||
endif
|
||||
|
||||
" Create default highlighting group
|
||||
execute printf('hi default %s %s %s', group_default, guihl, ctermhl)
|
||||
|
||||
" Check if the hl group exists
|
||||
if hlexists(a:group)
|
||||
redir => hlstatus | exec 'silent hi ' . a:group | redir END
|
||||
|
||||
" Return if the group isn't cleared
|
||||
if hlstatus !~ 'cleared'
|
||||
return
|
||||
endif
|
||||
endif
|
||||
|
||||
" No colors are defined for this group, link to defaults
|
||||
execute printf('hi default link %s %s', a:group, group_default)
|
||||
endfunction " }}}
|
||||
function! EasyMotion#InitMappings(motions) "{{{
|
||||
for motion in keys(a:motions)
|
||||
call EasyMotion#InitOptions({ 'mapping_' . motion : g:EasyMotion_leader_key . motion })
|
||||
endfor
|
||||
|
||||
if g:EasyMotion_do_mapping
|
||||
for [motion, fn] in items(a:motions)
|
||||
if empty(g:EasyMotion_mapping_{motion})
|
||||
continue
|
||||
endif
|
||||
|
||||
silent exec 'nnoremap <silent> ' . g:EasyMotion_mapping_{motion} . ' :call EasyMotion#' . fn.name . '(0, ' . fn.dir . ')<CR>'
|
||||
silent exec 'onoremap <silent> ' . g:EasyMotion_mapping_{motion} . ' :call EasyMotion#' . fn.name . '(0, ' . fn.dir . ')<CR>'
|
||||
silent exec 'vnoremap <silent> ' . g:EasyMotion_mapping_{motion} . ' :<C-U>call EasyMotion#' . fn.name . '(1, ' . fn.dir . ')<CR>'
|
||||
endfor
|
||||
endif
|
||||
endfunction "}}}
|
||||
" }}}
|
||||
" Motion functions {{{
|
||||
function! EasyMotion#F(visualmode, direction) " {{{
|
||||
let char = s:GetSearchChar(a:visualmode)
|
||||
|
||||
if empty(char)
|
||||
return
|
||||
endif
|
||||
|
||||
let re = '\C' . escape(char, '.$^~')
|
||||
|
||||
call s:EasyMotion(re, a:direction, a:visualmode ? visualmode() : '', mode(1))
|
||||
endfunction " }}}
|
||||
function! EasyMotion#T(visualmode, direction) " {{{
|
||||
let char = s:GetSearchChar(a:visualmode)
|
||||
|
||||
if empty(char)
|
||||
return
|
||||
endif
|
||||
|
||||
if a:direction == 1
|
||||
let re = '\C' . escape(char, '.$^~') . '\zs.'
|
||||
else
|
||||
let re = '\C.' . escape(char, '.$^~')
|
||||
endif
|
||||
|
||||
call s:EasyMotion(re, a:direction, a:visualmode ? visualmode() : '', mode(1))
|
||||
endfunction " }}}
|
||||
function! EasyMotion#WB(visualmode, direction) " {{{
|
||||
call s:EasyMotion('\(\<.\|^$\)', a:direction, a:visualmode ? visualmode() : '', '')
|
||||
endfunction " }}}
|
||||
function! EasyMotion#WBW(visualmode, direction) " {{{
|
||||
call s:EasyMotion('\(\(^\|\s\)\@<=\S\|^$\)', a:direction, a:visualmode ? visualmode() : '', '')
|
||||
endfunction " }}}
|
||||
function! EasyMotion#E(visualmode, direction) " {{{
|
||||
call s:EasyMotion('\(.\>\|^$\)', a:direction, a:visualmode ? visualmode() : '', mode(1))
|
||||
endfunction " }}}
|
||||
function! EasyMotion#EW(visualmode, direction) " {{{
|
||||
call s:EasyMotion('\(\S\(\s\|$\)\|^$\)', a:direction, a:visualmode ? visualmode() : '', mode(1))
|
||||
endfunction " }}}
|
||||
function! EasyMotion#JK(visualmode, direction) " {{{
|
||||
call s:EasyMotion('^\(\w\|\s*\zs\|$\)', a:direction, a:visualmode ? visualmode() : '', '')
|
||||
endfunction " }}}
|
||||
function! EasyMotion#Search(visualmode, direction) " {{{
|
||||
call s:EasyMotion(@/, a:direction, a:visualmode ? visualmode() : '', '')
|
||||
endfunction " }}}
|
||||
" }}}
|
||||
" Helper functions {{{
|
||||
function! s:Message(message) " {{{
|
||||
echo 'EasyMotion: ' . a:message
|
||||
endfunction " }}}
|
||||
function! s:Prompt(message) " {{{
|
||||
echohl Question
|
||||
echo a:message . ': '
|
||||
echohl None
|
||||
endfunction " }}}
|
||||
function! s:VarReset(var, ...) " {{{
|
||||
if ! exists('s:var_reset')
|
||||
let s:var_reset = {}
|
||||
endif
|
||||
|
||||
let buf = bufname("")
|
||||
|
||||
if a:0 == 0 && has_key(s:var_reset, a:var)
|
||||
" Reset var to original value
|
||||
call setbufvar(buf, a:var, s:var_reset[a:var])
|
||||
elseif a:0 == 1
|
||||
let new_value = a:0 == 1 ? a:1 : ''
|
||||
|
||||
" Store original value
|
||||
let s:var_reset[a:var] = getbufvar(buf, a:var)
|
||||
|
||||
" Set new var value
|
||||
call setbufvar(buf, a:var, new_value)
|
||||
endif
|
||||
endfunction " }}}
|
||||
function! s:SetLines(lines, key) " {{{
|
||||
try
|
||||
" Try to join changes with previous undo block
|
||||
undojoin
|
||||
catch
|
||||
endtry
|
||||
|
||||
for [line_num, line] in a:lines
|
||||
call setline(line_num, line[a:key])
|
||||
endfor
|
||||
endfunction " }}}
|
||||
function! s:GetChar() " {{{
|
||||
let char = getchar()
|
||||
|
||||
if char == 27
|
||||
" Escape key pressed
|
||||
redraw
|
||||
|
||||
call s:Message('Cancelled')
|
||||
|
||||
return ''
|
||||
endif
|
||||
|
||||
return nr2char(char)
|
||||
endfunction " }}}
|
||||
function! s:GetSearchChar(visualmode) " {{{
|
||||
call s:Prompt('Search for character')
|
||||
|
||||
let char = s:GetChar()
|
||||
|
||||
" Check that we have an input char
|
||||
if empty(char)
|
||||
" Restore selection
|
||||
if ! empty(a:visualmode)
|
||||
silent exec 'normal! gv'
|
||||
endif
|
||||
|
||||
return ''
|
||||
endif
|
||||
|
||||
return char
|
||||
endfunction " }}}
|
||||
" }}}
|
||||
" Grouping algorithms {{{
|
||||
let s:grouping_algorithms = {
|
||||
\ 1: 'SCTree'
|
||||
\ , 2: 'Original'
|
||||
\ }
|
||||
" Single-key/closest target priority tree {{{
|
||||
" This algorithm tries to assign one-key jumps to all the targets closest to the cursor.
|
||||
" It works recursively and will work correctly with as few keys as two.
|
||||
function! s:GroupingAlgorithmSCTree(targets, keys)
|
||||
" Prepare variables for working
|
||||
let targets_len = len(a:targets)
|
||||
let keys_len = len(a:keys)
|
||||
|
||||
let groups = {}
|
||||
|
||||
let keys = reverse(copy(a:keys))
|
||||
|
||||
" Semi-recursively count targets {{{
|
||||
" We need to know exactly how many child nodes (targets) this branch will have
|
||||
" in order to pass the correct amount of targets to the recursive function.
|
||||
|
||||
" Prepare sorted target count list {{{
|
||||
" This is horrible, I know. But dicts aren't sorted in vim, so we need to
|
||||
" work around that. That is done by having one sorted list with key counts,
|
||||
" and a dict which connects the key with the keys_count list.
|
||||
|
||||
let keys_count = []
|
||||
let keys_count_keys = {}
|
||||
|
||||
let i = 0
|
||||
for key in keys
|
||||
call add(keys_count, 0)
|
||||
|
||||
let keys_count_keys[key] = i
|
||||
|
||||
let i += 1
|
||||
endfor
|
||||
" }}}
|
||||
|
||||
let targets_left = targets_len
|
||||
let level = 0
|
||||
let i = 0
|
||||
|
||||
while targets_left > 0
|
||||
" Calculate the amount of child nodes based on the current level
|
||||
let childs_len = (level == 0 ? 1 : (keys_len - 1) )
|
||||
|
||||
for key in keys
|
||||
" Add child node count to the keys_count array
|
||||
let keys_count[keys_count_keys[key]] += childs_len
|
||||
|
||||
" Subtract the child node count
|
||||
let targets_left -= childs_len
|
||||
|
||||
if targets_left <= 0
|
||||
" Subtract the targets left if we added too many too
|
||||
" many child nodes to the key count
|
||||
let keys_count[keys_count_keys[key]] += targets_left
|
||||
|
||||
break
|
||||
endif
|
||||
|
||||
let i += 1
|
||||
endfor
|
||||
|
||||
let level += 1
|
||||
endwhile
|
||||
" }}}
|
||||
" Create group tree {{{
|
||||
let i = 0
|
||||
let key = 0
|
||||
|
||||
call reverse(keys_count)
|
||||
|
||||
for key_count in keys_count
|
||||
if key_count > 1
|
||||
" We need to create a subgroup
|
||||
" Recurse one level deeper
|
||||
let groups[a:keys[key]] = s:GroupingAlgorithmSCTree(a:targets[i : i + key_count - 1], a:keys)
|
||||
elseif key_count == 1
|
||||
" Assign single target key
|
||||
let groups[a:keys[key]] = a:targets[i]
|
||||
else
|
||||
" No target
|
||||
continue
|
||||
endif
|
||||
|
||||
let key += 1
|
||||
let i += key_count
|
||||
endfor
|
||||
" }}}
|
||||
|
||||
" Finally!
|
||||
return groups
|
||||
endfunction
|
||||
" }}}
|
||||
" Original {{{
|
||||
function! s:GroupingAlgorithmOriginal(targets, keys)
|
||||
" Split targets into groups (1 level)
|
||||
let targets_len = len(a:targets)
|
||||
let keys_len = len(a:keys)
|
||||
|
||||
let groups = {}
|
||||
|
||||
let i = 0
|
||||
let root_group = 0
|
||||
try
|
||||
while root_group < targets_len
|
||||
let groups[a:keys[root_group]] = {}
|
||||
|
||||
for key in a:keys
|
||||
let groups[a:keys[root_group]][key] = a:targets[i]
|
||||
|
||||
let i += 1
|
||||
endfor
|
||||
|
||||
let root_group += 1
|
||||
endwhile
|
||||
catch | endtry
|
||||
|
||||
" Flatten the group array
|
||||
if len(groups) == 1
|
||||
let groups = groups[a:keys[0]]
|
||||
endif
|
||||
|
||||
return groups
|
||||
endfunction
|
||||
" }}}
|
||||
" Coord/key dictionary creation {{{
|
||||
function! s:CreateCoordKeyDict(groups, ...)
|
||||
" Dict structure:
|
||||
" 1,2 : a
|
||||
" 2,3 : b
|
||||
let sort_list = []
|
||||
let coord_keys = {}
|
||||
let group_key = a:0 == 1 ? a:1 : ''
|
||||
|
||||
for [key, item] in items(a:groups)
|
||||
let key = ( ! empty(group_key) ? group_key : key)
|
||||
|
||||
if type(item) == 3
|
||||
" Destination coords
|
||||
|
||||
" The key needs to be zero-padded in order to
|
||||
" sort correctly
|
||||
let dict_key = printf('%05d,%05d', item[0], item[1])
|
||||
let coord_keys[dict_key] = key
|
||||
|
||||
" We need a sorting list to loop correctly in
|
||||
" PromptUser, dicts are unsorted
|
||||
call add(sort_list, dict_key)
|
||||
else
|
||||
" Item is a dict (has children)
|
||||
let coord_key_dict = s:CreateCoordKeyDict(item, key)
|
||||
|
||||
" Make sure to extend both the sort list and the
|
||||
" coord key dict
|
||||
call extend(sort_list, coord_key_dict[0])
|
||||
call extend(coord_keys, coord_key_dict[1])
|
||||
endif
|
||||
|
||||
unlet item
|
||||
endfor
|
||||
|
||||
return [sort_list, coord_keys]
|
||||
endfunction
|
||||
" }}}
|
||||
" }}}
|
||||
" Core functions {{{
|
||||
function! s:PromptUser(groups) "{{{
|
||||
" If only one possible match, jump directly to it {{{
|
||||
let group_values = values(a:groups)
|
||||
|
||||
if len(group_values) == 1
|
||||
redraw
|
||||
|
||||
return group_values[0]
|
||||
endif
|
||||
" }}}
|
||||
" Prepare marker lines {{{
|
||||
let lines = {}
|
||||
let hl_coords = []
|
||||
let coord_key_dict = s:CreateCoordKeyDict(a:groups)
|
||||
|
||||
for dict_key in sort(coord_key_dict[0])
|
||||
let target_key = coord_key_dict[1][dict_key]
|
||||
let [line_num, col_num] = split(dict_key, ',')
|
||||
|
||||
let line_num = str2nr(line_num)
|
||||
let col_num = str2nr(col_num)
|
||||
|
||||
" Add original line and marker line
|
||||
if ! has_key(lines, line_num)
|
||||
let current_line = getline(line_num)
|
||||
|
||||
let lines[line_num] = { 'orig': current_line, 'marker': current_line, 'mb_compensation': 0 }
|
||||
endif
|
||||
|
||||
" Compensate for byte difference between marker
|
||||
" character and target character
|
||||
"
|
||||
" This has to be done in order to match the correct
|
||||
" column; \%c matches the byte column and not display
|
||||
" column.
|
||||
let target_char_len = strlen(matchstr(lines[line_num]['marker'], '\%' . col_num . 'c.'))
|
||||
let target_key_len = strlen(target_key)
|
||||
|
||||
" Solve multibyte issues by matching the byte column
|
||||
" number instead of the visual column
|
||||
let col_num -= lines[line_num]['mb_compensation']
|
||||
|
||||
if strlen(lines[line_num]['marker']) > 0
|
||||
" Substitute marker character if line length > 0
|
||||
let lines[line_num]['marker'] = substitute(lines[line_num]['marker'], '\%' . col_num . 'c.', target_key, '')
|
||||
else
|
||||
" Set the line to the marker character if the line is empty
|
||||
let lines[line_num]['marker'] = target_key
|
||||
endif
|
||||
|
||||
" Add highlighting coordinates
|
||||
call add(hl_coords, '\%' . line_num . 'l\%' . col_num . 'c')
|
||||
|
||||
" Add marker/target lenght difference for multibyte
|
||||
" compensation
|
||||
let lines[line_num]['mb_compensation'] += (target_char_len - target_key_len)
|
||||
endfor
|
||||
|
||||
let lines_items = items(lines)
|
||||
" }}}
|
||||
" Highlight targets {{{
|
||||
let target_hl_id = matchadd(g:EasyMotion_hl_group_target, join(hl_coords, '\|'), 1)
|
||||
" }}}
|
||||
|
||||
try
|
||||
" Set lines with markers
|
||||
call s:SetLines(lines_items, 'marker')
|
||||
|
||||
redraw
|
||||
|
||||
" Get target character {{{
|
||||
call s:Prompt('Target key')
|
||||
|
||||
let char = s:GetChar()
|
||||
" }}}
|
||||
finally
|
||||
" Restore original lines
|
||||
call s:SetLines(lines_items, 'orig')
|
||||
|
||||
" Un-highlight targets {{{
|
||||
if exists('target_hl_id')
|
||||
call matchdelete(target_hl_id)
|
||||
endif
|
||||
" }}}
|
||||
|
||||
redraw
|
||||
endtry
|
||||
|
||||
" Check if we have an input char {{{
|
||||
if empty(char)
|
||||
throw 'Cancelled'
|
||||
endif
|
||||
" }}}
|
||||
" Check if the input char is valid {{{
|
||||
if ! has_key(a:groups, char)
|
||||
throw 'Invalid target'
|
||||
endif
|
||||
" }}}
|
||||
|
||||
let target = a:groups[char]
|
||||
|
||||
if type(target) == 3
|
||||
" Return target coordinates
|
||||
return target
|
||||
else
|
||||
" Prompt for new target character
|
||||
return s:PromptUser(target)
|
||||
endif
|
||||
endfunction "}}}
|
||||
function! s:EasyMotion(regexp, direction, visualmode, mode) " {{{
|
||||
let orig_pos = [line('.'), col('.')]
|
||||
let targets = []
|
||||
|
||||
try
|
||||
" Reset properties {{{
|
||||
call s:VarReset('&scrolloff', 0)
|
||||
call s:VarReset('&modified', 0)
|
||||
call s:VarReset('&modifiable', 1)
|
||||
call s:VarReset('&readonly', 0)
|
||||
call s:VarReset('&spell', 0)
|
||||
call s:VarReset('&virtualedit', '')
|
||||
" }}}
|
||||
" Find motion targets {{{
|
||||
let search_direction = (a:direction == 1 ? 'b' : '')
|
||||
let search_stopline = line(a:direction == 1 ? 'w0' : 'w$')
|
||||
|
||||
while 1
|
||||
let pos = searchpos(a:regexp, search_direction, search_stopline)
|
||||
|
||||
" Reached end of search range
|
||||
if pos == [0, 0]
|
||||
break
|
||||
endif
|
||||
|
||||
" Skip folded lines
|
||||
if foldclosed(pos[0]) != -1
|
||||
continue
|
||||
endif
|
||||
|
||||
call add(targets, pos)
|
||||
endwhile
|
||||
|
||||
let targets_len = len(targets)
|
||||
if targets_len == 0
|
||||
throw 'No matches'
|
||||
endif
|
||||
" }}}
|
||||
|
||||
let GroupingFn = function('s:GroupingAlgorithm' . s:grouping_algorithms[g:EasyMotion_grouping])
|
||||
let groups = GroupingFn(targets, split(g:EasyMotion_keys, '\zs'))
|
||||
|
||||
" Shade inactive source {{{
|
||||
if g:EasyMotion_do_shade
|
||||
let shade_hl_pos = '\%' . orig_pos[0] . 'l\%'. orig_pos[1] .'c'
|
||||
|
||||
if a:direction == 1
|
||||
" Backward
|
||||
let shade_hl_re = '\%'. line('w0') .'l\_.*' . shade_hl_pos
|
||||
else
|
||||
" Forward
|
||||
let shade_hl_re = shade_hl_pos . '\_.*\%'. line('w$') .'l'
|
||||
endif
|
||||
|
||||
let shade_hl_id = matchadd(g:EasyMotion_hl_group_shade, shade_hl_re, 0)
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" Prompt user for target group/character
|
||||
let coords = s:PromptUser(groups)
|
||||
|
||||
" Update selection {{{
|
||||
if ! empty(a:visualmode)
|
||||
keepjumps call cursor(orig_pos[0], orig_pos[1])
|
||||
|
||||
exec 'normal! ' . a:visualmode
|
||||
endif
|
||||
" }}}
|
||||
" Handle operator-pending mode {{{
|
||||
if a:mode == 'no'
|
||||
" This mode requires that we eat one more
|
||||
" character to the right if we're using
|
||||
" a forward motion
|
||||
if a:direction != 1
|
||||
let coords[1] += 1
|
||||
endif
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" Update cursor position
|
||||
call cursor(orig_pos[0], orig_pos[1])
|
||||
mark '
|
||||
call cursor(coords[0], coords[1])
|
||||
|
||||
call s:Message('Jumping to [' . coords[0] . ', ' . coords[1] . ']')
|
||||
catch
|
||||
redraw
|
||||
|
||||
" Show exception message
|
||||
call s:Message(v:exception)
|
||||
|
||||
" Restore original cursor position/selection {{{
|
||||
if ! empty(a:visualmode)
|
||||
silent exec 'normal! gv'
|
||||
else
|
||||
keepjumps call cursor(orig_pos[0], orig_pos[1])
|
||||
endif
|
||||
" }}}
|
||||
finally
|
||||
" Restore properties {{{
|
||||
call s:VarReset('&scrolloff')
|
||||
call s:VarReset('&modified')
|
||||
call s:VarReset('&modifiable')
|
||||
call s:VarReset('&readonly')
|
||||
call s:VarReset('&spell')
|
||||
call s:VarReset('&virtualedit')
|
||||
" }}}
|
||||
" Remove shading {{{
|
||||
if g:EasyMotion_do_shade && exists('shade_hl_id')
|
||||
call matchdelete(shade_hl_id)
|
||||
endif
|
||||
" }}}
|
||||
endtry
|
||||
endfunction " }}}
|
||||
" }}}
|
||||
|
||||
" vim: fdm=marker:noet:ts=4:sw=4:sts=4
|
319
sources_non_forked/vim-easymotion/doc/easymotion.txt
Normal file
319
sources_non_forked/vim-easymotion/doc/easymotion.txt
Normal file
@ -0,0 +1,319 @@
|
||||
*easymotion.txt* Version 1.3. Last change: 2011 Nov 7
|
||||
|
||||
|
||||
______ __ ___ __ _
|
||||
/ ____/____ ________ __/ |/ /____ / /_(_)____ ____
|
||||
/ __/ / __ `/ ___/ / / / /|_/ // __ \/ __/ // __ \/ __ \
|
||||
/ /___ / /_/ (__ ) /_/ / / / // /_/ / /_/ // /_/ / / / /
|
||||
/_____/ \__,_/____/\__, /_/ /_/ \____/\__/_/ \____/_/ /_/
|
||||
/____/
|
||||
- Vim motions on speed!
|
||||
|
||||
|
||||
==============================================================================
|
||||
CONTENTS *easymotion-contents*
|
||||
|
||||
1. Introduction ....................... |easymotion-introduction|
|
||||
2. Usage .............................. |easymotion-usage|
|
||||
2.1 Default mappings ............... |easymotion-default-mappings|
|
||||
3. Requirements ....................... |easymotion-requirements|
|
||||
4. Configuration ...................... |easymotion-configuration|
|
||||
4.1 EasyMotion_keys ................ |EasyMotion_keys|
|
||||
4.2 EasyMotion_do_shade ............ |EasyMotion_do_shade|
|
||||
4.3 EasyMotion_do_mapping .......... |EasyMotion_do_mapping|
|
||||
4.4 EasyMotion_grouping ............ |EasyMotion_grouping|
|
||||
4.5 Custom highlighting ............ |easymotion-custom-hl|
|
||||
4.6 Custom mappings ................ |easymotion-custom-mappings|
|
||||
4.6.1 Leader key ............... |easymotion-leader-key|
|
||||
4.6.2 Custom keys .............. |easymotion-custom-keys|
|
||||
5. License ............................ |easymotion-license|
|
||||
6. Known bugs ......................... |easymotion-known-bugs|
|
||||
7. Contributing ....................... |easymotion-contributing|
|
||||
8. Credits ............................ |easymotion-credits|
|
||||
|
||||
==============================================================================
|
||||
1. Introduction *easymotion* *easymotion-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.
|
||||
|
||||
==============================================================================
|
||||
2. Usage *easymotion-usage*
|
||||
|
||||
EasyMotion is triggered by one of the provided mappings (see
|
||||
|easymotion-default-mappings| for details).
|
||||
|
||||
Example: >
|
||||
|
||||
<cursor>Lorem ipsum dolor sit amet.
|
||||
|
||||
Type <Leader><Leader>w to trigger the word motion |w|. See
|
||||
|easymotion-leader-key| for details about the leader key. 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.
|
||||
|
||||
And that's it!
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
2.1 Default mappings *easymotion-default-mappings*
|
||||
|
||||
The default configuration defines the following mappings in normal,
|
||||
visual and operator-pending mode:
|
||||
|
||||
Mapping | Details
|
||||
------------------|----------------------------------------------
|
||||
<Leader>f{char} | Find {char} to the right. See |f|.
|
||||
<Leader>F{char} | Find {char} to the left. See |F|.
|
||||
<Leader>t{char} | Till before the {char} to the right. See |t|.
|
||||
<Leader>T{char} | Till after the {char} to the left. See |T|.
|
||||
<Leader>w | Beginning of word forward. See |w|.
|
||||
<Leader>W | Beginning of WORD forward. See |W|.
|
||||
<Leader>b | Beginning of word backward. See |b|.
|
||||
<Leader>B | Beginning of WORD backward. See |B|.
|
||||
<Leader>e | End of word forward. See |e|.
|
||||
<Leader>E | End of WORD forward. See |E|.
|
||||
<Leader>ge | End of word backward. See |ge|.
|
||||
<Leader>gE | End of WORD backward. See |gE|.
|
||||
<Leader>j | Line downward. See |j|.
|
||||
<Leader>k | Line upward. See |k|.
|
||||
<Leader>n | Jump to latest "/" or "?" forward. See |n|.
|
||||
<Leader>N | Jump to latest "/" or "?" backward. See |N|.
|
||||
|
||||
See |easymotion-leader-key| and |mapleader| for details about the leader key.
|
||||
See |easymotion-custom-mappings| for customizing the default mappings.
|
||||
|
||||
==============================================================================
|
||||
3. Requirements *easymotion-requirements*
|
||||
|
||||
EasyMotion has been developed and tested in vim 7.3, but it should run without
|
||||
any problems in vim 7.2.
|
||||
|
||||
Vi-compatible mode must be disabled.
|
||||
|
||||
==============================================================================
|
||||
4. Configuration *easymotion-configuration*
|
||||
|
||||
EasyMotion will work fine without any configuration, but you can override the
|
||||
default behavior by setting configuration variables globally in your |vimrc|
|
||||
file.
|
||||
|
||||
Example (this will change the target keys and disable shading): >
|
||||
|
||||
let g:EasyMotion_keys = '1234567890'
|
||||
let g:EasyMotion_do_shade = 0
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
4.1 EasyMotion_keys *EasyMotion_keys*
|
||||
|
||||
Set the keys which will be used for motion targets. Add as many keys as you
|
||||
want. There's a lower chance that the motion targets will be grouped if many
|
||||
keys are available.
|
||||
|
||||
Default: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
4.2 EasyMotion_do_shade *EasyMotion_do_shade*
|
||||
|
||||
The default behavior is to shade the text following the cursor (forward
|
||||
motions) or preceding the cursor (backward motions) to make the motion targets
|
||||
more visible. Set this option to 0 if you want to disable text shading.
|
||||
|
||||
Default: 1
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
4.3 EasyMotion_do_mapping *EasyMotion_do_mapping*
|
||||
|
||||
Set this option to 0 if you want to disable the default mappings. See
|
||||
|easymotion-default-mappings| for details about the default mappings.
|
||||
|
||||
Note: If you disable this option, you'll have to map the motions yourself. See
|
||||
the plugin source code for mapping details. You usually shouldn't need to do
|
||||
this, see |easymotion-custom-mappings| for customizing the default mappings.
|
||||
|
||||
Default: 1
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
4.4 EasyMotion_grouping *EasyMotion_grouping*
|
||||
|
||||
When there are too many possible targets on the screen, the results have to be
|
||||
grouped. This configuration option lets you change which grouping algorithm
|
||||
you want to use. There are two grouping algorithms available:
|
||||
|
||||
* Single-key priority (value: 1)
|
||||
-------------------
|
||||
|
||||
This algorithm prioritizes single-key jumps for the targets closest to
|
||||
the cursor and only groups the last jump targets to maximize the amount
|
||||
of single-key jumps.
|
||||
|
||||
This algorithm works recursively and will work with as few keys as two.
|
||||
|
||||
Example (with |EasyMotion_keys| = "abcdef"): >
|
||||
|
||||
x x x x x x x x x
|
||||
<
|
||||
The |w| motion is triggered: >
|
||||
|
||||
a b c d e f f f f
|
||||
^ ^ ^ ^ ^ Direct jump to target
|
||||
^ ^ ^ ^ Enter group "f"
|
||||
<
|
||||
* Original (value: 2)
|
||||
--------
|
||||
|
||||
This is the original algorithm which always groups all targets if there
|
||||
are too many possible motion targets.
|
||||
|
||||
Example (with |EasyMotion_keys| = "abcdef"): >
|
||||
|
||||
x x x x x x x x x
|
||||
<
|
||||
The |w| motion is triggered: >
|
||||
|
||||
a a a a a a b b b
|
||||
^ ^ ^ ^ ^ ^ Enter group "a"
|
||||
^ ^ ^ Enter group "b"
|
||||
|
||||
Default: 1
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
4.5 Custom highlighting *easymotion-custom-hl*
|
||||
|
||||
The default EasyMotion configuration uses two highlighting groups that link
|
||||
to groups with default values. The highlighting groups are:
|
||||
|
||||
* EasyMotionTarget
|
||||
|
||||
Highlights motion targets, the default value is bold red
|
||||
|
||||
* EasyMotionShade
|
||||
|
||||
Highlights shaded text, the default value is dark gray
|
||||
|
||||
There are two ways to override the default colors:
|
||||
|
||||
1) Set the highlighting in your color scheme
|
||||
|
||||
This will only affect a single color scheme. The default red/gray colors
|
||||
will be used if you change the color scheme to one that doesn't assign
|
||||
any EasyMotion colors.
|
||||
|
||||
Example: >
|
||||
|
||||
hi EasyMotionTarget ctermbg=none ctermfg=green
|
||||
hi EasyMotionShade ctermbg=none ctermfg=blue
|
||||
<
|
||||
2) Set the highlighting in your vimrc
|
||||
|
||||
This is ideal if you want to link the colors to highlighting groups that
|
||||
are available in almost every color scheme, e.g. |ErrorMsg| (usually
|
||||
bright red) and Comment (usually faded). You can be sure that the
|
||||
color scheme's colors will be used instead of the default red/gray
|
||||
if you choose this option.
|
||||
|
||||
Example: >
|
||||
|
||||
hi link EasyMotionTarget ErrorMsg
|
||||
hi link EasyMotionShade Comment
|
||||
<
|
||||
------------------------------------------------------------------------------
|
||||
4.6 Custom mappings *easymotion-custom-mappings*
|
||||
|
||||
EasyMotion allows you to customize all default mappings to avoid conflicts
|
||||
with existing mappings. It is possible to change the default leader key
|
||||
of all mappings to another key or sequence. It is also possible to fine
|
||||
tune the plugin to your need by changing every single sequence.
|
||||
|
||||
4.6.1 Leader key *EasyMotion_leader_key* *easymotion-leader-key*
|
||||
|
||||
The default leader key can be changed with the configuration option
|
||||
|EasyMotion_leader_key|.
|
||||
|
||||
Set this option to the key sequence to use as the prefix of the mappings
|
||||
described in |easymotion-default-mappings|.
|
||||
|
||||
Note: The default leader key has been changed to '<Leader><Leader>' to
|
||||
avoid conflicts with other plugins. You can revert to the original
|
||||
leader by setting this option in your vimrc: >
|
||||
|
||||
let g:EasyMotion_leader_key = '<Leader>'
|
||||
<
|
||||
Default: '<Leader><Leader>'
|
||||
|
||||
4.6.2 Custom Keys *easymotion-custom-keys*
|
||||
|
||||
All custom mappings follow the same variable format: >
|
||||
|
||||
EasyMotion_mapping_{motion} = {mapping}
|
||||
<
|
||||
Example: >
|
||||
|
||||
let g:EasyMotion_mapping_f = '_f'
|
||||
let g:EasyMotion_mapping_T = '<C-T>'
|
||||
<
|
||||
See |easymotion-default-mappings| for a table of motions that can be mapped
|
||||
and their default values.
|
||||
|
||||
Note: The leader key defined by |EasyMotion_leader_key| is not prepended to
|
||||
your customized mappings! You have to provide full key sequences when setting
|
||||
these options.
|
||||
|
||||
==============================================================================
|
||||
5. License *easymotion-license*
|
||||
|
||||
Creative Commons Attribution-ShareAlike 3.0 Unported
|
||||
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
==============================================================================
|
||||
6. Known bugs *easymotion-known-bugs*
|
||||
|
||||
None.
|
||||
|
||||
==============================================================================
|
||||
7. Contributing *easymotion-contributing*
|
||||
|
||||
If you experience any bugs or have feature requests, please open an issue on
|
||||
GitHub. Fork the source repository on GitHub and send a pull request if you
|
||||
have any code improvements.
|
||||
|
||||
Author: Kim Silkebækken <kim.silkebaekken+vim@gmail.com>
|
||||
Source repository: https://github.com/Lokaltog/vim-easymotion
|
||||
|
||||
==============================================================================
|
||||
8. Credits *easymotion-credits*
|
||||
|
||||
- Ben Boeckel: ge and WORD motions
|
||||
- Drew Neil: operator-pending mappings
|
||||
- Rob O'Dwyer: customizable mappings without giving up all defaults
|
||||
- Michel D'Hooge: customizable leader
|
||||
- Maxime Bourget: search motion, improved JK motion behavior
|
||||
- Kearn Holliday: fix jumplist issues
|
||||
- Shougo Matsushita: fix CSApprox issue
|
||||
|
||||
EasyMotion is based on Bartlomiej Podolak's great PreciseJump script, which
|
||||
can be downloaded here:
|
||||
|
||||
http://www.vim.org/scripts/script.php?script_id=3437
|
||||
|
||||
==============================================================================
|
||||
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
73
sources_non_forked/vim-easymotion/plugin/EasyMotion.vim
Normal file
73
sources_non_forked/vim-easymotion/plugin/EasyMotion.vim
Normal file
@ -0,0 +1,73 @@
|
||||
" EasyMotion - Vim motions on speed!
|
||||
"
|
||||
" Author: Kim Silkebækken <kim.silkebaekken+vim@gmail.com>
|
||||
" Source repository: https://github.com/Lokaltog/vim-easymotion
|
||||
|
||||
" Script initialization {{{
|
||||
if exists('g:EasyMotion_loaded') || &compatible || version < 702
|
||||
finish
|
||||
endif
|
||||
|
||||
let g:EasyMotion_loaded = 1
|
||||
" }}}
|
||||
" Default configuration {{{
|
||||
" Default options {{{
|
||||
call EasyMotion#InitOptions({
|
||||
\ 'leader_key' : '<Leader><Leader>'
|
||||
\ , 'keys' : 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
\ , 'do_shade' : 1
|
||||
\ , 'do_mapping' : 1
|
||||
\ , 'grouping' : 1
|
||||
\
|
||||
\ , 'hl_group_target' : 'EasyMotionTarget'
|
||||
\ , 'hl_group_shade' : 'EasyMotionShade'
|
||||
\ })
|
||||
" }}}
|
||||
" Default highlighting {{{
|
||||
let s:target_hl_defaults = {
|
||||
\ 'gui' : ['NONE', '#ff0000' , 'bold']
|
||||
\ , 'cterm256': ['NONE', '196' , 'bold']
|
||||
\ , 'cterm' : ['NONE', 'red' , 'bold']
|
||||
\ }
|
||||
|
||||
let s:shade_hl_defaults = {
|
||||
\ 'gui' : ['NONE', '#777777' , 'NONE']
|
||||
\ , 'cterm256': ['NONE', '242' , 'NONE']
|
||||
\ , 'cterm' : ['NONE', 'grey' , 'NONE']
|
||||
\ }
|
||||
|
||||
call EasyMotion#InitHL(g:EasyMotion_hl_group_target, s:target_hl_defaults)
|
||||
call EasyMotion#InitHL(g:EasyMotion_hl_group_shade, s:shade_hl_defaults)
|
||||
|
||||
" Reset highlighting after loading a new color scheme {{{
|
||||
augroup EasyMotionInitHL
|
||||
autocmd!
|
||||
|
||||
autocmd ColorScheme * call EasyMotion#InitHL(g:EasyMotion_hl_group_target, s:target_hl_defaults)
|
||||
autocmd ColorScheme * call EasyMotion#InitHL(g:EasyMotion_hl_group_shade, s:shade_hl_defaults)
|
||||
augroup end
|
||||
" }}}
|
||||
" }}}
|
||||
" Default key mapping {{{
|
||||
call EasyMotion#InitMappings({
|
||||
\ 'f' : { 'name': 'F' , 'dir': 0 }
|
||||
\ , 'F' : { 'name': 'F' , 'dir': 1 }
|
||||
\ , 't' : { 'name': 'T' , 'dir': 0 }
|
||||
\ , 'T' : { 'name': 'T' , 'dir': 1 }
|
||||
\ , 'w' : { 'name': 'WB' , 'dir': 0 }
|
||||
\ , 'W' : { 'name': 'WBW', 'dir': 0 }
|
||||
\ , 'b' : { 'name': 'WB' , 'dir': 1 }
|
||||
\ , 'B' : { 'name': 'WBW', 'dir': 1 }
|
||||
\ , 'e' : { 'name': 'E' , 'dir': 0 }
|
||||
\ , 'E' : { 'name': 'EW' , 'dir': 0 }
|
||||
\ , 'ge': { 'name': 'E' , 'dir': 1 }
|
||||
\ , 'gE': { 'name': 'EW' , 'dir': 1 }
|
||||
\ , 'j' : { 'name': 'JK' , 'dir': 0 }
|
||||
\ , 'k' : { 'name': 'JK' , 'dir': 1 }
|
||||
\ , 'n' : { 'name': 'Search' , 'dir': 0 }
|
||||
\ , 'N' : { 'name': 'Search' , 'dir': 1 }
|
||||
\ })
|
||||
" }}}
|
||||
" }}}
|
||||
|
||||
" vim: fdm=marker:noet:ts=4:sw=4:sts=4
|
Reference in New Issue
Block a user