1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 02:20:05 +08:00

Highlight symbol

This commit is contained in:
wsdjeg 2018-01-09 22:53:16 +08:00
parent aacb3caa98
commit df7bd02687
2 changed files with 66 additions and 3 deletions

View File

@ -72,6 +72,17 @@ function! s:string2chars(str) abort
endfunction
let s:file['string2chars'] = function('s:string2chars')
function! s:strAllIndex(str, need) abort
let rst = []
let idx = stridx(a:str, a:need)
while idx != -1
call add(rst, idx)
let idx = stridx(a:str, a:need, idx + 1)
endwhile
return rst
endfunction
let s:file['strAllIndex'] = function('s:strAllIndex')
function! SpaceVim#api#data#string#get() abort
return deepcopy(s:file)
endfunction

View File

@ -7,14 +7,45 @@
"=============================================================================
let s:stack = []
let s:index = -1
let s:mode = ''
let s:hi_id = ''
function! SpaceVim#plugins#iedit#start()
let s:VIMH = SpaceVim#api#import('vim#highlight')
let s:STRING = SpaceVim#api#import('data#string')
function! s:highlight_cursor() abort
let info = {
\ 'name' : 'SpaceVimGuideCursor',
\ 'guibg' : synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'guifg'),
\ 'guifg' : synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'guibg'),
\ 'ctermbg' : synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'ctermfg'),
\ 'ctermfg' : synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'ctermbg'),
\ }
hi def link SpaceVimGuideCursor Cursor
call s:VIMH.hi(info)
let s:cursor_hi = matchaddpos('SpaceVimGuideCursor', [[line('.'), col('.'), 1]])
endfunction
function! s:remove_cursor_highlight() abort
try
call matchdelete(s:cursor_hi)
catch
endtry
endfunction
function! SpaceVim#plugins#iedit#start(...)
let save_tve = &t_ve
setlocal t_ve=
let s:mode = 'n'
let w:spacevim_iedit_mode = s:mode
let w:spacevim_statusline_mode = 'in'
call s:highlight_cursor()
let begin = get(a:000, 0, 1)
let end = get(a:000, 1, line('$'))
let symbol = expand('<cword>')
call s:parse_symbol(begin, end, symbol)
redrawstatus!
while 1
let char = getchar()
@ -25,10 +56,18 @@ function! SpaceVim#plugins#iedit#start()
call s:handle(s:mode, char)
endif
endwhile
let s:stack = []
let s:index = -1
let s:mode = ''
let w:spacevim_iedit_mode = s:mode
let w:spacevim_statusline_mode = 'in'
let &t_ve = save_tve
call s:remove_cursor_highlight()
try
call matchdelete(s:hi_id)
catch
endtry
let s:hi_id = ''
endfunction
@ -45,7 +84,7 @@ function! s:handle_normal(char) abort
if a:char ==# 105
let s:mode = 'i'
let w:spacevim_iedit_mode = s:mode
let w:spacevim_statusline_mode = 'ii'
let w:spacevim_statusline_mode = 'ii'
redrawstatus!
endif
echom s:mode . '--' . a:char
@ -55,8 +94,21 @@ function! s:handle_insert(char) abort
if a:char == 27
let s:mode = 'n'
let w:spacevim_iedit_mode = s:mode
let w:spacevim_statusline_mode = 'in'
let w:spacevim_statusline_mode = 'in'
redrawstatus!
endif
echom s:mode . '--' . a:char
endfunction
function! s:parse_symbol(begin, end, symbol) abort
let len = len(a:symbol)
for l in range(a:begin, a:end)
let line = getline(l)
let idx = s:STRING.strAllIndex(line, a:symbol)
for pos_c in idx
call add(s:stack, [l, pos_c + 1, len])
endfor
endfor
let g:wsd = s:stack
let s:hi_id = matchaddpos('SpaceVimGuideCursor', s:stack)
endfunction