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