vim / .snippets / plaintex.snippetson commit [vim] set up ultisnips (f5d0eeb)
   1global !p
   2texMathZones = ['texMathZone'+x for x in ['A', 'AS', 'B', 'BS', 'C', 'CS', 'D', 'DS', 'V', 'W', 'X', 'Y', 'Z']]
   3# If you have http://www.drchip.org/astronaut/vim/vbafiles/amsmath.vba.gz,
   4# you want to add:
   5# texMathZones += ['texMathZone'+x for x in ['E', 'ES', 'F', 'FS', 'G', 'GS', 'H', 'HS', 'I', 'IS', 'J', 'JS', 'K', 'KS', 'L', 'LS']]
   6texIgnoreMathZones = ['texMathText']
   7
   8texMathZoneIds = vim.eval('map('+str(texMathZones)+", 'hlID(v:val)')")
   9texIgnoreMathZoneIds = vim.eval('map('+str(texIgnoreMathZones)+", 'hlID(v:val)')")
  10
  11def math():
  12    # DEBUGGING
  13    synstack = vim.eval("map(synstack(line('.'), col('.') - (col('.')>=2 ? 1 : 0)), {i,v -> synIDattr(v, 'name')})")
  14    print("synstack: " + str(synstack))
  15    syntaxgroup = vim.eval("get(reverse(map(synstack(line('.'), col('.') - (col('.')>=2 ? 1 : 0)), {i,v -> synIDattr(v, 'name')})), 0, '')")
  16    print("syntaxgroup (rev): "+ syntaxgroup)
  17    synstackids = vim.eval("synstack(line('.'), col('.') - (col('.')>=2 ? 1 : 0))")
  18    if not set(texIgnoreMathZoneIds).isdisjoint(synstackids):
  19        return False
  20    return not set(texMathZoneIds).isdisjoint(synstackids)
  21    # isdisjoint() can short-circuit as soon as a match is found
  22
  23endglobal
  24
  25
  26snippet \beg "begin{} / end{}" bA
  27\begin{$1}
  28  $0
  29\end{$1}
  30endsnippet
  31
  32snippet $ "Math" wA
  33$${1}$`!p
  34if t[2] and t[2][0] not in [',', '.', '?', '-', ' ']:
  35    snip.rv = ' '
  36else:
  37    snip.rv = ''
  38`$2
  39endsnippet
  40
  41snippet \[ "Math" wA
  42\[ $1 \] $0
  43endsnippet
  44
  45snippet '(.+)(pr)' "Superscript prime" Air
  46`!p snip.rv = match.group(1) + "^{\prime}"`
  47endsnippet
  48
  49#snippet '(\S+)/(\S+) ' "Fraction" Air
  50#`!p snip.rv = "\\frac{" + match.group(1) + "}{" + match.group(2) + "} "`
  51#endsnippet
  52
  53snippet // "Fraction" iA
  54\\frac{$1}{$2}$0
  55endsnippet
  56
  57snippet '((\d+)|(\d*)(\\)?([A-Za-z]+)((\^|_)(\{\d+\}|\d))*)/' "Fraction" wrA
  58\\frac{`!p snip.rv = match.group(1)`}{$1}$0
  59endsnippet
  60
  61priority 1000
  62snippet '^.*\)/' "() Fraction" wrA
  63`!p
  64stripped = match.string[:-1]
  65depth = 0
  66i = len(stripped) - 1
  67while True:
  68        if stripped[i] == ')': depth += 1
  69        if stripped[i] == '(': depth -= 1
  70        if depth == 0: break;
  71        i -= 1
  72snip.rv = stripped[0:i] + "\\frac{" + stripped[i+1:-1] + "}"
  73`{$1}$0
  74endsnippet
  75
  76priority 10
  77snippet "bar" "bar" riA
  78\overline{$1}$0
  79endsnippet
  80
  81priority 100
  82snippet "([a-zA-Z])bar" "bar" riA
  83\overline{`!p snip.rv=match.group(1)`}
  84endsnippet
  85
  86priority 10
  87snippet "hat" "hat" riA
  88\hat{$1}$0
  89endsnippet
  90
  91priority 100
  92snippet "([a-zA-Z])hat" "hat" riA
  93\hat{`!p snip.rv=match.group(1)`}
  94endsnippet
  95
  96snippet "(\\?\w+)(,\.|\.,)" "Vector postfix" riA
  97\vec{`!p snip.rv=match.group(1)`}
  98endsnippet 
  99
 100snippet "fn" "Function" r
 101f : $1 \to \R, \> y = $0
 102endsnippet