From 54acd56b4865ba839cdf615a8b92c82e3568eb49 Mon Sep 17 00:00:00 2001 From: Israel Chauca Fuentes Date: Wed, 15 Feb 2012 14:25:36 -0500 Subject: [PATCH] Fix space expansion. Closes #68. --- autoload/delimitMate.vim | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/autoload/delimitMate.vim b/autoload/delimitMate.vim index d2df601..edcb253 100644 --- a/autoload/delimitMate.vim +++ b/autoload/delimitMate.vim @@ -238,6 +238,19 @@ function! delimitMate#RmBuffer(num) " {{{ return "" endfunction " }}} +function! delimitMate#IsSmartQuote(char) "{{{ + if !b:_l_delimitMate_smart_quotes + return 0 + endif + let char_at = delimitMate#GetCharFromCursor(0) + let char_before = delimitMate#GetCharFromCursor(-1) + let word_before = char_before =~ '\w' + let word_at = char_at =~ '\w' + let escaped = delimitMate#CursorIdx() >= 1 && delimitMate#GetCharFromCursor(-1) == '\' + let result = word_before || escaped || word_at + return result +endfunction "delimitMate#SmartQuote }}} + " }}} " Doers {{{ @@ -304,21 +317,20 @@ function! delimitMate#QuoteDelim(char) "{{{ if delimitMate#IsForbidden(a:char) return a:char endif - if delimitMate#GetCharFromCursor(-1) == "\\" - " Seems like a escaped character, insert one quotation mark. + let char_at = delimitMate#GetCharFromCursor(0) + let char_before = delimitMate#GetCharFromCursor(-1) + if delimitMate#IsSmartQuote(a:char) + " Seems like a smart quote, insert a single char. return a:char "elseif line[col + 1] == a:char && - elseif delimitMate#GetCharFromCursor(0) == a:char && + elseif char_at == a:char && \ index(b:_l_delimitMate_nesting_quotes, a:char) < 0 " Get out of the string. return a:char . delimitMate#Del() - elseif (delimitMate#GetCharFromCursor(-1) =~ '\w' && a:char == "'") || - \ (b:_l_delimitMate_smart_quotes && - \ (delimitMate#GetCharFromCursor(-1) =~ '\w' || - \ delimitMate#GetCharFromCursor(0) =~ '\w')) - " Seems like an apostrophe or a smart quote case, insert a single quote. + elseif (char_before =~ '\w' && a:char == "'") + " Seems like an apostrophe, insert a single quote. return a:char - elseif (delimitMate#GetCharFromCursor(-1) == a:char && delimitMate#GetCharFromCursor(0) != a:char) && b:_l_delimitMate_smart_quotes + elseif (char_before == a:char && char_at != a:char) && b:_l_delimitMate_smart_quotes " Seems like we have an unbalanced quote, insert one quotation mark and jump to the middle. call delimitMate#AddToBuffer(a:char) return delimitMate#WriteAfter(a:char) @@ -409,7 +421,8 @@ function! delimitMate#ExpandSpace() "{{{ if delimitMate#IsForbidden("\") return "\" endif - if delimitMate#WithinEmptyPair() + let escaped = delimitMate#CursorIdx() >= 2 && delimitMate#GetCharFromCursor(-2) == '\' + if delimitMate#WithinEmptyPair() && !escaped " Expand: call delimitMate#AddToBuffer('s') return delimitMate#WriteAfter(' ') . "\"