From 29cb16c42e832da4139a597832168d460908fa45 Mon Sep 17 00:00:00 2001 From: Israel Chauca Fuentes Date: Thu, 6 May 2010 01:34:18 -0500 Subject: [PATCH] Many fixes. --- autoload/delimitMate.vim | 117 +++++++++++++++++++++++++++++++-------- plugin/delimitMate.vim | 53 +++++++++++------- 2 files changed, 126 insertions(+), 44 deletions(-) diff --git a/autoload/delimitMate.vim b/autoload/delimitMate.vim index d540008..5e1bd99 100644 --- a/autoload/delimitMate.vim +++ b/autoload/delimitMate.vim @@ -42,7 +42,7 @@ function! delimitMate#ShouldJump() "{{{ endfunction "}}} function! delimitMate#IsBlockVisual() " {{{ - if visualmode() == "" + if mode() == "\" return 1 endif " Store unnamed register values for later use in delimitMate#RestoreRegister(). @@ -193,13 +193,9 @@ function! delimitMate#JumpOut(char) "{{{ let line = getline('.') let col = col('.')-2 if line[col+1] == a:char - if len(b:delimitMate_buffer) == 0 - return "\" - else - call setline('.',line[:(col)].line[(col+2):]) - call delimitMate#RmBuffer(1) - return a:char - endif + return a:char . delimitMate#Del() + else + return a:char endif endfunction " }}} @@ -230,11 +226,7 @@ function! delimitMate#SkipDelim(char) "{{{ elseif cur[1] == a:char " Exit pair "return delimitMate#WriteBefore(a:char) - if delimitMate#Del() == '' - return "\" - else - return a:char - endif + return a:char . delimitMate#Del() "elseif cur[1] == ' ' && cur[2] == a:char "" I'm leaving this in case someone likes it. Jump an space and delimiter. "return "\\" @@ -307,10 +299,13 @@ function! delimitMate#BS() " {{{ "call delimitMate#RmBuffer(1) return "\" . delimitMate#Del() " return "\\\" - elseif b:delimitMate_expand_cr && - \ (delimitMate#IsCRExpansion() != 0 || delimitMate#IsSpaceExpansion()) + elseif b:delimitMate_expand_space && + \ delimitMate#IsSpaceExpansion() "call delimitMate#RmBuffer(1) - return "\" . delimitMate#Del + return "\" . delimitMate#Del() + elseif b:delimitMate_expand_cr && + \ delimitMate#IsCRExpansion() + return "\\" else return "\" endif @@ -403,17 +398,17 @@ function! delimitMate#VisualMaps() " {{{ " 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 . '") : "s' . ld . '\\"' . rd . '\:call delimitMate#RestoreRegister()"' + 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 . '") : "s' . ld . '\\"' . rd . '\:call delimitMate#RestoreRegister()"' + 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 . '") : "s' . escape(quote,'"') .'\\"' . escape(quote,'"') . '\: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()"' endfor endfunction "}}} @@ -554,6 +549,7 @@ function! delimitMate#Tests() " {{{ let text = text . "" . getline(i) let i += 1 endwhile + echom "text: " . text if result == 0 exec "let b:test_results['" . substitute(a:name, "[^a-zA-Z0-9_]", "_", "g") . "'] = 'Passed: ' . text . ' == ' . join(a:output, '')" else @@ -590,7 +586,6 @@ function! delimitMate#Tests() " {{{ call Type("Test 1", "123", ["123|"], []) call RepeatLast("Test 1", ["123|123|"]) - " Auto-closing parens call Type("Autoclose parens", "(", ["(|)"], []) call RepeatLast("Autoclose_parens", ["(|)(|)"]) @@ -630,24 +625,100 @@ function! delimitMate#Tests() " {{{ " Close quote call Type("Close quote", "'\\a'", ["'|'"], []) + " Closing paren + call Type("Closing paren", "abcd)", ["abcd)|"], []) + " call Type("S Tab", "(\", ["()|"], []) call RepeatLast("S Tab", ["()|()|"]) " Space expansion - call Type("Space expansion", "(\)", ['( | )'], ['expand_space:1']) + call Type("Space expansion", "(\", ['( | )'], ['expand_space:1']) call RepeatLast("Space expansion", ['( | )( | )']) " Car return expansion call Type("CR expansion", "(\", ['(', '|', ')'], ['expand_cr:1']) call RepeatLast("CR expansion", ['(', '|', ')(', '|', ')']) - " Show results: + " Visual wrapping + call Type("Visual wrapping left paren", "1234\v,(", ['123(4)'], ['visual_leader:","']) + cal RepeatLast("Visual wrapping left paren", ['(1)23(4)']) + + " Visual line wrapping + call Type("Visual line wrapping left paren", "1234\V,(", ['(1234)'], ['visual_leader:","']) + cal RepeatLast("Visual line wrapping left paren", ['((1234))']) + + " Visual wrapping + call Type("Visual wrapping right paren", "1234\v,)", ['123(4)'], ['visual_leader:","']) + cal RepeatLast("Visual wrapping right paren", ['(1)23(4)']) + + " Visual line wrapping + call Type("Visual line wrapping right paren", "1234\V,)", ['(1234)'], ['visual_leader:","']) + cal RepeatLast("Visual line wrapping right paren", ['((1234))']) + + " Visual wrapping + call Type("Visual wrapping quote", "1234\v,\"", ['123"4"'], ['visual_leader:","']) + cal RepeatLast("Visual wrapping quote", ['"1"23"4"']) + + " Visual line wrapping + call Type("Visual line wrapping quote", "1234\V,\"", ['"1234"'], ['visual_leader:","']) + cal RepeatLast("Visual line wrapping quote", ['""1234""']) + + " Visual line wrapping empty line + call Type("Visual line wrapping paren empty line", "\V,(", ['()'], ['visual_leader:","']) + + " Visual line wrapping empty line + call Type("Visual line wrapping quote empty line", "\V,\"", ['""'], ['visual_leader:","']) + + " Smart quotes + call Type("Smart quote alphanumeric", "alpha\"numeric", ['alpha"numeric|'], []) + call RepeatLast("Smart quote alphanumeric", ['alpha"numeric|alpha"numeric|']) + + " Smart quotes + call Type("Smart quote escaped", "esc\\\"", ['esc\"|'], []) + call RepeatLast("Smart quote escaped", ['esc\"|esc\"|']) + + " Smart quotes + call Type("Smart quote apostrophe", "I'm", ["I'm|"], ['smart_quotes:0']) + call RepeatLast("Smart quote escaped", ["I'm|I'm|"]) + + " Backspace inside space expansion + call Type("Backspace inside space expansion", "(\\", ['(|)'], ['expand_space:1']) + call RepeatLast("Backspace inside space expansion", ['(|)(|)']) + + " Backspace inside CR expansion + call Type("Backspace inside CR expansion", "(\\", ['(|)'], ['expand_cr:1']) + call RepeatLast("Backspace inside CR expansion", ['(|)(|)']) + + " FileType event + let g:delimitMate_excluded_ft = "vim" + set ft=vim + call Type("FileType Autoclose parens", "(", ["(|"], []) + unlet g:delimitMate_excluded_ft + set ft= + + + " Show results: {{{ normal ggVG"_d call append(0, split(string(b:test_results)[1:-2], ', ')) normal "_ddgg nmap :q! - let @/ = "Failed:.*!=" + let @/ = ".\\+Failed:.*!=" + set nohlsearch + "syntax match failedLine "^.*Failed.*$" contains=ALL + "syn match passedLine ".*Passed.*" + syn match labelPassed "'\@<=.\+\(': 'Passed\)\@=" + syn match labelFailed "'\@<=.\+\(': 'Failed\)\@=" + syn match resultPassed "\('Passed: \)\@<=.\+\('$\)\@=" + syn match resultFailed "\('Failed: \)\@<=.\+\('$\)\@=" contains=resultInequal + syn match resultInequal "!=" + + hi def link labelPassed Comment + hi def link labelFailed Special + hi def link resultPassed Ignore + hi def link resultFailed Boolean + hi def link resultInequal Error + " }}} endfunction " }}} "}}} diff --git a/plugin/delimitMate.vim b/plugin/delimitMate.vim index 31e7c87..45408d2 100644 --- a/plugin/delimitMate.vim +++ b/plugin/delimitMate.vim @@ -148,7 +148,7 @@ endfunction "}}} Init() function! s:UnMap() " {{{ " No Autoclose Mappings: for char in b:delimitMate_right_delims + b:delimitMate_quotes_list - if maparg(char,"i") =~? 'SkipDelim' + if maparg(char,"i") =~? 'delimitMate' exec 'silent! iunmap ' . char "echomsg 'iunmap ' . char endif @@ -158,57 +158,71 @@ function! s:UnMap() " {{{ let i = 0 let l = len(b:delimitMate_matchpairs_list) while i < l - if maparg(b:delimitMate_left_delims[i],"i") =~? 'JumpIn' + if maparg(b:delimitMate_left_delims[i],"i") =~? 'delimitMate' exec 'silent! iunmap ' . b:delimitMate_left_delims[i] "echomsg 'iunmap ' . b:delimitMate_left_delims[i] endif let i += 1 endwhile for char in b:delimitMate_quotes_list - if maparg(char, "i") =~? 'QuoteDelim' + if maparg(char, "i") =~? 'delimitMate' exec 'silent! iunmap ' . char "echomsg 'iunmap ' . char endif endfor for char in b:delimitMate_right_delims - if maparg(char, "i") =~? 'JumpOut' + if maparg(char, "i") =~? 'delimitMate' exec 'silent! iunmap ' . char "echomsg 'iunmap ' . char endif endfor - 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_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 + for char in b:delimitMate_apostrophes_list + if maparg(char, "i") =~? 'delimitMate' + exec "silent! iunmap " . char endif endfor " Expansion Mappings: - if maparg('', "i") =~? 'WithinEmptyPair' + if maparg('', "i") =~? 'delimitMate' silent! iunmap "echomsg "silent! iunmap " endif - if maparg('', "i") =~? 'WithinEmptyPair' + if maparg('', "i") =~? 'delimitMate' silent! iunmap "echomsg "silent! iunmap " endif - if maparg('',"i") =~? 'DelimitMate_ExpandReturn' + if maparg('',"i") =~? 'delimitMate' silent! iunmap "echomsg "silent! iunmap " endif - if maparg('',"i") =~? 'DelimitMate_ExpandSpace' + if maparg('',"i") =~? 'delimitMate' silent! iunmap "echomsg "silent! iunmap " endif - if maparg('', "i") =~? 'ShouldJump' + if maparg('', "i") =~? 'delimitMate' silent! iunmap "echomsg "silent! iunmap " endif + if maparg('', "i") =~? 'delimitMate' + silent! iunmap + "echomsg "silent! iunmap " + endif + + " Visual Mappings: + if !exists("b:delimitMate_visual_leader") + let vleader = "" + else + let vleader = b:delimitMate_visual_leader + endif + for char in b:delimitMate_right_delims + b:delimitMate_left_delims + b:delimitMate_quotes_list + "echom "maparg(" . vleader . char .", \"v\")" + exec 'let result = maparg("' . escape(vleader . char, '"') . '", "v") =~? "delimitMate" ? 1 : 0' + if result == 1 + exec 'silent! vunmap ' . vleader . char + "echomsg 'vunmap ' . b:delimitMate_visual_leader . char + endif + endfor + endfunction " }}} s:ExtraMappings() function! s:TestMappingsDo() "{{{ @@ -243,9 +257,6 @@ 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_list") - return 1 - endif "echomsg "excluded" call s:UnMap() return 1