vimrc

My Vim configuration
git clone git://pcardenasb.com/vimrc
Log | Files | Refs | Submodules

snippets.vim (5856B)


      1 vim9script
      2 
      3 autocmd InsertCharPre *.tex call Snippet_InsertCharPre()
      4 autocmd TextChangedI *.tex call Snippet_TextChangedI()
      5 
      6 var command: string = ''
      7 
      8 def Snippet_InsertCharPre()
      9     if v:char == '_' && vimtex#syntax#in_mathzone()
     10        var pos = getcharpos('.')
     11        var lnum = pos[1]
     12        var coln = pos[2]
     13        var line = getline('.')
     14        if line[coln - 2] == '_'
     15            command = '__'
     16        endif
     17     elseif v:char == '^' && vimtex#syntax#in_mathzone()
     18        var pos = getcharpos('.')
     19        var lnum = pos[1]
     20        var coln = pos[2]
     21        var line = getline('.')
     22        if line[coln - 2] == '^'
     23            command = '^^'
     24        endif
     25     elseif v:char == '~' && vimtex#syntax#in_mathzone()
     26        var pos = getcharpos('.')
     27        var lnum = pos[1]
     28        var coln = pos[2]
     29        var line = getline('.')
     30        if line[coln - 4 : coln - 2] == 'iid'
     31            command = 'iid~'
     32        endif
     33     elseif v:char == 't' && vimtex#syntax#in_mathzone()
     34        var pos = getcharpos('.')
     35        var lnum = pos[1]
     36        var coln = pos[2]
     37        var line = getline('.')
     38        if line[coln - 2] == 't'
     39            command = 'tt'
     40        endif
     41     elseif v:char == 'k' && !vimtex#syntax#in_mathzone()
     42        var pos = getcharpos('.')
     43        var lnum = pos[1]
     44        var coln = pos[2]
     45        var line = getline('.')
     46        if line[ : coln - 2] =~# '\<m$'
     47            command = '\(...\)'
     48        endif
     49     elseif v:char == 'm' && !vimtex#syntax#in_mathzone()
     50        var pos = getcharpos('.')
     51        var lnum = pos[1]
     52        var coln = pos[2]
     53        var line = getline('.')
     54        if line[ : coln - 2] =~# '^\s*d$'
     55            command = '\[...\]'
     56        endif
     57     elseif v:char == '=' && vimtex#syntax#in_mathzone()
     58        var pos = getcharpos('.')
     59        var lnum = pos[1]
     60        var coln = pos[2]
     61        var line = getline('.')
     62        if line[coln - 2] == '<'
     63            command = '<='
     64        endif
     65     elseif v:char == '=' && vimtex#syntax#in_mathzone()
     66        var pos = getcharpos('.')
     67        var lnum = pos[1]
     68        var coln = pos[2]
     69        var line = getline('.')
     70        if line[coln - 2] == '>'
     71            command = '>='
     72        endif
     73     elseif v:char == 'v' && vimtex#syntax#in_mathzone()
     74        var pos = getcharpos('.')
     75        var lnum = pos[1]
     76        var coln = pos[2]
     77        var line = getline('.')
     78        if line[coln - 2] == 'v'
     79            command = 'vv'
     80        endif
     81     elseif v:char == 'V' && vimtex#syntax#in_mathzone()
     82        var pos = getcharpos('.')
     83        var lnum = pos[1]
     84        var coln = pos[2]
     85        var line = getline('.')
     86        if line[coln - 2] == 'V'
     87            command = 'VV'
     88        endif
     89     endif
     90 
     91     if command != ""
     92          feedkeys("\<C-g>u")
     93     endif
     94 enddef
     95 
     96 def Snippet_TextChangedI()
     97     if command != ''
     98         var pos = getcharpos('.')
     99         var lnum = pos[1]
    100         var coln = pos[2]
    101         var line = getline('.')
    102 
    103         if command == '^^'
    104             setline(
    105                 ".",
    106                 strcharpart(line, 0, coln - 2) ..
    107                 '{}<++>' ..
    108                 line[coln - 1 : ]
    109             )
    110             setcharpos('.', [0, lnum, coln, 0])
    111         elseif command == '__'
    112             setline(
    113                 ".",
    114                 strcharpart(line, 0, coln - 2) ..
    115                 '{}<++>' ..
    116                 line[coln - 1 : ]
    117             )
    118             setcharpos('.', [0, lnum, coln, 0])
    119         elseif command == 'iid~'
    120             setline(
    121                 ".",
    122                 strcharpart(line, 0, coln - 5) ..
    123                 '\overset{\text{iid}}{\sim}' ..
    124                 line[coln - 1 : ]
    125             )
    126             setcharpos('.', [0, lnum, coln + 26 - 4, 0])
    127         elseif command == '<='
    128             setline(
    129                 ".",
    130                 strcharpart(line, 0, coln - 3) ..
    131                 '\le' ..
    132                 line[coln - 1 : ]
    133             )
    134             setcharpos('.', [0, lnum, coln + 3 - 2, 0])
    135         elseif command == '>='
    136             setline(
    137                 ".",
    138                 strcharpart(line, 0, coln - 3) ..
    139                 '\ge' ..
    140                 line[coln - 1 : ]
    141             )
    142             setcharpos('.', [0, lnum, coln + 3 - 2, 0])
    143         elseif command == '\(...\)'
    144             setline(
    145                 ".",
    146                 strcharpart(line, 0, coln - 3) ..
    147                 '\(\)<++>' ..
    148                 line[coln - 1 : ]
    149             )
    150             setcharpos('.', [0, lnum, coln + 2 - 2, 0])
    151         elseif command == '\[...\]'
    152             setline(
    153                 ".",
    154                 strcharpart(line, 0, coln - 3) ..
    155                 '\['
    156             )
    157             append(lnum, ["\t", '.\]', '<++>' .. line[coln - 1 : ]])
    158             setcharpos('.', [0, lnum + 1, 2, 0])
    159         elseif command == 'tt'
    160             setline(
    161                 ".",
    162                 strcharpart(line, 0, coln - 3) ..
    163                 '\text{}<++>' ..
    164                 line[coln - 1 : ]
    165             )
    166             setcharpos('.', [0, lnum, coln + 6 - 2, 0])
    167         elseif command == 'vv'
    168             setline(
    169                 ".",
    170                 strcharpart(line, 0, coln - 3) ..
    171                 '\lvert  \rvert<++>' ..
    172                 line[coln - 1 : ]
    173             )
    174             setcharpos('.', [0, lnum, coln + 7 - 2, 0])
    175         elseif command == 'VV'
    176             setline(
    177                 ".",
    178                 strcharpart(line, 0, coln - 3) ..
    179                 '\lVert  \rVert<++>' ..
    180                 line[coln - 1 : ]
    181             )
    182             setcharpos('.', [0, lnum, coln + 7 - 2, 0])
    183         endif
    184 
    185         command = ''
    186     endif
    187 enddef
    188 
    189 g:surround_insert_tail = "<++>"
    190 
    191 inoremap <silent> <C-J> <Esc>:let @/='\V<++>'<CR>"_cgn
    192 nnoremap <silent> <C-J> <Cmd>let @/='\V<++>'<CR>"_cgn
    193 
    194 const dir_template = expand('<sfile>:p:h:h') .. '/templates'
    195 autocmd BufNewFile document.tex execute ':silent :0read ' .. dir_template .. '/document.tex'
    196 
    197 # vim: et sts=4 sw=4