diff --git a/autoload/delimitMate.vim b/autoload/delimitMate.vim index 9f7afda..ec6a3c1 100644 --- a/autoload/delimitMate.vim +++ b/autoload/delimitMate.vim @@ -10,8 +10,31 @@ "let delimitMate_loaded = 1 +if !exists('s:options') + let options = {} +endif +function! s:s(name, value, ...) "{{{ + let scope = (a:0 ? a:1 : 'b') . ':' + let prefix = (!a:0 || a:0 && a:1 == 's' ? '_l_' : '') . 'delimitMate_' + exec 'let ' . scope . prefix . a:name . ' = a:value' +endfunction "}}} + function! s:g(name, ...) "{{{ - return eval('b:_l_delimitMate_' . a:name) + let scope = (a:0 ? a:1 : 'b') . ':' + let prefix = (!a:0 || a:0 && a:1 == 's' ? '_l_' : '') . 'delimitMate_' + return eval(scope . prefix . a:name) +endfunction "}}} + +function! s:exists(name, ...) "{{{ + return exists((a:0 ? a:1 : 's') . ':' . a:name) +endfunction "}}} + +function! delimitMate#Set(...) "{{{ + return call('s:s', a:000) +endfunction "}}} + +function! delimitMate#Get(...) "{{{ + return call('s:g', a:000) endfunction "}}} function! delimitMate#ShouldJump(...) "{{{ @@ -205,7 +228,7 @@ function! delimitMate#IsForbidden(char) "{{{ endfunction "}}} function! delimitMate#FlushBuffer() " {{{ - let b:_l_delimitMate_buffer = [] + call s:s('buffer', []) return '' endfunction " }}} @@ -515,7 +538,7 @@ function! delimitMate#Finish(move_back) " {{{ let buffer = join(s:g('buffer'), '') let len2 = len(buffer) " Reset buffer: - let b:_l_delimitMate_buffer = [] + call s:s('buffer', []) let line = getline('.') let col = col('.') -2 if col < 0 diff --git a/plugin/delimitMate.vim b/plugin/delimitMate.vim index ee87476..722ff8e 100644 --- a/plugin/delimitMate.vim +++ b/plugin/delimitMate.vim @@ -34,20 +34,15 @@ let delimitMate_version = "2.6" function! s:option_init(name, default) "{{{ let b = exists("b:delimitMate_" . a:name) let g = exists("g:delimitMate_" . a:name) - let prefix = "_l_delimitMate_" - + " Find value to use. if !b && !g - let sufix = a:default - elseif !b && g - exec "let sufix = g:delimitMate_" . a:name + let value = a:default + elseif b + exec "let value = b:delimitMate_" . a:name else - exec "let sufix = b:delimitMate_" . a:name + exec "let value = g:delimitMate_" . a:name endif - if exists("b:" . prefix . a:name) - exec "unlockvar! b:" . prefix . a:name - endif - exec "let b:" . prefix . a:name . " = " . string(sufix) - exec "lockvar! b:" . prefix . a:name + call s:s(a:name, value) endfunction "}}} function! s:init() "{{{ @@ -58,21 +53,21 @@ function! s:init() "{{{ " matchpairs call s:option_init("matchpairs", string(&matchpairs)[1:-2]) - call s:option_init("matchpairs_list", map(split(b:_l_delimitMate_matchpairs, ','), 'split(v:val, '':'')')) - call s:option_init("left_delims", map(copy(b:_l_delimitMate_matchpairs_list), 'v:val[0]')) - call s:option_init("right_delims", map(copy(b:_l_delimitMate_matchpairs_list), 'v:val[1]')) + call s:option_init("matchpairs_list", map(split(s:g('matchpairs'), ','), 'split(v:val, '':'')')) + call s:option_init("left_delims", map(copy(s:g('matchpairs_list')), 'v:val[0]')) + call s:option_init("right_delims", map(copy(s:g('matchpairs_list')), 'v:val[1]')) " quotes call s:option_init("quotes", "\" ' `") - call s:option_init("quotes_list", split(b:_l_delimitMate_quotes, '\zs')) + call s:option_init("quotes_list", split(s:g('quotes'), '\zs')) " nesting_quotes call s:option_init("nesting_quotes", []) " excluded_regions call s:option_init("excluded_regions", "Comment") - call s:option_init("excluded_regions_list", split(b:_l_delimitMate_excluded_regions, ',\s*')) - let enabled = len(b:_l_delimitMate_excluded_regions_list) > 0 + call s:option_init("excluded_regions_list", split(s:g('excluded_regions'), ',\s*')) + let enabled = len(s:g('excluded_regions_list')) > 0 call s:option_init("excluded_regions_enabled", enabled) " excluded filetypes @@ -124,7 +119,7 @@ function! s:init() "{{{ " apostrophes call s:option_init("apostrophes", "") - call s:option_init("apostrophes_list", split(b:_l_delimitMate_apostrophes, ":\s*")) + call s:option_init("apostrophes_list", split(s:g('apostrophes'), ":\s*")) " tab2exit call s:option_init("tab2exit", 1) @@ -135,7 +130,7 @@ function! s:init() "{{{ " eol marker call s:option_init("eol_marker", "") - let b:_l_delimitMate_buffer = [] + call s:s('buffer', []) endfunction "}}} Init() @@ -143,6 +138,14 @@ endfunction "}}} Init() " Functions: {{{ +function! s:g(...) " {{{ + return call('delimitMate#Get', a:000) +endfunction " }}} + +function! s:s(...) " {{{ + return call('delimitMate#Set', a:000) +endfunction " }}} + function! s:Map() "{{{ " Set mappings: try @@ -152,7 +155,7 @@ function! s:Map() "{{{ let save_cpo = &cpo set keymap= set cpo&vim - if b:_l_delimitMate_autoclose + if s:g('autoclose') call s:AutoClose() else call s:NoAutoClose() @@ -171,10 +174,10 @@ endfunction "}}} Map() function! s:Unmap() " {{{ let imaps = - \ b:_l_delimitMate_right_delims + - \ b:_l_delimitMate_left_delims + - \ b:_l_delimitMate_quotes_list + - \ b:_l_delimitMate_apostrophes_list + + \ s:g('right_delims') + + \ s:g('left_delims') + + \ s:g('quotes_list') + + \ s:g('apostrophes_list') + \ ['', '', '', '', '', '', ''] + \ ['', '', '', '', '', ''] + \ ['', ''] + @@ -201,7 +204,7 @@ function! s:TestMappingsDo() "{{{ if !exists("g:delimitMate_testing") call delimitMate#TestMappings() else - let temp_varsDM = [b:_l_delimitMate_expand_space, b:_l_delimitMate_expand_cr, b:_l_delimitMate_autoclose] + let temp_varsDM = [s:g('expand_space'), s:g('expand_cr'), s:g('autoclose')] for i in [0,1] let b:delimitMate_expand_space = i let b:delimitMate_expand_cr = i @@ -283,7 +286,7 @@ function! s:FlushBuffer() " {{{ endfunction " }}} function! s:empty_buffer() - return empty(b:_l_delimitMate_buffer) + return empty(s:g('buffer')) endfunction "}}} @@ -291,7 +294,7 @@ endfunction " Mappers: {{{ function! s:NoAutoClose() "{{{ " inoremap ) =delimitMate#SkipDelim('\)') - for delim in b:_l_delimitMate_right_delims + b:_l_delimitMate_quotes_list + for delim in s:g('right_delims') + s:g('quotes_list') if delim == '|' let delim = '' endif @@ -304,23 +307,23 @@ function! s:AutoClose() "{{{ " Add matching pair and jump to the midle: " inoremap ( () let i = 0 - while i < len(b:_l_delimitMate_matchpairs_list) - let ld = b:_l_delimitMate_left_delims[i] == '|' ? '' : b:_l_delimitMate_left_delims[i] - let rd = b:_l_delimitMate_right_delims[i] == '|' ? '' : b:_l_delimitMate_right_delims[i] + while i < len(s:g('matchpairs_list')) + let ld = s:g('left_delims')[i] == '|' ? '' : s:g('left_delims')[i] + let rd = s:g('right_delims')[i] == '|' ? '' : s:g('right_delims')[i] exec 'inoremap delimitMate' . ld . ' ' . ld . '=delimitMate#ParenDelim("' . escape(rd, '|') . '")' exec 'silent! imap '.ld.' delimitMate'.ld let i += 1 endwhile " Exit from inside the matching pair: - for delim in b:_l_delimitMate_right_delims + for delim in s:g('right_delims') exec 'inoremap delimitMate' . delim . ' =delimitMate#JumpOut("\' . delim . '")' exec 'silent! imap ' . delim . ' delimitMate'. delim endfor " Add matching quote and jump to the midle, or exit if inside a pair of matching quotes: " inoremap " =delimitMate#QuoteDelim("\"") - for delim in b:_l_delimitMate_quotes_list + for delim in s:g('quotes_list') if delim == '|' let delim = '' endif @@ -330,7 +333,7 @@ function! s:AutoClose() "{{{ " Try to fix the use of apostrophes (kept for backward compatibility): " inoremap n't n't - for map in b:_l_delimitMate_apostrophes_list + for map in s:g('apostrophes_list') exec "inoremap " . map . " " . map exec 'silent! imap ' . map . ' delimitMate' . map endfor @@ -349,17 +352,17 @@ function! s:ExtraMappings() "{{{ endif " Expand return if inside an empty pair: inoremap delimitMateCR =delimitMate#ExpandReturn() - if b:_l_delimitMate_expand_cr != 0 && !hasmapto('delimitMateCR', 'i') && maparg('', 'i') == '' + if s:g('expand_cr') != 0 && !hasmapto('delimitMateCR', 'i') && maparg('', 'i') == '' silent! imap delimitMateCR endif " Expand space if inside an empty pair: inoremap delimitMateSpace =delimitMate#ExpandSpace() - if b:_l_delimitMate_expand_space != 0 && !hasmapto('delimitMateSpace', 'i') && maparg('', 'i') == '' + if s:g('expand_space') != 0 && !hasmapto('delimitMateSpace', 'i') && maparg('', 'i') == '' silent! imap delimitMateSpace endif " Jump over any delimiter: inoremap delimitMateS-Tab =delimitMate#JumpAny("\") - if b:_l_delimitMate_tab2exit && !hasmapto('delimitMateS-Tab', 'i') && maparg('', 'i') == '' + if s:g('tab2exit') && !hasmapto('delimitMateS-Tab', 'i') && maparg('', 'i') == '' silent! imap delimitMateS-Tab endif " Change char buffer on Del: @@ -404,7 +407,7 @@ function! s:ExtraMappings() "{{{ endfor " Jump over next delimiters - inoremap delimitMateJumpMany =len(b:_l_delimitMate_buffer) ? delimitMate#Finish(0) : delimitMate#JumpMany() + inoremap delimitMateJumpMany =len(delimitMate#Get('buffer')) ? delimitMate#Finish(0) : delimitMate#JumpMany() if !hasmapto('delimitMateJumpMany', 'i') && maparg("g", 'i') == '' imap g delimitMateJumpMany endif