From f5d0eebde6ae0b5a29e7c362854d72fae7585789 Mon Sep 17 00:00:00 2001 From: Andrew Lorimer Date: Sat, 13 Jul 2019 17:08:40 +1000 Subject: [PATCH] [vim] set up ultisnips --- vim/.snippets/all.snippets | 40 +++++++++++++ vim/.snippets/plaintex.snippets | 102 ++++++++++++++++++++++++++++++++ vim/.vimrc | 17 +++++- 3 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 vim/.snippets/all.snippets create mode 100644 vim/.snippets/plaintex.snippets diff --git a/vim/.snippets/all.snippets b/vim/.snippets/all.snippets new file mode 100644 index 0000000..bf78a02 --- /dev/null +++ b/vim/.snippets/all.snippets @@ -0,0 +1,40 @@ +snippet ( "Parentheses" A +($1)$0 +endsnippet + +snippet { "Braces" A +{$1}$0 +endsnippet + +snippet [ "Square brackets" A +[$1]$0 +endsnippet + +snippet < "Chevrons" +<$1>$0 +endsnippet + +snippet box "Box" +`!p snip.rv = '┌' + '─' * (len(t[1]) + 2) + '┐'` +│ $1 │ +`!p snip.rv = '└' + '─' * (len(t[1]) + 2) + '┘'` +$0 +endsnippet + +snippet today "Date" +`date '+%d %b %Y'` +endsnippet + +priority 1000 +snippet wolf "Mathematica" w +wolf $1 wolf$0 +endsnippet + +priority 10000 +snippet 'wolf(.*)wolf' "evaluate mathematica" wr +`!p +import subprocess +code = 'ToString[' + match.group(1) + ', TeXForm]' +snip.rv = subprocess.check_output(['wolframscript', '-code', code]).rstrip() +` +endsnippet diff --git a/vim/.snippets/plaintex.snippets b/vim/.snippets/plaintex.snippets new file mode 100644 index 0000000..2f955c0 --- /dev/null +++ b/vim/.snippets/plaintex.snippets @@ -0,0 +1,102 @@ +global !p +texMathZones = ['texMathZone'+x for x in ['A', 'AS', 'B', 'BS', 'C', 'CS', 'D', 'DS', 'V', 'W', 'X', 'Y', 'Z']] +# If you have http://www.drchip.org/astronaut/vim/vbafiles/amsmath.vba.gz, +# you want to add: +# texMathZones += ['texMathZone'+x for x in ['E', 'ES', 'F', 'FS', 'G', 'GS', 'H', 'HS', 'I', 'IS', 'J', 'JS', 'K', 'KS', 'L', 'LS']] +texIgnoreMathZones = ['texMathText'] + +texMathZoneIds = vim.eval('map('+str(texMathZones)+", 'hlID(v:val)')") +texIgnoreMathZoneIds = vim.eval('map('+str(texIgnoreMathZones)+", 'hlID(v:val)')") + +def math(): + # DEBUGGING + synstack = vim.eval("map(synstack(line('.'), col('.') - (col('.')>=2 ? 1 : 0)), {i,v -> synIDattr(v, 'name')})") + print("synstack: " + str(synstack)) + syntaxgroup = vim.eval("get(reverse(map(synstack(line('.'), col('.') - (col('.')>=2 ? 1 : 0)), {i,v -> synIDattr(v, 'name')})), 0, '')") + print("syntaxgroup (rev): "+ syntaxgroup) + synstackids = vim.eval("synstack(line('.'), col('.') - (col('.')>=2 ? 1 : 0))") + if not set(texIgnoreMathZoneIds).isdisjoint(synstackids): + return False + return not set(texMathZoneIds).isdisjoint(synstackids) + # isdisjoint() can short-circuit as soon as a match is found + +endglobal + + +snippet \beg "begin{} / end{}" bA +\begin{$1} + $0 +\end{$1} +endsnippet + +snippet $ "Math" wA +$${1}$`!p +if t[2] and t[2][0] not in [',', '.', '?', '-', ' ']: + snip.rv = ' ' +else: + snip.rv = '' +`$2 +endsnippet + +snippet \[ "Math" wA +\[ $1 \] $0 +endsnippet + +snippet '(.+)(pr)' "Superscript prime" Air +`!p snip.rv = match.group(1) + "^{\prime}"` +endsnippet + +#snippet '(\S+)/(\S+) ' "Fraction" Air +#`!p snip.rv = "\\frac{" + match.group(1) + "}{" + match.group(2) + "} "` +#endsnippet + +snippet // "Fraction" iA +\\frac{$1}{$2}$0 +endsnippet + +snippet '((\d+)|(\d*)(\\)?([A-Za-z]+)((\^|_)(\{\d+\}|\d))*)/' "Fraction" wrA +\\frac{`!p snip.rv = match.group(1)`}{$1}$0 +endsnippet + +priority 1000 +snippet '^.*\)/' "() Fraction" wrA +`!p +stripped = match.string[:-1] +depth = 0 +i = len(stripped) - 1 +while True: + if stripped[i] == ')': depth += 1 + if stripped[i] == '(': depth -= 1 + if depth == 0: break; + i -= 1 +snip.rv = stripped[0:i] + "\\frac{" + stripped[i+1:-1] + "}" +`{$1}$0 +endsnippet + +priority 10 +snippet "bar" "bar" riA +\overline{$1}$0 +endsnippet + +priority 100 +snippet "([a-zA-Z])bar" "bar" riA +\overline{`!p snip.rv=match.group(1)`} +endsnippet + +priority 10 +snippet "hat" "hat" riA +\hat{$1}$0 +endsnippet + +priority 100 +snippet "([a-zA-Z])hat" "hat" riA +\hat{`!p snip.rv=match.group(1)`} +endsnippet + +snippet "(\\?\w+)(,\.|\.,)" "Vector postfix" riA +\vec{`!p snip.rv=match.group(1)`} +endsnippet + +snippet "fn" "Function" r +f : $1 \to \R, \> y = $0 +endsnippet diff --git a/vim/.vimrc b/vim/.vimrc index 7658d41..3d452ab 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -8,7 +8,6 @@ set expandtab set shiftwidth=2 set softtabstop=2 - " setup Vundle: set nocompatible " be iMproved, required filetype off " required @@ -21,11 +20,26 @@ Plugin 'VundleVim/Vundle.vim' " let Vundle manage Vundle, required Plugin 'vim-pandoc/vim-pandoc-syntax' Plugin 'godlygeek/tabular' +Plugin 'SirVer/ultisnips' +Plugin 'honza/vim-snippets' " All of your Plugins must be added before the following line call vundle#end() " required filetype plugin indent on " required +" UltiSnips configuration +let g:UltiSnipsSnippetDirectories = ['/home/andrew/.snippets'] +let g:UltiSnipsExpandTrigger = '' +let g:UltiSnipsJumpForwardTrigger = '' +let g:UltiSnipsJumpBackwardTrigger = '' +set rtp-=$HOME/.vim +set rtp^=~/.vim/bundle/ultisnips +set rtp+=~/.vim/bundle/ultisnips/after +set rtp^=$HOME/.vim +set vi= +filetype plugin on + + " markdown group for vim-pandoc-syntax: augroup pandoc_syntax au! BufNewFile,BufFilePre,BufRead *.md set filetype=markdown.pandoc @@ -75,3 +89,4 @@ if exists("+showtabline") endfunction set tabline=%!MyTabLine() endif + -- 2.49.0