diff --git a/autoload/delimitMate.vim b/autoload/delimitMate.vim index 035e558..dd3ac5b 100644 --- a/autoload/delimitMate.vim +++ b/autoload/delimitMate.vim @@ -484,10 +484,21 @@ function! delimitMate#ExpandReturn() "{{{ \ && (delimitMate#WithinEmptyMatchpair() \ || expand_right_matchpair \ || expand_inside_quotes) + let val = "\a\" + if &smartindent && !&cindent && !&indentexpr + \ && delimitMate#GetCharFromCursor(0) == '}' + " indentation is controlled by 'smartindent', and the first character on + " the new line is '}'. If this were typed manually it would reindent to + " match the current line. Let's reproduce that behavior. + let shifts = indent('.') / &sw + let spaces = indent('.') - (shifts * &sw) + let val .= "^\".repeat("\", shifts).repeat(' ', spaces) + endif " Expand: " XXX zv prevents breaking expansion with syntax folding enabled by " InsertLeave. - return "\a\\zvO" + let val .= "\zvO" + return val else return "\" endif