" EasyMotion - Vim motions on speed! " " Author: Kim Silkebækken " Maintainer: haya14busa " Source: https://github.com/haya14busa/vim-easymotion " Original: https://github.com/Lokaltog/vim-easymotion " == Script initialization {{{ if exists('g:EasyMotion_loaded') || &compatible || version < 702 finish endif let g:EasyMotion_loaded = 1 " }}} " == Saving 'cpoptions' {{{ let s:save_cpo = &cpo set cpo&vim " }}} " == Default configuration {{{ " -- Option ------------------------------ {{{ let g:EasyMotion_keys = get(g:, \ 'EasyMotion_keys', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') let g:EasyMotion_do_mapping = get(g: , 'EasyMotion_do_mapping' , 1) let g:EasyMotion_do_special_mapping = get(g: , 'EasyMotion_do_special_mapping' , 0) let g:EasyMotion_do_shade = get(g: , 'EasyMotion_do_shade' , 1) let g:EasyMotion_grouping = get(g: , 'EasyMotion_grouping' , 1) let g:EasyMotion_startofline = get(g: , 'EasyMotion_startofline' , 1) let g:EasyMotion_smartcase = get(g: , 'EasyMotion_smartcase' , 0) let g:EasyMotion_skipfoldedline = get(g: , 'EasyMotion_skipfoldedline' , 1) let g:EasyMotion_use_migemo = get(g: , 'EasyMotion_use_migemo' , 0) let g:EasyMotion_use_upper = get(g: , 'EasyMotion_use_upper' , 0) let g:EasyMotion_use_regexp = get(g: , 'EasyMotion_use_regexp' , 0) let g:EasyMotion_enter_jump_first = get(g: , 'EasyMotion_enter_jump_first' , 0) let g:EasyMotion_inc_highlight = get(g: , 'EasyMotion_inc_highlight' , 1) let g:EasyMotion_move_highlight = get(g: , 'EasyMotion_move_highlight' , 1) let g:EasyMotion_landing_highlight = get(g: , 'EasyMotion_landing_highlight' , 0) let g:EasyMotion_show_prompt = get(g: , 'EasyMotion_show_prompt' , 1) let g:EasyMotion_prompt = \ get(g: , 'EasyMotion_prompt' , 'Search for {n} character(s): ') let g:EasyMotion_command_line_key_mappings = \ get(g: , 'EasyMotion_command_line_key_mappings' , {}) "}}} " -- Default highlighting ---------------- {{{ let g:EasyMotion_hl_group_target = get(g:, \ 'EasyMotion_hl_group_target', 'EasyMotionTarget') let g:EasyMotion_hl2_first_group_target = get(g:, \ 'EasyMotion_hl2_first_group_target', 'EasyMotionTarget2First') let g:EasyMotion_hl2_second_group_target = get(g:, \ 'EasyMotion_hl2_second_group_target', 'EasyMotionTarget2Second') let g:EasyMotion_hl_group_shade = get(g:, \ 'EasyMotion_hl_group_shade', 'EasyMotionShade') let g:EasyMotion_hl_line_group_shade = get(g:, \ 'EasyMotion_hl_line_group_shade', 'EasyMotionShadeLine') let g:EasyMotion_hl_inc_search = get(g:, \ 'EasyMotion_hl_inc_search', 'EasyMotionIncSearch') let g:EasyMotion_hl_inc_cursor = get(g:, \ 'EasyMotion_hl_inc_cursor', 'EasyMotionIncCursor') let g:EasyMotion_hl_move = get(g:, \ 'EasyMotion_hl_move', 'EasyMotionMoveHL') let s:target_hl_defaults = { \ 'gui' : ['NONE', '#ff0000' , 'bold'] \ , 'cterm256': ['NONE', '196' , 'bold'] \ , 'cterm' : ['NONE', 'red' , 'bold'] \ } let s:target_hl2_first_defaults = { \ 'gui' : ['NONE', '#ffb400' , 'bold'] \ , 'cterm256': ['NONE', '11' , 'bold'] \ , 'cterm' : ['NONE', 'yellow' , 'bold'] \ } let s:target_hl2_second_defaults = { \ 'gui' : ['NONE', '#b98300' , 'bold'] \ , 'cterm256': ['NONE', '3' , 'bold'] \ , 'cterm' : ['NONE', 'yellow' , 'bold'] \ } let s:shade_hl_defaults = { \ 'gui' : ['NONE', '#777777' , 'NONE'] \ , 'cterm256': ['NONE', '242' , 'NONE'] \ , 'cterm' : ['NONE', 'grey' , 'NONE'] \ } let s:shade_hl_line_defaults = { \ 'gui' : ['red' , '#FFFFFF' , 'NONE'] \ , 'cterm256': ['red' , '242' , 'NONE'] \ , 'cterm' : ['red' , 'grey' , 'NONE'] \ } let s:target_hl_inc = { \ 'gui' : ['NONE', '#00ff00' , 'bold'] \ , 'cterm256': ['NONE', 'green' , 'bold'] \ , 'cterm' : ['NONE', 'green' , 'bold'] \ } let s:target_hl_inc_cursor = { \ 'gui' : ['magenta', 'NONE' , 'bold'] \ , 'cterm256': ['magenta', 'NONE' , 'bold'] \ , 'cterm' : ['magenta', 'NONE' , 'bold'] \ } let s:target_hl_move = { \ 'gui' : ['magenta', 'white' , 'bold'] \ , 'cterm256': ['magenta', 'white' , 'bold'] \ , 'cterm' : ['magenta', 'white' , 'bold'] \ } call EasyMotion#init#InitHL(g:EasyMotion_hl_group_target, s:target_hl_defaults) call EasyMotion#init#InitHL(g:EasyMotion_hl2_first_group_target, s:target_hl2_first_defaults) call EasyMotion#init#InitHL(g:EasyMotion_hl2_second_group_target, s:target_hl2_second_defaults) call EasyMotion#init#InitHL(g:EasyMotion_hl_group_shade, s:shade_hl_defaults) call EasyMotion#init#InitHL(g:EasyMotion_hl_line_group_shade, s:shade_hl_line_defaults) call EasyMotion#init#InitHL(g:EasyMotion_hl_inc_search, s:target_hl_inc) call EasyMotion#init#InitHL(g:EasyMotion_hl_inc_cursor, s:target_hl_inc_cursor) call EasyMotion#init#InitHL(g:EasyMotion_hl_move, s:target_hl_move) " Reset highlighting after loading a new color scheme {{{ augroup EasyMotionInitHL autocmd! autocmd ColorScheme * call EasyMotion#init#InitHL(g:EasyMotion_hl_group_target, s:target_hl_defaults) autocmd ColorScheme * call EasyMotion#init#InitHL(g:EasyMotion_hl2_first_group_target, s:target_hl2_first_defaults) autocmd ColorScheme * call EasyMotion#init#InitHL(g:EasyMotion_hl2_second_group_target, s:target_hl2_second_defaults) autocmd ColorScheme * call EasyMotion#init#InitHL(g:EasyMotion_hl_group_shade, s:shade_hl_defaults) autocmd ColorScheme * call EasyMotion#init#InitHL(g:EasyMotion_hl_line_group_shade, s:shade_hl_line_defaults) augroup end " }}} " }}} " }}} " == Mapping {{{ " Note: bd is short for bidirectional " l is short for (within) line function! s:find_motion_map_helper(motions) "{{{ for [name, dict] in items(a:motions) silent exec 'noremap (easymotion-'.name.')' . \ ' :call EasyMotion#'. dict.fnc .'('. dict.cnt .',0,'. dict.direction .')' silent exec 'xnoremap (easymotion-'.name.')' . \ ' :call EasyMotion#'. dict.fnc .'('. dict.cnt .',1,'. dict.direction .')' " Example: " noremap (easymotion-f2) :call EasyMotion#S(2,1,0) " xnoremap (easymotion-f2) :call EasyMotion#S(2,1,0) endfor endfunction "}}} " Find Motion: {{{ call s:find_motion_map_helper({ \ 'f' : {'fnc': 'S' , 'cnt': 1, 'direction': 0}, \ 'F' : {'fnc': 'S' , 'cnt': 1, 'direction': 1}, \ 's' : {'fnc': 'S' , 'cnt': 1, 'direction': 2}, \ 't' : {'fnc': 'T' , 'cnt': 1, 'direction': 0}, \ 'T' : {'fnc': 'T' , 'cnt': 1, 'direction': 1}, \ 'fl' : {'fnc': 'SL', 'cnt': 1, 'direction': 0}, \ 'Fl' : {'fnc': 'SL', 'cnt': 1, 'direction': 1}, \ 'sl' : {'fnc': 'SL', 'cnt': 1, 'direction': 2}, \ 'tl' : {'fnc': 'TL', 'cnt': 1, 'direction': 0}, \ 'Tl' : {'fnc': 'TL', 'cnt': 1, 'direction': 1}, \ \ 'f2' : {'fnc': 'S' , 'cnt': 2, 'direction': 0}, \ 'F2' : {'fnc': 'S' , 'cnt': 2, 'direction': 1}, \ 's2' : {'fnc': 'S' , 'cnt': 2, 'direction': 2}, \ 't2' : {'fnc': 'T' , 'cnt': 2, 'direction': 0}, \ 'T2' : {'fnc': 'T' , 'cnt': 2, 'direction': 1}, \ 'fl2' : {'fnc': 'SL', 'cnt': 2, 'direction': 0}, \ 'Fl2' : {'fnc': 'SL', 'cnt': 2, 'direction': 1}, \ 'sl2' : {'fnc': 'SL', 'cnt': 2, 'direction': 2}, \ 'tl2' : {'fnc': 'TL', 'cnt': 2, 'direction': 0}, \ 'Tl2' : {'fnc': 'TL', 'cnt': 2, 'direction': 1}, \ \ 'fn' : {'fnc': 'S' , 'cnt': -1, 'direction': 0}, \ 'Fn' : {'fnc': 'S' , 'cnt': -1, 'direction': 1}, \ 'sn' : {'fnc': 'S' , 'cnt': -1, 'direction': 2}, \ 'tn' : {'fnc': 'T' , 'cnt': -1, 'direction': 0}, \ 'Tn' : {'fnc': 'T' , 'cnt': -1, 'direction': 1}, \ 'fln' : {'fnc': 'SL', 'cnt': -1, 'direction': 0}, \ 'Fln' : {'fnc': 'SL', 'cnt': -1, 'direction': 1}, \ 'sln' : {'fnc': 'SL', 'cnt': -1, 'direction': 2}, \ 'tln' : {'fnc': 'TL', 'cnt': -1, 'direction': 0}, \ 'Tln' : {'fnc': 'TL', 'cnt': -1, 'direction': 1}, \ }) "}}} " -- Word Motion {{{ " Word: {{{ noremap (easymotion-w) :call EasyMotion#WB(0,0) xnoremap (easymotion-w) :call EasyMotion#WB(1,0) noremap (easymotion-b) :call EasyMotion#WB(0,1) xnoremap (easymotion-b) :call EasyMotion#WB(1,1) " backward compatibility noremap (easymotion-S) :call EasyMotion#WB(0,2) xnoremap (easymotion-S) :call EasyMotion#WB(1,2) noremap (easymotion-bd-w) :call EasyMotion#WB(0,2) xnoremap (easymotion-bd-w) :call EasyMotion#WB(1,2) "}}} " WORD: {{{ noremap (easymotion-W) :call EasyMotion#WBW(0,0) xnoremap (easymotion-W) :call EasyMotion#WBW(1,0) noremap (easymotion-B) :call EasyMotion#WBW(0,1) xnoremap (easymotion-B) :call EasyMotion#WBW(1,1) noremap (easymotion-bd-W) :call EasyMotion#WBW(0,2) xnoremap (easymotion-bd-W) :call EasyMotion#WBW(1,2) "}}} " End Word: {{{ noremap (easymotion-e) :call EasyMotion#E(0,0) xnoremap (easymotion-e) :call EasyMotion#E(1,0) noremap (easymotion-ge) :call EasyMotion#E(0,1) xnoremap (easymotion-ge) :call EasyMotion#E(1,1) noremap (easymotion-bd-e) :call EasyMotion#E(0,2) xnoremap (easymotion-bd-e) :call EasyMotion#E(1,2) "}}} " END WORD: {{{ noremap (easymotion-E) :call EasyMotion#EW(0,0) xnoremap (easymotion-E) :call EasyMotion#EW(1,0) noremap (easymotion-gE) :call EasyMotion#EW(0,1) xnoremap (easymotion-gE) :call EasyMotion#EW(1,1) noremap (easymotion-bd-E) :call EasyMotion#EW(0,2) xnoremap (easymotion-bd-E) :call EasyMotion#EW(1,2) "}}} "}}} " -- JK Motion {{{ noremap (easymotion-j) :call EasyMotion#JK(0,0) xnoremap (easymotion-j) :call EasyMotion#JK(1,0) noremap (easymotion-k) :call EasyMotion#JK(0,1) xnoremap (easymotion-k) :call EasyMotion#JK(1,1) noremap (easymotion-bd-jk) :call EasyMotion#JK(0,2) xnoremap (easymotion-bd-jk) :call EasyMotion#JK(1,2) " Start of Line JK {{{ noremap (easymotion-sol-j) :call EasyMotion#Sol(0,0) xnoremap (easymotion-sol-j) :call EasyMotion#Sol(1,0) noremap (easymotion-sol-k) :call EasyMotion#Sol(0,1) xnoremap (easymotion-sol-k) :call EasyMotion#Sol(1,1) noremap (easymotion-sol-bd-jk) :call EasyMotion#Sol(0,2) xnoremap (easymotion-sol-bd-jk) :call EasyMotion#Sol(1,2) "}}} " End of Line JK {{{ noremap (easymotion-eol-j) :call EasyMotion#Eol(0,0) xnoremap (easymotion-eol-j) :call EasyMotion#Eol(1,0) noremap (easymotion-eol-k) :call EasyMotion#Eol(0,1) xnoremap (easymotion-eol-k) :call EasyMotion#Eol(1,1) noremap (easymotion-eol-bd-jk) :call EasyMotion#Eol(0,2) xnoremap (easymotion-eol-bd-jk) :call EasyMotion#Eol(1,2) "}}} "}}} " -- Search Motion {{{ noremap (easymotion-n) :call EasyMotion#Search(0,0) xnoremap (easymotion-n) :call EasyMotion#Search(1,0) noremap (easymotion-N) :call EasyMotion#Search(0,1) xnoremap (easymotion-N) :call EasyMotion#Search(1,1) noremap (easymotion-bd-n) :call EasyMotion#Search(0,2) xnoremap (easymotion-bd-n) :call EasyMotion#Search(1,2) "}}} " -- Jump To Anywhere Motion {{{ noremap (easymotion-jumptoanywhere) \ :call EasyMotion#JumpToAnywhere(0,2) xnoremap (easymotion-jumptoanywhere) \ :call EasyMotion#JumpToAnywhere(1,2) "}}} " -- Repeat Motion {{{ noremap (easymotion-repeat) \ :call EasyMotion#Repeat(0) xnoremap (easymotion-repeat) \ :call EasyMotion#Repeat(1) noremap (easymotion-dotrepeat) \ :call EasyMotion#DotRepeat(0) xnoremap (easymotion-dotrepeat) \ :call EasyMotion#DotRepeat(1) "}}} " -- Next,Previous Motion {{{ noremap (easymotion-next) \ :call EasyMotion#NextPrevious(0,0) xnoremap (easymotion-next) \ :call EasyMotion#NextPrevious(1,0) noremap (easymotion-prev) \ :call EasyMotion#NextPrevious(0,1) xnoremap (easymotion-prev) \ :call EasyMotion#NextPrevious(1,1) "}}} " -- Line Motion {{{ " Word Line: {{{ noremap (easymotion-wl) :call EasyMotion#WBL(0,0) xnoremap (easymotion-wl) :call EasyMotion#WBL(1,0) noremap (easymotion-bl) :call EasyMotion#WBL(0,1) xnoremap (easymotion-bl) :call EasyMotion#WBL(1,1) noremap (easymotion-bd-wl) :call EasyMotion#WBL(0,2) xnoremap (easymotion-bd-wl) :call EasyMotion#WBL(1,2) "}}} " End Word Line: {{{ noremap (easymotion-el) :call EasyMotion#EL(0,0) xnoremap (easymotion-el) :call EasyMotion#EL(1,0) noremap (easymotion-gel) :call EasyMotion#EL(0,1) xnoremap (easymotion-gel) :call EasyMotion#EL(1,1) noremap (easymotion-bd-el) :call EasyMotion#EL(0,2) xnoremap (easymotion-bd-el) :call EasyMotion#EL(1,2) "}}} " LineAnywhere Line: {{{ noremap (easymotion-lineforward) \ :call EasyMotion#LineAnywhere(0,0) xnoremap (easymotion-lineforward) \ :call EasyMotion#LineAnywhere(1,0) noremap (easymotion-linebackward) \ :call EasyMotion#LineAnywhere(0,1) xnoremap (easymotion-linebackward) \ :call EasyMotion#LineAnywhere(1,1) noremap (easymotion-lineanywhere) \ :call EasyMotion#LineAnywhere(0,2) xnoremap (easymotion-lineanywhere) \ :call EasyMotion#LineAnywhere(1,2) "}}} "}}} " -- Special Motion {{{ onoremap (easymotion-special-l) :call EasyMotion#SelectLines() xnoremap (easymotion-special-l) :call EasyMotion#SelectLines() onoremap (easymotion-special-p) :call EasyMotion#SelectPhrase() xnoremap (easymotion-special-p) :call EasyMotion#SelectPhrase() nnoremap (easymotion-special-ly) :call EasyMotion#SelectLinesYank() nnoremap (easymotion-special-ld) :call EasyMotion#SelectLinesDelete() nnoremap (easymotion-special-py) :call EasyMotion#SelectPhraseYank() nnoremap (easymotion-special-pd) :call EasyMotion#SelectPhraseDelete() "}}} " }}} " == Default key mapping {{{ if g:EasyMotion_do_mapping == 1 || g:EasyMotion_do_special_mapping == 1 " Prepare Prefix: {{{ if exists('g:EasyMotion_leader_key') exec 'map ' . g:EasyMotion_leader_key . ' (easymotion-prefix)' else if !hasmapto('(easymotion-prefix)') map (easymotion-prefix) endif endif "}}} " Default Mapping: call EasyMotion#init#InitMappings({ \ 'f' : { 'name': 'S' , 'dir': 0 } \ , 'F' : { 'name': 'S' , 'dir': 1 } \ , 's' : { 'name': 'S' , 'dir': 2 } \ , 'S' : { 'name': 'WB' , 'dir': 2 } \ , '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 } \ }, g:EasyMotion_do_mapping) " Special Mapping For Default: {{{ call EasyMotion#init#InitSpecialMappings({ \ 'l' : { 'name': 'SelectLines'} \ , 'p' : { 'name': 'SelectPhrase'} \ }, g:EasyMotion_do_special_mapping) " }}} endif "}}} " == Restore 'cpoptions' {{{ let &cpo = s:save_cpo unlet s:save_cpo " }}} " vim: fdm=marker:et:ts=4:sw=4:sts=4