我有inoremap <C-d> <C-o>:%s/\<<C-r><C-w>\>\C//g<Left><Left>
,效果很好(或多或少模拟了 sublime text 的 find-all 多光标)。
但是它让我处于正常模式,有没有什么办法可以让它使用输入功能,这样它就会让我回到插入模式?
答案1
经过进一步挖掘,我发现https://stackoverflow.com/questions/15273810/remap-key-and-get-user-input并最终以某种方式采用了它:
function! PoorMultiCursor()
let word = expand('<cword>')
if strlen(word) > 0
call inputsave()
let repl = input('replace "'.word.'" with: ')
call inputrestore()
if strlen(repl) > 0
execute '%s/\<'.word.'\>/'.repl.'/g'
endif
endif
endfunction
" sublime text's ctrl+d / alt+f3 (find all)
inoremap <C-d> <C-o>:call PoorMultiCursor()<cr>
nnoremap <C-d> :call PoorMultiCursor()<cr>
vnoremap <C-d> :call PoorMultiCursor()<cr>