diff options
Diffstat (limited to 'autoload/paste_insert.vim')
-rw-r--r-- | autoload/paste_insert.vim | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/autoload/paste_insert.vim b/autoload/paste_insert.vim index 946e09a..5b26875 100644 --- a/autoload/paste_insert.vim +++ b/autoload/paste_insert.vim @@ -9,11 +9,22 @@ function! paste_insert#() abort autocmd User Start \ call s:Start() - " When starting insert mode, add completion hook for when we leave + " On insert mode start, add leaving hook to complete operation autocmd InsertEnter * \ autocmd paste_insert InsertLeave * \ doautocmd paste_insert User Complete + " Text changed outside insert mode, complete operation + if exists('##TextChanged') + autocmd TextChanged * + \ doautocmd paste_insert User Complete + else + autocmd CursorMoved * + \ if changenr() > b:paste_insert_changenr + \| doautocmd paste_insert User Complete + \|endif + endif + " User waits too long in normal mode, timeout autocmd CursorHold * \ doautocmd paste_insert User Timeout @@ -38,6 +49,9 @@ let s:cancel_keys = get(g:, 'paste_insert_cancel_keys', ['<C-C>', '<Esc>']) " Start the paste: remap any cancel keys, set 'paste' function! s:Start() abort + if exists('##TextChanged') + let b:paste_insert_changenr = changenr() + endif for key in s:cancel_keys if maparg(key, 'n') ==# '' execute join(['nnoremap', key, @@ -51,6 +65,9 @@ endfunction " Stop the paste: unset 'paste', restore prior function of cancel key function! s:Stop() abort + if exists('##TextChanged') + unlet b:paste_insert_changenr + endif set nopaste paste? for key in s:cancel_keys execute join(['nunmap', key]) |