diff --git a/plugin/delimitMate.vim b/plugin/delimitMate.vim index 4945d3d..3ede073 100644 --- a/plugin/delimitMate.vim +++ b/plugin/delimitMate.vim @@ -41,6 +41,8 @@ let s:loaded_delimitMate = 1 " }}} function! s:Init() "{{{ + let b:loaded_delimitMate = 1 + " delimitMate_autoclose {{{ if !exists("b:delimitMate_autoclose") && !exists("g:delimitMate_autoclose") let b:delimitMate_autoclose = 1 @@ -103,8 +105,7 @@ function! s:Init() "{{{ else let s:quotes = split("\" ' `") endif - if exists('b:delimitMate_quotes') | unlet b:delimitMate_quotes | endif - let b:delimitMate_quotes = s:quotes " }}} + let b:delimitMate_quotes_list = s:quotes " }}} " delimitMate_visual_leader {{{ if !exists("b:delimitMate_visual_leader") && !exists("g:delimitMate_visual_leader") @@ -146,14 +147,13 @@ function! s:Init() "{{{ " delimitMate_apostrophes {{{ if !exists("b:delimitMate_apostrophes") && !exists("g:delimitMate_apostrophes") "let s:apostrophes = split("n't:'s:'re:'m:'d:'ll:'ve:s'",':') - let b:delimitMate_apostrophes = [] + let s:apostrophes = [] elseif !exists("b:delimitMate_apostrophes") && exists("g:delimitMate_apostrophes") - let b:delimitMate_apostrophes = split(g:delimitMate_apostrophes) + let s:apostrophes = split(g:delimitMate_apostrophes) else let s:apostrophes = split(b:delimitMate_apostrophes) - unlet b:delimitMate_apostrophes - let b:delimitMate_apostrophes = s:apostrophes - endif " }}} + endif + let b:delimitMate_apostrophes_list = s:apostrophes " }}} " delimitMate_tab2exit {{{ if !exists("b:delimitMate_tab2exit") && !exists("g:delimitMate_tab2exit") @@ -164,7 +164,7 @@ function! s:Init() "{{{ " Nothing to do. endif " }}} - let b:delimitMate_matchpairs = split(s:matchpairs_temp, ',') + let b:delimitMate_matchpairs_list = split(s:matchpairs_temp, ',') let b:delimitMate_left_delims = split(s:matchpairs_temp, ':.,\=') let b:delimitMate_right_delims = split(s:matchpairs_temp, ',\=.:') let s:VMapMsg = "delimitMate: delimitMate is disabled on blockwise visual mode." @@ -177,7 +177,6 @@ function! s:Init() "{{{ endif call s:VisualMaps() call s:ExtraMappings() - let b:loaded_delimitMate = 1 endfunction "}}} Init() "}}} @@ -197,13 +196,13 @@ endfunction "}}} function! DelimitMate_ShouldJump() "{{{ let char = getline('.')[col('.') - 1] - for pair in b:delimitMate_matchpairs + for pair in b:delimitMate_matchpairs_list if char == split( pair, ':' )[1] " Same character on the rigth, jump over it. return 1 endif endfor - for quote in b:delimitMate_quotes + for quote in b:delimitMate_quotes_list if char == quote " Same character on the rigth, jump over it. return 1 @@ -228,12 +227,12 @@ function! s:IsBlockVisual() " {{{ endfunction " }}} function! s:IsEmptyPair(str) "{{{ - for pair in b:delimitMate_matchpairs + for pair in b:delimitMate_matchpairs_list if a:str == join( split( pair, ':' ),'' ) return 1 endif endfor - for quote in b:delimitMate_quotes + for quote in b:delimitMate_quotes_list if a:str == quote . quote return 1 endif @@ -284,7 +283,7 @@ function! s:JumpIn(char) " {{{ if (col) < 0 call setline('.',a:char.line) else - echom string(col).':'.line[:(col)].'|'.line[(col+1):] + "echom string(col).':'.line[:(col)].'|'.line[(col+1):] call setline('.',line[:(col)].a:char.line[(col+1):]) endif return '' @@ -354,7 +353,7 @@ endfunction "}}} " Mappings: {{{ function! s:NoAutoClose() "{{{ " inoremap ) =SkipDelim('\)') - for delim in b:delimitMate_right_delims + b:delimitMate_quotes + for delim in b:delimitMate_right_delims + b:delimitMate_quotes_list exec 'inoremap ' . delim . ' =SkipDelim("' . escape(delim,'"') . '")' endfor endfunction "}}} @@ -363,14 +362,16 @@ function! s:AutoClose() "{{{ " Add matching pair and jump to the midle: " inoremap ( () let i = 0 - while i < len(b:delimitMate_matchpairs) - exec 'inoremap ' . b:delimitMate_left_delims[i] . ' ' . b:delimitMate_left_delims[i] . '=JumpIn("' . b:delimitMate_right_delims[i] . '")' + while i < len(b:delimitMate_matchpairs_list) + let ld = b:delimitMate_left_delims[i] + let rd = b:delimitMate_right_delims[i] + exec 'inoremap ' . ld . ' ' . ld . '=JumpIn("' . rd . '")' let i += 1 endwhile " Add matching quote and jump to the midle, or exit if inside a pair of matching quotes: " inoremap " =QuoteDelim("\"") - for delim in b:delimitMate_quotes + for delim in b:delimitMate_quotes_list exec 'inoremap ' . delim . ' =QuoteDelim("\' . delim . '")' endfor @@ -381,30 +382,31 @@ function! s:AutoClose() "{{{ " Try to fix the use of apostrophes (de-activated by default): " inoremap n't n't - for map in b:delimitMate_apostrophes + for map in b:delimitMate_apostrophes_list exec "inoremap " . map . " " . map endfor endfunction "}}} function! s:VisualMaps() " {{{ + let vleader = b:delimitMate_visual_leader " Wrap the selection with matching pairs, but do nothing if blockwise visual mode is active: let i = 0 - while i < len(b:delimitMate_matchpairs) + while i < len(b:delimitMate_matchpairs_list) " Map left delimiter: - " vnoremap \( IsBlockVisual() ? MapMsg("Message") : "s(\\")\:call RestoreRegister()" - exec 'vnoremap ' . b:delimitMate_visual_leader . b:delimitMate_left_delims[i] . ' IsBlockVisual() ? MapMsg("' . s:VMapMsg . '") : "s' . b:delimitMate_left_delims[i] . '\\"' . b:delimitMate_right_delims[i] . '\:call RestoreRegister()"' + let ld = b:delimitMate_left_delims[i] + let rd = b:delimitMate_right_delims[i] + exec 'vnoremap ' . vleader . ld . ' IsBlockVisual() ? MapMsg("' . s:VMapMsg . '") : "s' . ld . '\\"' . rd . '\:call RestoreRegister()"' " Map right delimiter: - " vnoremap \) IsBlockVisual() ? MapMsg("Message") : "s(\\")\:call RestoreRegister()" - exec 'vnoremap ' . b:delimitMate_visual_leader . b:delimitMate_right_delims[i] . ' IsBlockVisual() ? MapMsg("' . s:VMapMsg . '") : "s' . b:delimitMate_left_delims[i] . '\\"' . b:delimitMate_right_delims[i] . '\:call RestoreRegister()"' + exec 'vnoremap ' . vleader . rd . ' IsBlockVisual() ? MapMsg("' . s:VMapMsg . '") : "s' . ld . '\\"' . rd . '\:call RestoreRegister()"' let i += 1 endwhile " Wrap the selection with matching quotes, but do nothing if blockwise visual mode is active: - for quote in b:delimitMate_quotes + for quote in b:delimitMate_quotes_list " vnoremap \' IsBlockVisual() ? MapMsg("Message") : "s'\\"'\:call RestoreRegister()" - exec 'vnoremap ' . b:delimitMate_visual_leader . quote . ' IsBlockVisual() ? MapMsg("' . s:VMapMsg . '") : "s' . escape(quote,'"') .'\\"' . escape(quote,'"') . '\:call RestoreRegister()"' + exec 'vnoremap ' . vleader . quote . ' IsBlockVisual() ? MapMsg("' . s:VMapMsg . '") : "s' . escape(quote,'"') .'\\"' . escape(quote,'"') . '\:call RestoreRegister()"' endfor endfunction "}}} @@ -465,15 +467,15 @@ function! s:TestMappings() "{{{ exec "normal A\Visual-R: v\v" . b:delimitMate_visual_leader . b:delimitMate_right_delims[i] exec "normal A\Car return: " . b:delimitMate_left_delims[i] . "\|\GGA\\" endfor - for i in range(len(b:delimitMate_quotes)) - exec "normal GGAOpen & close: " . b:delimitMate_quotes[i] . "|" + for i in range(len(b:delimitMate_quotes_list)) + exec "normal GGAOpen & close: " . b:delimitMate_quotes_list[i] . "|" exec "normal A\Delete: " - exec "normal A". b:delimitMate_quotes[i] + exec "normal A". b:delimitMate_quotes_list[i] exec "normal a\|" - exec "normal A\Exit: " . b:delimitMate_quotes[i] . b:delimitMate_quotes[i] . "|" - exec "normal A\Space: " . b:delimitMate_quotes[i] . " |" - exec "normal GGA\Visual: v\v" . b:delimitMate_visual_leader . b:delimitMate_quotes[i] - exec "normal A\Car return: " . b:delimitMate_quotes[i] . "\|\GGA\\" + exec "normal A\Exit: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "|" + exec "normal A\Space: " . b:delimitMate_quotes_list[i] . " |" + exec "normal GGA\Visual: v\v" . b:delimitMate_visual_leader . b:delimitMate_quotes_list[i] + exec "normal A\Car return: " . b:delimitMate_quotes_list[i] . "\|\GGA\\" endfor else exec "normal i* NO AUTOCLOSE:\" @@ -486,13 +488,13 @@ function! s:TestMappings() "{{{ exec "normal A\Visual-R: v\v" . b:delimitMate_visual_leader . b:delimitMate_right_delims[i] exec "normal A\Car return: " . b:delimitMate_left_delims[i] . b:delimitMate_right_delims[i] . "\|\GGA\\" endfor - for i in range(len(b:delimitMate_quotes)) - exec "normal GGAOpen & close: " . b:delimitMate_quotes[i] . b:delimitMate_quotes[i] . "|" - exec "normal A\Delete: " . b:delimitMate_quotes[i] . b:delimitMate_quotes[i] . "\|" - exec "normal A\Exit: " . b:delimitMate_quotes[i] . b:delimitMate_quotes[i] . b:delimitMate_quotes[i] . "|" - exec "normal A\Space: " . b:delimitMate_quotes[i] . b:delimitMate_quotes[i] . " |" - exec "normal GGA\Visual: v\v" . b:delimitMate_visual_leader . b:delimitMate_quotes[i] - exec "normal A\Car return: " . b:delimitMate_quotes[i] . b:delimitMate_quotes[i] . "\|\GGA\\" + for i in range(len(b:delimitMate_quotes_list)) + exec "normal GGAOpen & close: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "|" + exec "normal A\Delete: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "\|" + exec "normal A\Exit: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "|" + exec "normal A\Space: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . " |" + exec "normal GGA\Visual: v\v" . b:delimitMate_visual_leader . b:delimitMate_quotes_list[i] + exec "normal A\Car return: " . b:delimitMate_quotes_list[i] . b:delimitMate_quotes_list[i] . "\|\GGA\\" endfor endif exec "normal \i" @@ -511,7 +513,7 @@ endfunction "}}} function! s:UnMap() " {{{ " No Autoclose Mappings: - for char in b:delimitMate_right_delims + b:delimitMate_quotes + for char in b:delimitMate_right_delims + b:delimitMate_quotes_list if maparg(char,"i") =~? 'SkipDelim' exec 'silent! iunmap ' . char "echomsg 'iunmap ' . char @@ -520,7 +522,7 @@ function! s:UnMap() " {{{ " Autoclose Mappings: let i = 0 - let l = len(b:delimitMate_matchpairs) + let l = len(b:delimitMate_matchpairs_list) while i < l if maparg(b:delimitMate_left_delims[i],"i") =~? 'JumpIn' exec 'silent! iunmap ' . b:delimitMate_left_delims[i] @@ -528,7 +530,7 @@ function! s:UnMap() " {{{ endif let i += 1 endwhile - for char in b:delimitMate_quotes + for char in b:delimitMate_quotes_list if maparg(char, "i") =~? 'QuoteDelim' exec 'silent! iunmap ' . char "echomsg 'iunmap ' . char @@ -540,12 +542,12 @@ function! s:UnMap() " {{{ "echomsg 'iunmap ' . char endif endfor - for map in b:delimitMate_apostrophes + for map in b:delimitMate_apostrophes_list exec "silent! iunmap " . map endfor " Visual Mappings: - for char in b:delimitMate_right_delims + b:delimitMate_left_delims + b:delimitMate_quotes + for char in b:delimitMate_right_delims + b:delimitMate_left_delims + b:delimitMate_quotes_list if maparg(b:delimitMate_visual_leader . char,"v") =~? 'IsBlock' exec 'silent! vunmap ' . b:delimitMate_visual_leader . char "echomsg 'vunmap ' . b:delimitMate_visual_leader . char @@ -594,7 +596,7 @@ function! s:DelimitMateDo() "{{{ " Check if this file type is excluded: for ft in split(g:delimitMate_excluded_ft,',') if ft ==? &filetype - if !exists("b:delimitMate_quotes") + if !exists("b:delimitMate_quotes_list") return 1 endif "echomsg "excluded"