diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2018-09-12 23:47:04 +1200 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2018-09-12 23:47:04 +1200 |
commit | dce5abc0724428f805562dd32bf9a71677d55aaa (patch) | |
tree | df93d503f9082a1b335fb6735ba4ec9cac2f1424 /vim/plugin | |
parent | Merge branch 'hotfix/v1.68.1' into develop (diff) | |
download | dotfiles-dce5abc0724428f805562dd32bf9a71677d55aaa.tar.gz dotfiles-dce5abc0724428f805562dd32bf9a71677d55aaa.zip |
Replace paste_open.vim with paste_hook.vim
Still a little experimental; no documentation (or distribution) yet.
Diffstat (limited to 'vim/plugin')
-rw-r--r-- | vim/plugin/paste_hook.vim | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/vim/plugin/paste_hook.vim b/vim/plugin/paste_hook.vim new file mode 100644 index 00000000..5697a198 --- /dev/null +++ b/vim/plugin/paste_hook.vim @@ -0,0 +1,44 @@ +" +" paste_hook.vim: Mapping target to add a self-clearing autocmd that unsets +" 'paste' on the next InsertLeave event, if set; intended for use as a prefix +" to an insert session to make it happen in paste mode. +" +" Author: Tom Ryder <tom@sanctum.geek.nz +" Copyright: Same as Vim itself +" +if exists('g:loaded_paste_hook') || &compatible + finish +endif +if !exists('##InsertLeave') + finish +endif +let g:loaded_paste_hook = 1 + +" Start paste mode, establish hook to end it +function! s:Set() abort + + " Do nothing if 'paste' is already set + if &paste + return + endif + + " Turn on 'paste' mode and set up the hook to clear it the next time we + " leave insert mode + set paste + augroup paste_hook + autocmd! + autocmd InsertLeave * call s:Clear() + augroup END + +endfunction + +" End paste mode and clear the hook that called us +function! s:Clear() abort + set nopaste + autocmd! paste_hook InsertLeave +endfunction + +" Set up mappings +nnoremap <silent> <unique> + \ <Plug>(PasteHook) + \ :<C-U>call <SID>Set()<CR> |