aboutsummaryrefslogtreecommitdiff
path: root/vim/autoload/delimit_operator.vim
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2019-01-04 14:56:39 +1300
committerTom Ryder <tom@sanctum.geek.nz>2019-01-04 14:56:39 +1300
commitf64dd87e23709a5fc622dcd6e40812ce03c831ae (patch)
treed26be14e9a91268ede9d1975ae710c2b47b4ad4b /vim/autoload/delimit_operator.vim
parentMerge branch 'hotfix/v4.6.1' (diff)
parentBump VERSION (diff)
downloaddotfiles-f64dd87e23709a5fc622dcd6e40812ce03c831ae.tar.gz
dotfiles-f64dd87e23709a5fc622dcd6e40812ce03c831ae.zip
Merge branch 'release/v4.7.0'v4.7.0
* release/v4.7.0: Bump VERSION Add experimental delimit_operator.vim plugin
Diffstat (limited to 'vim/autoload/delimit_operator.vim')
-rw-r--r--vim/autoload/delimit_operator.vim50
1 files changed, 50 insertions, 0 deletions
diff --git a/vim/autoload/delimit_operator.vim b/vim/autoload/delimit_operator.vim
new file mode 100644
index 00000000..026fe63f
--- /dev/null
+++ b/vim/autoload/delimit_operator.vim
@@ -0,0 +1,50 @@
+let s:pairs = {
+ \ '(': ')',
+ \ '<': '>',
+ \ '[': ']',
+ \ '{': '}',
+ \ }
+
+function! delimit_operator#Operatorfunc(type) abort
+
+ let l:save = {
+ \ 'unnamed': @@,
+ \ 'clipboard': &clipboard,
+ \ 'selection': &selection
+ \ }
+
+ set clipboard-=unnamed
+ set clipboard-=unnamedplus
+
+ set selection=inclusive
+
+ let l:delimiters = {
+ \ 'open': s:char,
+ \ 'close': get(s:pairs, s:char, s:char)
+ \ }
+
+ if a:type ==# 'line'
+ silent normal! '[V']y
+ elseif a:type ==# 'block'
+ silent execute "normal! `[\<C-V>`]y"
+ else
+ silent normal! `[v`]y
+ endif
+
+ let @@ = l:delimiters['open']
+ \ . @@
+ \ . l:delimiters['close']
+
+ silent normal! gvp
+
+ let @@ = l:save['unnamed']
+ let &clipboard = l:save['clipboard']
+ let &selection = l:save['selection']
+
+endfunction
+
+function! delimit_operator#Map() abort
+ let s:char = nr2char(getchar())
+ set operatorfunc=delimit_operator#Operatorfunc
+ return 'g@'
+endfunction