From 6ed48b12e451a0770d5a3f236e66e0e7e9a39c8d Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Fri, 4 Jan 2019 14:55:19 +1300 Subject: Add experimental delimit_operator.vim plugin This is an attempt at a small subset of surround.vim's behaviour, hopefully drastically simplified. I'm not actually sure how useful or practical this is going to be yet. --- vim/autoload/delimit_operator.vim | 50 +++++++++++++++++++++++++++++++++++++++ vim/plugin/delimit_operator.vim | 12 ++++++++++ vim/vimrc | 8 +++++++ 3 files changed, 70 insertions(+) create mode 100644 vim/autoload/delimit_operator.vim create mode 100644 vim/plugin/delimit_operator.vim 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! `[\`]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 (DelimitOperator) + \ delimit_operator#Map() +xnoremap (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 : ^"zyg_:z " \! executes line with 'shell' nnoremap ! ^"zyg_:!z +" 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.' (DelimitOperator)'.s:char + execute 'xmap q'.s:char.' (DelimitOperator)'.s:char +endfor +unlet s:char + " Source any .vim files from ~/.vim/config runtime! config/*.vim -- cgit v1.2.3 From fce9e5cb20a3fa179bdc8ddb6ccea38bba7115f3 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Fri, 4 Jan 2019 14:56:39 +1300 Subject: Bump VERSION --- VERSION | 4 ++-- 1 file changed, 2 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 -- cgit v1.2.3