diff --git a/autoload/delimitMate.vim b/autoload/delimitMate.vim index d0301df..4a4ef96 100644 --- a/autoload/delimitMate.vim +++ b/autoload/delimitMate.vim @@ -56,6 +56,49 @@ function! delimitMate#IsBlockVisual() " {{{ return 0 endfunction " }}} +function! delimitMate#Visual(del) " {{{ + let mode = mode() + if mode == "\" + redraw + echom "delimitMate: delimitMate is disabled on blockwise visual mode." + return "" + endif + " Store unnamed register values for later use in delimitMate#RestoreRegister(). + let b:save_reg = getreg('"') + let b:save_reg_mode = getregtype('"') + + if len(getline('.')) == 0 + " This for proper wrap of empty lines. + let @" = "\n" + endif + + if mode ==# "V" + let dchar = "\" + else + let dchar = "" + endif + + let index = index(b:delimitMate_left_delims, a:del) + if index >= 0 + let ld = a:del + let rd = b:delimitMate_right_delims[index] + endif + + let index = index(b:delimitMate_right_delims, a:del) + if index >= 0 + let ld = b:delimitMate_left_delims[index] + let rd = a:del + endif + + let index = index(b:delimitMate_quotes_list, a:del) + if index >= 0 + let ld = a:del + let rd = ld + endif + + return "s" . ld . "\\"" . dchar . rd . "\:call delimitMate#RestoreRegister()\" +endfunction " }}} + function! delimitMate#IsEmptyPair(str) "{{{ for pair in b:delimitMate_matchpairs_list if a:str == join( split( pair, ':' ),'' ) @@ -158,14 +201,17 @@ function! delimitMate#GetCurrentSyntaxRegionIf(char) "{{{ endfunction "}}} function! delimitMate#IsForbidden(char) "{{{ + if b:delimitMate_excluded_regions_enabled = 0 + return 0 + endif let result = index(b:delimitMate_excluded_regions_list, delimitMate#GetCurrentSyntaxRegion()) >= 0 - if result - return result + if result >= 0 + return result + 1 endif let region = delimitMate#GetCurrentSyntaxRegionIf(a:char) let result = index(b:delimitMate_excluded_regions_list, region) >= 0 "return result || region == 'Comment' - return result + return result + 1 endfunction "}}} function! delimitMate#FlushBuffer() " {{{ @@ -367,7 +413,6 @@ function! delimitMate#AutoClose() "{{{ let ld = b:delimitMate_left_delims[i] let rd = b:delimitMate_right_delims[i] exec 'inoremap ' . ld . ' ' . ld . '=delimitMate#JumpIn("' . rd . '")' - "exec 'inoremap ' . ld . ' =delimitMate#JumpIn("' . ld . '")' let i += 1 endwhile @@ -393,22 +438,8 @@ function! delimitMate#VisualMaps() " {{{ let VMapMsg = "delimitMate: delimitMate is disabled on blockwise visual mode." 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_list) - " Map left delimiter: - let ld = b:delimitMate_left_delims[i] - let rd = b:delimitMate_right_delims[i] - exec 'vnoremap ' . vleader . ld . ' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("' . VMapMsg . '") : mode() ==# "V" ? "s' . ld . '\\"\' . rd . '\:call delimitMate#RestoreRegister()\" : "s' . ld . '\\"' . rd . '\:call delimitMate#RestoreRegister()\"' - - " Map right delimiter: - exec 'vnoremap ' . vleader . rd . ' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("' . VMapMsg . '") : mode() ==# "V" ? "s' . ld . '\\"\' . rd . '\:call delimitMate#RestoreRegister()" : "s' . ld . '\\"' . rd . '\:call delimitMate#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_list - " vnoremap \' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("Message") : "s'\\"'\:call delimitMate#RestoreRegister()" - exec 'vnoremap ' . vleader . quote . ' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("' . VMapMsg . '") : mode() ==# "V" ? "s' . escape(quote,'"') .'\\"\' . escape(quote,'"') . '\:call delimitMate#RestoreRegister()" : "s' . escape(quote,'"') .'\\"' . escape(quote,'"') . '\:call delimitMate#RestoreRegister()"' + for del in b:delimitMate_right_delims + b:delimitMate_left_delims + b:delimitMate_quotes_list + exec "vnoremap " . vleader . del . ' delimitMate#Visual("' . escape(del, '"') . '")' endfor endfunction "}}} @@ -457,9 +488,11 @@ function! delimitMate#UnMap() " {{{ \ b:delimitMate_left_delims + \ b:delimitMate_quotes_list + \ b:delimitMate_apostrophes_list + - \ ['', '', '', '', '', ''] + - \ ['', '', '', '', '', '', ''] - let vmaps = b:delimitMate_right_delims + + \ ['', '', '', '', '', '', ''] + + \ ['', '', '', '', '', ''] + + let vmaps = + \ b:delimitMate_right_delims + \ b:delimitMate_left_delims + \ b:delimitMate_quotes_list @@ -475,8 +508,7 @@ function! delimitMate#UnMap() " {{{ let vleader = b:delimitMate_visual_leader endif for map in vmaps - exec 'let result = maparg("' . escape(vleader . map, '"') . '", "v") =~? "delimitMate" ? 1 : 0' - if result == 1 + if maparg(vleader . map, "v") =~? "delimitMate" exec 'silent! vunmap ' . vleader . map endif endfor diff --git a/plugin/delimitMate.vim b/plugin/delimitMate.vim index 4d46287..8e7bb66 100644 --- a/plugin/delimitMate.vim +++ b/plugin/delimitMate.vim @@ -27,6 +27,9 @@ endif let s:loaded_delimitMate = 1 " }}} let delimitMate_version = '2.1_DEV' +"}}} + +" Tools: {{{ function! s:Init() "{{{ let b:loaded_delimitMate = 1 @@ -142,9 +145,7 @@ function! s:Init() "{{{ call delimitMate#ExtraMappings() endfunction "}}} Init() -"}}} -" Tools: {{{ function! s:TestMappingsDo() "{{{ if !exists("g:delimitMate_testing") call delimitMate#TestMappings() @@ -171,7 +172,6 @@ function! s:TestMappingsDo() "{{{ endif endfunction "}}} - function! s:DelimitMateDo() "{{{ if exists("g:delimitMate_excluded_ft") " Check if this file type is excluded: @@ -189,8 +189,6 @@ function! s:DelimitMateDo() "{{{ let save_keymap = &keymap set keymap= set cpo&vim - let save_keymap = &keymap - set keymap= call s:Init() finally let &cpo = save_cpo