function! Sc(char) let closing = {'(': ')', '[': ']', '{': '}', '<': '>', '"': '"', "'": "'"} if has_key(closing, a:char) let line = getline('.') let col = col('.') - 1 let before = col > 0 ? line[col-1] : '' let after = col < len(line) ? line[col] : '' if before =~ '\w' && after =~ '\w' return a:char endif if (a:char == '"' || a:char == "'") && before == a:char return a:char endif if after == closing[a:char] return "\" endif return a:char . closing[a:char] . "\" endif return a:char endfunction inoremap ( =Sc('(') inoremap [ =Sc('[') inoremap { =Sc('{') inoremap < =Sc('<') inoremap " =Sc('"') inoremap ' =Sc("'")