aboutsummaryrefslogtreecommitdiff
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
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
-rw-r--r--VERSION4
-rw-r--r--vim/autoload/delimit_operator.vim50
-rw-r--r--vim/plugin/delimit_operator.vim12
-rw-r--r--vim/vimrc8
4 files changed, 72 insertions, 2 deletions
diff --git a/VERSION b/VERSION
index 51de1854..4710cbdc 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-tejr dotfiles v4.6.1
-Thu Jan 3 21:48:25 UTC 2019
+tejr dotfiles v4.7.0
+Fri Jan 4 01:56:39 UTC 2019
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
diff --git a/vim/plugin/delimit_operator.vim b/vim/plugin/delimit_operator.vim
new file mode 100644
index 00000000..0a3e62fc
--- /dev/null
+++ b/vim/plugin/delimit_operator.vim
@@ -0,0 +1,12 @@
+if exists('g:loaded_delimit_operator') || &compatible
+ finish
+endif
+if v:version < 700
+ finish
+endif
+let g:loaded_delimit_operator = 1
+
+nnoremap <expr> <Plug>(DelimitOperator)
+ \ delimit_operator#Map()
+xnoremap <expr> <Plug>(DelimitOperator)
+ \ delimit_operator#Map()
diff --git a/vim/vimrc b/vim/vimrc
index 724a32e7..bf30df7d 100644
--- a/vim/vimrc
+++ b/vim/vimrc
@@ -421,5 +421,13 @@ nnoremap <Leader>: ^"zyg_:<C-R>z<CR>
" \! executes line with 'shell'
nnoremap <Leader>! ^"zyg_:!<C-R>z<CR>
+" Testing out delimit_operator.vim, in development
+" Use q for a prefix key, followed by the wrapping quote
+for s:char in ["'", '"', '`', '[', '<', '(', '{', '*']
+ execute 'nmap q'.s:char.' <Plug>(DelimitOperator)'.s:char
+ execute 'xmap q'.s:char.' <Plug>(DelimitOperator)'.s:char
+endfor
+unlet s:char
+
" Source any .vim files from ~/.vim/config
runtime! config/*.vim