aboutsummaryrefslogtreecommitdiff
path: root/vim
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2018-09-12 23:47:40 +1200
committerTom Ryder <tom@sanctum.geek.nz>2018-09-12 23:47:40 +1200
commitf06e6def650cf62af7a0bd7e067c578d2ba6fa8f (patch)
treeea5e6118f39e57d2f6958782ff50ce925a1479ee /vim
parentMerge branch 'hotfix/v1.68.1' (diff)
parentBump VERSION (diff)
downloaddotfiles-f06e6def650cf62af7a0bd7e067c578d2ba6fa8f.tar.gz
dotfiles-f06e6def650cf62af7a0bd7e067c578d2ba6fa8f.zip
Merge branch 'release/v1.69.0'v1.69.0
* release/v1.69.0: Bump VERSION Replace paste_open.vim with paste_hook.vim
Diffstat (limited to 'vim')
-rw-r--r--vim/plugin/paste_hook.vim44
-rw-r--r--vim/vimrc9
2 files changed, 50 insertions, 3 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>
diff --git a/vim/vimrc b/vim/vimrc
index d017dfe9..523bace5 100644
--- a/vim/vimrc
+++ b/vim/vimrc
@@ -331,12 +331,15 @@ if exists(':xnoremap')
endif
" \o opens a line below in paste mode
-nmap <Bslash>o <Plug>(PasteOpenBelow)
+nmap <Bslash>o <Plug>(PasteHook)o
" \O opens a line above in paste mode
-nmap <Bslash>O <Plug>(PasteOpenAbove)
+nmap <Bslash>O <Plug>(PasteHook)O
-" \p toggles paste mode
+" \p toggles paste mode, or sets a hook if plugin available
nnoremap <Bslash>p :<C-U>set paste! paste?<CR>
+if &loadplugins
+ nmap <Bslash>p <Plug>(PasteHook)
+endif
" \q formats the current paragraph
nnoremap <Bslash>q gqap