summaryrefslogtreecommitdiff
path: root/config/nvim-2/nvim/vscript/scp.vim
blob: 6824c18a4958fca075b5263ae650b56dc8c96da4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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 "\<Right>"
        endif
        return a:char . closing[a:char] . "\<Left>"
    endif
    
    return a:char
endfunction

inoremap ( <C-R>=Sc('(')<CR>
inoremap [ <C-R>=Sc('[')<CR>
inoremap { <C-R>=Sc('{')<CR>
inoremap < <C-R>=Sc('<')<CR>
inoremap " <C-R>=Sc('"')<CR>
inoremap ' <C-R>=Sc("'")<CR>