mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 04:30:04 +08:00
Highlight symbol
This commit is contained in:
parent
aacb3caa98
commit
df7bd02687
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
||||
@ -60,3 +99,16 @@ function! s:handle_insert(char) abort
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user