mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-04-14 15:19:12 +08:00
Add register support in Iedit (#4124)
This commit is contained in:
parent
040181bc92
commit
db4820ac67
@ -84,6 +84,8 @@ function! SpaceVim#plugins#iedit#start(...) abort
|
|||||||
let curpos = getcurpos()
|
let curpos = getcurpos()
|
||||||
let argv = get(a:000, 0, '')
|
let argv = get(a:000, 0, '')
|
||||||
let save_reg_k = @k
|
let save_reg_k = @k
|
||||||
|
" what the fuck, why register " is cleared.
|
||||||
|
let save_reg_default = @"
|
||||||
let use_expr = 0
|
let use_expr = 0
|
||||||
if !empty(argv) && type(argv) == 4
|
if !empty(argv) && type(argv) == 4
|
||||||
if has_key(argv, 'expr')
|
if has_key(argv, 'expr')
|
||||||
@ -101,6 +103,7 @@ function! SpaceVim#plugins#iedit#start(...) abort
|
|||||||
let symbol = split(@k, "\n")[0]
|
let symbol = split(@k, "\n")[0]
|
||||||
endif
|
endif
|
||||||
let @k = save_reg_k
|
let @k = save_reg_k
|
||||||
|
let @" = save_reg_default
|
||||||
call setpos('.', curpos)
|
call setpos('.', curpos)
|
||||||
let begin = get(a:000, 1, 1)
|
let begin = get(a:000, 1, 1)
|
||||||
let end = get(a:000, 2, line('$'))
|
let end = get(a:000, 2, line('$'))
|
||||||
@ -144,6 +147,8 @@ function! s:handle(mode, char) abort
|
|||||||
return s:handle_f_char(a:char)
|
return s:handle_f_char(a:char)
|
||||||
elseif a:mode ==# 'n'
|
elseif a:mode ==# 'n'
|
||||||
return s:handle_normal(a:char)
|
return s:handle_normal(a:char)
|
||||||
|
elseif a:mode ==# 'i' && s:Operator ==# 'r'
|
||||||
|
return s:handle_register(a:char)
|
||||||
elseif a:mode ==# 'i'
|
elseif a:mode ==# 'i'
|
||||||
return s:handle_insert(a:char)
|
return s:handle_insert(a:char)
|
||||||
endif
|
endif
|
||||||
@ -166,6 +171,22 @@ function! s:handle_f_char(char) abort
|
|||||||
return s:cursor_stack[0].begin . s:cursor_stack[0].cursor . s:cursor_stack[0].end
|
return s:cursor_stack[0].begin . s:cursor_stack[0].cursor . s:cursor_stack[0].end
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:handle_register(char) abort
|
||||||
|
let char = nr2char(a:char)
|
||||||
|
if char =~# '[a-zA-Z0-9"+:/]'
|
||||||
|
silent! call s:remove_cursor_highlight()
|
||||||
|
let s:Operator = ''
|
||||||
|
let reg = '@' . char
|
||||||
|
let paste = get(split(eval(reg), "\n"), 0, '')
|
||||||
|
for i in range(len(s:cursor_stack))
|
||||||
|
let s:cursor_stack[i].begin = s:cursor_stack[i].begin . paste
|
||||||
|
endfor
|
||||||
|
call s:replace_symbol()
|
||||||
|
silent! call s:highlight_cursor()
|
||||||
|
endif
|
||||||
|
return s:cursor_stack[0].begin . s:cursor_stack[0].cursor . s:cursor_stack[0].end
|
||||||
|
endfunction
|
||||||
|
|
||||||
let s:toggle_stack = {}
|
let s:toggle_stack = {}
|
||||||
|
|
||||||
" here is a list of normal command which can be handled by idedit
|
" here is a list of normal command which can be handled by idedit
|
||||||
@ -427,6 +448,9 @@ function! s:handle_insert(char) abort
|
|||||||
let s:cursor_stack[i].end = substitute(s:cursor_stack[i].end,
|
let s:cursor_stack[i].end = substitute(s:cursor_stack[i].end,
|
||||||
\ '^.', '', 'g')
|
\ '^.', '', 'g')
|
||||||
endfor
|
endfor
|
||||||
|
elseif a:char == 18 " <C-r>
|
||||||
|
let s:Operator = 'r'
|
||||||
|
call s:timeout()
|
||||||
elseif a:char == 1 || a:char ==# "\<Home>"
|
elseif a:char == 1 || a:char ==# "\<Home>"
|
||||||
" Ctrl-a or <Home>
|
" Ctrl-a or <Home>
|
||||||
let is_movement = 1
|
let is_movement = 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user