aboutsummaryrefslogtreecommitdiff
path: root/dot_vim/ftplugin
diff options
context:
space:
mode:
Diffstat (limited to 'dot_vim/ftplugin')
-rw-r--r--dot_vim/ftplugin/beluga.vim1
-rw-r--r--dot_vim/ftplugin/bib_latexSuite.vim16
-rw-r--r--dot_vim/ftplugin/c.vim294
-rw-r--r--dot_vim/ftplugin/cpp.vim164
-rw-r--r--dot_vim/ftplugin/gpg.vim33
-rw-r--r--dot_vim/ftplugin/haskell.vim13
-rw-r--r--dot_vim/ftplugin/haskell_doc.vim817
-rw-r--r--dot_vim/ftplugin/haskell_hpaste.vim79
-rw-r--r--dot_vim/ftplugin/latex-suite/bibtex.vim266
-rw-r--r--dot_vim/ftplugin/latex-suite/bibtools.py221
-rw-r--r--dot_vim/ftplugin/latex-suite/bibtools.pycbin0 -> 7004 bytes
-rw-r--r--dot_vim/ftplugin/latex-suite/brackets.vim145
-rw-r--r--dot_vim/ftplugin/latex-suite/compiler.vim820
-rw-r--r--dot_vim/ftplugin/latex-suite/custommacros.vim257
-rw-r--r--dot_vim/ftplugin/latex-suite/diacritics.vim124
-rw-r--r--dot_vim/ftplugin/latex-suite/dictionaries/SIunits289
-rw-r--r--dot_vim/ftplugin/latex-suite/dictionaries/dictionary677
-rw-r--r--dot_vim/ftplugin/latex-suite/elementmacros.vim338
-rw-r--r--dot_vim/ftplugin/latex-suite/envmacros.vim1167
-rw-r--r--dot_vim/ftplugin/latex-suite/folding.vim393
-rw-r--r--dot_vim/ftplugin/latex-suite/macros/example11
-rw-r--r--dot_vim/ftplugin/latex-suite/main.vim1024
-rw-r--r--dot_vim/ftplugin/latex-suite/mathmacros-utf.vim729
-rw-r--r--dot_vim/ftplugin/latex-suite/mathmacros.vim730
-rw-r--r--dot_vim/ftplugin/latex-suite/multicompile.vim17
-rw-r--r--dot_vim/ftplugin/latex-suite/outline.py186
-rw-r--r--dot_vim/ftplugin/latex-suite/outline.pycbin0 -> 4324 bytes
-rw-r--r--dot_vim/ftplugin/latex-suite/packages.vim669
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/SIunits315
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/accents28
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/acromake10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/afterpage10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/alltt12
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/amsmath106
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/amsthm21
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/amsxtra12
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/arabic10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/array17
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/babel98
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/bar27
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/bm10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/bophook12
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/boxedminipage10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/caption243
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/cases12
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/ccaption20
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/changebar35
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/chapterbib24
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/cite32
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/color43
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/comma12
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/deleq36
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/drftcite29
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/dropping12
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/enumerate10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/eqlist19
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/eqparbox12
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/everyshi10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/exmpl55
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/flafter10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/float16
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/floatflt12
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/fn2end10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/footmisc21
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/geometry93
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/german12
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/graphicx69
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/graphpap10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/harpoon18
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/hhline21
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/histogram13
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/hyperref167
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/ifthen21
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/inputenc29
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/letterspace10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/lineno60
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/longtable35
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/lscape10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/manyfoot15
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/moreverb28
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/multibox10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/multicol21
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/newalg26
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/ngerman10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/numprint18
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/oldstyle12
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/outliner19
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/overcite34
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/parallel15
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/plain10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/plates16
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/polski165
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/psgo27
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/schedule20
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/textfit12
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/times10
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/tipa364
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/ulem21
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/url24
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/verbatim18
-rw-r--r--dot_vim/ftplugin/latex-suite/packages/version12
-rw-r--r--dot_vim/ftplugin/latex-suite/projecttemplate.vim11
-rw-r--r--dot_vim/ftplugin/latex-suite/pytools.py52
-rw-r--r--dot_vim/ftplugin/latex-suite/smartspace.vim102
-rw-r--r--dot_vim/ftplugin/latex-suite/templates.vim149
-rw-r--r--dot_vim/ftplugin/latex-suite/templates/IEEEtran.tex142
-rw-r--r--dot_vim/ftplugin/latex-suite/templates/article.tex9
-rw-r--r--dot_vim/ftplugin/latex-suite/templates/report.tex9
-rw-r--r--dot_vim/ftplugin/latex-suite/templates/report_two_column.tex9
-rw-r--r--dot_vim/ftplugin/latex-suite/texmenuconf.vim131
-rw-r--r--dot_vim/ftplugin/latex-suite/texproject.vim54
-rw-r--r--dot_vim/ftplugin/latex-suite/texrc738
-rw-r--r--dot_vim/ftplugin/latex-suite/texviewer.vim1052
-rw-r--r--dot_vim/ftplugin/latex-suite/version.vim30
-rw-r--r--dot_vim/ftplugin/latex-suite/wizardfuncs.vim377
-rw-r--r--dot_vim/ftplugin/po.vim407
-rw-r--r--dot_vim/ftplugin/pythoncomplete.vim625
-rw-r--r--dot_vim/ftplugin/tex.vim10
-rw-r--r--dot_vim/ftplugin/tex_latexSuite.vim13
119 files changed, 16046 insertions, 0 deletions
diff --git a/dot_vim/ftplugin/beluga.vim b/dot_vim/ftplugin/beluga.vim
new file mode 100644
index 0000000..b4c3e84
--- /dev/null
+++ b/dot_vim/ftplugin/beluga.vim
@@ -0,0 +1 @@
+map <LocalLeader>s :syn sync fromstart<CR>:se fdm=manual<CR>:se fdm=indent<CR>
diff --git a/dot_vim/ftplugin/bib_latexSuite.vim b/dot_vim/ftplugin/bib_latexSuite.vim
new file mode 100644
index 0000000..6b803af
--- /dev/null
+++ b/dot_vim/ftplugin/bib_latexSuite.vim
@@ -0,0 +1,16 @@
+" File: bib_latexSuite.vim
+" Author: Srinath Avadhanula
+" License: Vim Charityware License
+" Description:
+" This file sources the bibtex.vim file distributed as part of latex-suite.
+" That file sets up 3 maps BBB, BAS, and BBA which are easy wasy to type in
+" bibliographic entries.
+"
+" CVS: $Id: bib_latexSuite.vim 997 2006-03-20 09:45:45Z srinathava $
+
+" source main.vim because we need a few functions from it.
+runtime ftplugin/latex-suite/main.vim
+" Disable smart-quotes because we need to enter real quotes in bib files.
+runtime ftplugin/latex-suite/bibtex.vim
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4:nowrap
diff --git a/dot_vim/ftplugin/c.vim b/dot_vim/ftplugin/c.vim
new file mode 100644
index 0000000..ff5a637
--- /dev/null
+++ b/dot_vim/ftplugin/c.vim
@@ -0,0 +1,294 @@
+" Vim filetype plugin file
+"
+" Language : C / C++
+" Plugin : c.vim (version 5.0)
+" Maintainer : Fritz Mehner <mehner@fh-swf.de>
+" Revision : $Id: c.vim,v 1.18 2007/11/20 18:12:02 mehner Exp $
+"
+" This will enable keyword completion for C and C++
+" using Vim's dictionary feature |i_CTRL-X_CTRL-K|.
+" -----------------------------------------------------------------
+"
+" Only do this when not done yet for this buffer
+"
+if exists("b:did_C_ftplugin")
+ finish
+endif
+let b:did_C_ftplugin = 1
+"
+" ---------- C/C++ dictionary -----------------------------------
+"
+if exists("g:C_Dictionary_File")
+ silent! exec 'setlocal dictionary+='.g:C_Dictionary_File
+endif
+"
+" ---------- F-key mappings ------------------------------------
+"
+" Alt-F9 write buffer and compile
+" F9 compile and link
+" Ctrl-F9 run executable
+" Shift-F9 command line arguments
+"
+ map <buffer> <silent> <A-F9> <C-C>:call C_Compile()<CR>:redraw<CR>:call C_HlMessage()<CR>
+imap <buffer> <silent> <A-F9> <C-C><C-C>:call C_Compile()<CR>:redraw<CR>:call C_HlMessage()<CR>
+"
+ map <buffer> <silent> <F9> <C-C>:call C_Link()<CR>:redraw<CR>:call C_HlMessage()<CR>
+imap <buffer> <silent> <F9> <C-C><C-C>:call C_Link()<CR>:redraw<CR>:call C_HlMessage()<CR>
+"
+" <C-C> seems to be essential here:
+ map <buffer> <silent> <C-F9> <C-C>:call C_Run()<CR>
+imap <buffer> <silent> <C-F9> <C-C><C-C>:call C_Run()<CR>
+"
+ map <buffer> <silent> <S-F9> <C-C>:call C_Arguments()<CR>
+imap <buffer> <silent> <S-F9> <C-C><C-C>:call C_Arguments()<CR>
+"
+" alternate file plugin
+"
+"if exists("loaded_alternateFile")
+" map <buffer> <silent> <S-F2> <C-C>:A<CR>
+"imap <buffer> <silent> <S-F2> <C-C><C-C>:A<CR>
+"endif
+"
+"
+" ---------- KEY MAPPINGS : MENU ENTRIES -------------------------------------
+"
+" ---------- comments menu ------------------------------------------------
+"
+
+ noremap <buffer> <silent> <Leader>cl <Esc>:call C_LineEndComment()<CR>
+inoremap <buffer> <silent> <Leader>cl <Esc>:call C_LineEndComment()<CR>a
+vnoremap <buffer> <silent> <Leader>cl <Esc>:call C_MultiLineEndComments()<CR>
+ noremap <buffer> <silent> <Leader>cj <Esc>:call C_AdjustLineEndComm("a")<CR>
+vnoremap <buffer> <silent> <Leader>cj <Esc>:call C_AdjustLineEndComm("v")<CR>
+inoremap <buffer> <silent> <Leader>cj <Esc>:call C_AdjustLineEndComm("a")<CR>a
+ noremap <buffer> <silent> <Leader>cs <Esc>:call C_GetLineEndCommCol()<CR>
+ noremap <buffer> <silent> <Leader>c* <Esc>:call C_CodeComment("a","yes")<CR><Esc>:nohlsearch<CR>j
+vnoremap <buffer> <silent> <Leader>c* <Esc>:call C_CodeComment("v","yes")<CR><Esc>:nohlsearch<CR>j
+ noremap <buffer> <silent> <Leader>c/ <Esc>:call C_CodeComment("a","no")<CR><Esc>:nohlsearch<CR>j
+vnoremap <buffer> <silent> <Leader>c/ <Esc>:call C_CodeComment("v","no")<CR><Esc>:nohlsearch<CR>j
+ noremap <buffer> <silent> <Leader>co <Esc>:call C_CommentCode("a")<CR><Esc>:nohlsearch<CR>
+vnoremap <buffer> <silent> <Leader>co <Esc>:call C_CommentCode("v")<CR><Esc>:nohlsearch<CR>
+
+ noremap <buffer> <silent> <Leader>cfr <Esc>:call C_InsertTemplate("comment.frame")<CR>
+ noremap <buffer> <silent> <Leader>cfu <Esc>:call C_InsertTemplate("comment.function")<CR>
+ noremap <buffer> <silent> <Leader>cme <Esc>:call C_InsertTemplate("comment.method")<CR>
+ noremap <buffer> <silent> <Leader>ccl <Esc>:call C_InsertTemplate("comment.class")<CR>
+
+inoremap <buffer> <silent> <Leader>cfr <Esc>:call C_InsertTemplate("comment.frame")<CR>
+inoremap <buffer> <silent> <Leader>cfu <Esc>:call C_InsertTemplate("comment.function")<CR>
+inoremap <buffer> <silent> <Leader>cme <Esc>:call C_InsertTemplate("comment.method")<CR>
+inoremap <buffer> <silent> <Leader>ccl <Esc>:call C_InsertTemplate("comment.class")<CR>
+
+ noremap <buffer> <silent> <Leader>cd a<C-R>=C_InsertDateAndTime('d')<CR>
+inoremap <buffer> <silent> <Leader>cd <C-R>=C_InsertDateAndTime('d')<CR>
+ noremap <buffer> <silent> <Leader>ct a<C-R>=C_InsertDateAndTime('dt')<CR>
+inoremap <buffer> <silent> <Leader>ct <C-R>=C_InsertDateAndTime('dt')<CR>
+"
+" ---------- statements menu ------------------------------------------------
+"
+ noremap <buffer> <silent> <Leader>sd <Esc>:call C_InsertTemplate("statements.do-while")<CR>
+vnoremap <buffer> <silent> <Leader>sd <Esc>:call C_InsertTemplate("statements.do-while", "v")<CR>
+inoremap <buffer> <silent> <Leader>sd <Esc>:call C_InsertTemplate("statements.do-while")<CR>
+
+ noremap <buffer> <silent> <Leader>sf <Esc>:call C_InsertTemplate("statements.for")<CR>
+inoremap <buffer> <silent> <Leader>sf <Esc>:call C_InsertTemplate("statements.for")<CR>
+
+ noremap <buffer> <silent> <Leader>sfo <Esc>:call C_InsertTemplate("statements.for-block")<CR>
+vnoremap <buffer> <silent> <Leader>sfo <Esc>:call C_InsertTemplate("statements.for-block", "v")<CR>
+inoremap <buffer> <silent> <Leader>sfo <Esc>:call C_InsertTemplate("statements.for-block")<CR>
+
+ noremap <buffer> <silent> <Leader>si <Esc>:call C_InsertTemplate("statements.if")<CR>
+inoremap <buffer> <silent> <Leader>si <Esc>:call C_InsertTemplate("statements.if")<CR>
+
+ noremap <buffer> <silent> <Leader>sif <Esc>:call C_InsertTemplate("statements.if-block")<CR>
+vnoremap <buffer> <silent> <Leader>sif <Esc>:call C_InsertTemplate("statements.if-block", "v")<CR>
+inoremap <buffer> <silent> <Leader>sif <Esc>:call C_InsertTemplate("statements.if-block")<CR>
+
+ noremap <buffer> <silent> <Leader>sie <Esc>:call C_InsertTemplate("statements.if-else")<CR>
+vnoremap <buffer> <silent> <Leader>sie <Esc>:call C_InsertTemplate("statements.if-else", "v")<CR>
+inoremap <buffer> <silent> <Leader>sie <Esc>:call C_InsertTemplate("statements.if-else")<CR>
+
+ noremap <buffer> <silent> <Leader>sife <Esc>:call C_InsertTemplate("statements.if-block-else")<CR>
+vnoremap <buffer> <silent> <Leader>sife <Esc>:call C_InsertTemplate("statements.if-block-else", "v")<CR>
+inoremap <buffer> <silent> <Leader>sife <Esc>:call C_InsertTemplate("statements.if-block-else")<CR>
+
+ noremap <buffer> <silent> <Leader>sw <Esc>:call C_InsertTemplate("statements.while")<CR>
+inoremap <buffer> <silent> <Leader>sw <Esc>:call C_InsertTemplate("statements.while")<CR>
+
+ noremap <buffer> <silent> <Leader>swh <Esc>:call C_InsertTemplate("statements.while-block")<CR>
+vnoremap <buffer> <silent> <Leader>swh <Esc>:call C_InsertTemplate("statements.while-block", "v")<CR>
+inoremap <buffer> <silent> <Leader>swh <Esc>:call C_InsertTemplate("statements.while-block")<CR>
+
+ noremap <buffer> <silent> <Leader>ss <Esc>:call C_InsertTemplate("statements.switch")<CR>
+vnoremap <buffer> <silent> <Leader>ss <Esc>:call C_InsertTemplate("statements.switch", "v")<CR>
+inoremap <buffer> <silent> <Leader>ss <Esc>:call C_InsertTemplate("statements.switch")<CR>
+
+ noremap <buffer> <silent> <Leader>sc <Esc>:call C_InsertTemplate("statements.case")<CR>
+inoremap <buffer> <silent> <Leader>sc <Esc>:call C_InsertTemplate("statements.case")<CR>
+
+ noremap <buffer> <silent> <Leader>s{ <Esc>:call C_InsertTemplate("statements.block")<CR>
+vnoremap <buffer> <silent> <Leader>s{ <Esc>:call C_InsertTemplate("statements.block", "v")<CR>
+inoremap <buffer> <silent> <Leader>s{ <Esc>:call C_InsertTemplate("statements.block")<CR>
+"
+" ---------- preprocessor menu ----------------------------------------------
+"
+inoremap <buffer> <silent> <Leader>p< <Esc><Esc>o#include<Tab><><Left>
+inoremap <buffer> <silent> <Leader>p" <Esc><Esc>o#include<Tab>""<Left>
+inoremap <buffer> <silent> <Leader>pd <Esc><Esc>:call C_InsertTemplate("preprocessor.define")<CR>
+inoremap <buffer> <silent> <Leader>pu <Esc><Esc>:call C_InsertTemplate("preprocessor.undefine")<CR>
+"
+ noremap <buffer> <silent> <Leader>p< <Esc><Esc>o#include<Tab><><Left>
+ noremap <buffer> <silent> <Leader>p" <Esc><Esc>o#include<Tab>""<Left>
+ noremap <buffer> <silent> <Leader>pd <Esc><Esc>:call C_InsertTemplate("preprocessor.define")<CR>
+ noremap <buffer> <silent> <Leader>pu <Esc><Esc>:call C_InsertTemplate("preprocessor.undefine")<CR>
+
+ noremap <buffer> <silent> <Leader>pie <Esc><Esc>:call C_InsertTemplate("preprocessor.if-else-endif")<CR>
+ noremap <buffer> <silent> <Leader>pid <Esc><Esc>:call C_InsertTemplate("preprocessor.ifdef-else-endif")<CR>
+ noremap <buffer> <silent> <Leader>pin <Esc><Esc>:call C_InsertTemplate("preprocessor.ifndef-else-endif")<CR>
+ noremap <buffer> <silent> <Leader>pind <Esc><Esc>:call C_InsertTemplate("preprocessor.ifndef-def-endif")<CR>
+ noremap <buffer> <silent> <Leader>pi0 <Esc><Esc>:call C_PPIf0("a")<CR>2ji
+
+vnoremap <buffer> <silent> <Leader>pie <Esc><Esc>:call C_InsertTemplate("preprocessor.if-else-endif", "v")<CR>
+vnoremap <buffer> <silent> <Leader>pid <Esc><Esc>:call C_InsertTemplate("preprocessor.ifdef-else-endif", "v")<CR>
+vnoremap <buffer> <silent> <Leader>pin <Esc><Esc>:call C_InsertTemplate("preprocessor.ifndef-else-endif", "v")<CR>
+vnoremap <buffer> <silent> <Leader>pind <Esc><Esc>:call C_InsertTemplate("preprocessor.ifndef-def-endif", "v")<CR>
+vnoremap <buffer> <silent> <Leader>pi0 <Esc><Esc>:call C_PPIf0("v")<CR>
+
+inoremap <buffer> <silent> <Leader>pie <Esc><Esc>:call C_InsertTemplate("preprocessor.if-else-endif")<CR>
+inoremap <buffer> <silent> <Leader>pid <Esc><Esc>:call C_InsertTemplate("preprocessor.ifdef-else-endif")<CR>
+inoremap <buffer> <silent> <Leader>pin <Esc><Esc>:call C_InsertTemplate("preprocessor.ifndef-else-endif")<CR>
+inoremap <buffer> <silent> <Leader>pind <Esc><Esc>:call C_InsertTemplate("preprocessor.ifndef-def-endif")<CR>
+inoremap <buffer> <silent> <Leader>pi0 <Esc><Esc>:call C_PPIf0("a")<CR>2ji
+
+ noremap <buffer> <silent> <Leader>pr0 <Esc><Esc>:call C_PPIf0Remove()<CR>
+"
+" ---------- idioms menu ----------------------------------------------------
+"
+ noremap <buffer> <silent> <Leader>if <Esc>:call C_InsertTemplate("idioms.function")<CR>
+vnoremap <buffer> <silent> <Leader>if <Esc>:call C_InsertTemplate("idioms.function", "v")<CR>
+inoremap <buffer> <silent> <Leader>if <Esc>:call C_InsertTemplate("idioms.function")<CR>
+ noremap <buffer> <silent> <Leader>isf <Esc>:call C_InsertTemplate("idioms.function-static")<CR>
+vnoremap <buffer> <silent> <Leader>isf <Esc>:call C_InsertTemplate("idioms.function-static", "v")<CR>
+inoremap <buffer> <silent> <Leader>isf <Esc>:call C_InsertTemplate("idioms.function-static")<CR>
+ noremap <buffer> <silent> <Leader>im <Esc>:call C_InsertTemplate("idioms.main")<CR>
+vnoremap <buffer> <silent> <Leader>im <Esc>:call C_InsertTemplate("idioms.main", "v")<CR>
+inoremap <buffer> <silent> <Leader>im <Esc>:call C_InsertTemplate("idioms.main")<CR>
+"
+ noremap <buffer> <silent> <Leader>i0 <Esc>:call C_CodeFor("up" , "a")<CR>a
+vnoremap <buffer> <silent> <Leader>i0 <Esc>:call C_CodeFor("up" , "v")<CR>
+inoremap <buffer> <silent> <Leader>i0 <Esc>:call C_CodeFor("up" , "a")<CR>a
+ noremap <buffer> <silent> <Leader>in <Esc>:call C_CodeFor("down", "a")<CR>a
+vnoremap <buffer> <silent> <Leader>in <Esc>:call C_CodeFor("down", "v")<CR>
+inoremap <buffer> <silent> <Leader>in <Esc>:call C_CodeFor("down", "a")<CR>a
+"
+ noremap <buffer> <silent> <Leader>ie <Esc>:call C_InsertTemplate("idioms.enum")<CR>
+vnoremap <buffer> <silent> <Leader>ie <Esc>:call C_InsertTemplate("idioms.enum" , "v")<CR>
+inoremap <buffer> <silent> <Leader>ie <Esc>:call C_InsertTemplate("idioms.enum")<CR>
+ noremap <buffer> <silent> <Leader>is <Esc>:call C_InsertTemplate("idioms.struct")<CR>
+vnoremap <buffer> <silent> <Leader>is <Esc>:call C_InsertTemplate("idioms.struct", "v")<CR>
+inoremap <buffer> <silent> <Leader>is <Esc>:call C_InsertTemplate("idioms.struct")<CR>
+ noremap <buffer> <silent> <Leader>iu <Esc>:call C_InsertTemplate("idioms.union")<CR>
+vnoremap <buffer> <silent> <Leader>iu <Esc>:call C_InsertTemplate("idioms.union" , "v")<CR>
+inoremap <buffer> <silent> <Leader>iu <Esc>:call C_InsertTemplate("idioms.union")<CR>
+"
+ noremap <buffer> <silent> <Leader>ip <Esc><Esc>oprintf("\n");<Esc>2F"a
+inoremap <buffer> <silent> <Leader>ip printf("\n");<Esc>2F"a
+ noremap <buffer> <silent> <Leader>isc <Esc><Esc>oscanf("", & );<Esc>F"i
+inoremap <buffer> <silent> <Leader>isc scanf("", & );<Esc>F"i
+"
+ noremap <buffer> <silent> <Leader>ica <Esc>:call C_InsertTemplate("idioms.calloc")
+inoremap <buffer> <silent> <Leader>ica <Esc>:call C_InsertTemplate("idioms.calloc")
+ noremap <buffer> <silent> <Leader>ima <Esc>:call C_InsertTemplate("idioms.malloc")<CR>
+inoremap <buffer> <silent> <Leader>ima <Esc>:call C_InsertTemplate("idioms.malloc")<CR>
+"
+ noremap <buffer> <silent> <Leader>isi isizeof()<Left>
+vnoremap <buffer> <silent> <Leader>isi ssizeof()<Esc>P
+inoremap <buffer> <silent> <Leader>isi sizeof()<Left>
+ noremap <buffer> <silent> <Leader>ias <Esc><Esc>oassert();<Left><Left>
+vnoremap <buffer> <silent> <Leader>ias sassert();<Esc>F(p
+inoremap <buffer> <silent> <Leader>ias assert();<Left><Left>
+"
+ noremap <buffer> <silent> <Leader>ii <Esc>:call C_InsertTemplate("idioms.open-input-file")<CR>
+inoremap <buffer> <silent> <Leader>ii <Esc>:call C_InsertTemplate("idioms.open-input-file")<CR>
+ noremap <buffer> <silent> <Leader>io <Esc>:call C_InsertTemplate("idioms.open-output-file")<CR>
+inoremap <buffer> <silent> <Leader>io <Esc>:call C_InsertTemplate("idioms.open-output-file")<CR>
+"
+" ---------- snippet menu ----------------------------------------------------
+"
+ noremap <buffer> <silent> <Leader>nr <Esc>:call C_CodeSnippet("r")<CR>
+ noremap <buffer> <silent> <Leader>nw <Esc>:call C_CodeSnippet("w")<CR>
+vnoremap <buffer> <silent> <Leader>nw <Esc>:call C_CodeSnippet("wv")<CR>
+ noremap <buffer> <silent> <Leader>ne <Esc>:call C_CodeSnippet("e")<CR>
+"
+ noremap <buffer> <silent> <Leader>np <Esc>:call C_ProtoPick("n")<CR>
+vnoremap <buffer> <silent> <Leader>np <Esc>:call C_ProtoPick("v")<CR>
+ noremap <buffer> <silent> <Leader>ni <Esc>:call C_ProtoInsert()<CR>
+ noremap <buffer> <silent> <Leader>nc <Esc>:call C_ProtoClear()<CR>
+ noremap <buffer> <silent> <Leader>ns <Esc>:call C_ProtoShow()<CR>
+"
+" ---------- C++ menu ----------------------------------------------------
+"
+ noremap <buffer> <silent> <Leader>+m <Esc>:call C_InsertTemplate("cpp.method-implementation")<CR>
+inoremap <buffer> <silent> <Leader>+m <Esc>:call C_InsertTemplate("cpp.method-implementation")<CR>
+ noremap <buffer> <silent> <Leader>+c <Esc>:call C_InsertTemplate("cpp.class")<CR>
+inoremap <buffer> <silent> <Leader>+c <Esc>:call C_InsertTemplate("cpp.class")<CR>
+ noremap <buffer> <silent> <Leader>+cn <Esc>:call C_InsertTemplate("cpp.class-using-new")<CR>
+inoremap <buffer> <silent> <Leader>+cn <Esc>:call C_InsertTemplate("cpp.class-using-new")<CR>
+
+ noremap <buffer> <silent> <Leader>+tm <Esc>:call C_InsertTemplate("cpp.template-method-implementation")<CR>
+inoremap <buffer> <silent> <Leader>+tm <Esc>:call C_InsertTemplate("cpp.template-method-implementation")<CR>
+ noremap <buffer> <silent> <Leader>+tc <Esc>:call C_InsertTemplate("cpp.template-class")<CR>
+inoremap <buffer> <silent> <Leader>+tc <Esc>:call C_InsertTemplate("cpp.template-class")<CR>
+ noremap <buffer> <silent> <Leader>+tcn <Esc>:call C_InsertTemplate("cpp.template-class-using-new")<CR>
+inoremap <buffer> <silent> <Leader>+tcn <Esc>:call C_InsertTemplate("cpp.template-class-using-new")<CR>
+
+ noremap <buffer> <silent> <Leader>+tf <Esc>:call C_InsertTemplate("cpp.template-function")<CR>
+inoremap <buffer> <silent> <Leader>+tf <Esc>:call C_InsertTemplate("cpp.template-function")<CR>
+
+ noremap <buffer> <silent> <Leader>+ec <Esc>:call C_InsertTemplate("cpp.error-class")<CR>
+inoremap <buffer> <silent> <Leader>+ec <Esc>:call C_InsertTemplate("cpp.error-class")<CR>
+
+ noremap <buffer> <silent> <Leader>+tr <Esc>:call C_InsertTemplate("cpp.try-catch")<CR>
+vnoremap <buffer> <silent> <Leader>+tr <Esc>:call C_InsertTemplate("cpp.try-catch", "v")<CR>
+inoremap <buffer> <silent> <Leader>+tr <Esc>:call C_InsertTemplate("cpp.try-catch")<CR>
+
+ noremap <buffer> <silent> <Leader>+ca <Esc>:call C_InsertTemplate("cpp.catch")<CR>
+vnoremap <buffer> <silent> <Leader>+ca <Esc>:call C_InsertTemplate("cpp.catch", "v")<CR>
+inoremap <buffer> <silent> <Leader>+ca <Esc>:call C_InsertTemplate("cpp.catch")<CR>
+
+ noremap <buffer> <silent> <Leader>+c. <Esc>:call C_InsertTemplate("cpp.catch-points")<CR>
+vnoremap <buffer> <silent> <Leader>+c. <Esc>:call C_InsertTemplate("cpp.catch-points", "v")<CR>
+inoremap <buffer> <silent> <Leader>+c. <Esc>:call C_InsertTemplate("cpp.catch-points")<CR>
+"
+"
+" ---------- run menu --------------------------------------------------------
+"
+ map <buffer> <silent> <Leader>rc <C-C>:call C_Compile()<CR>:redraw<CR>:call C_HlMessage()<CR>
+ map <buffer> <silent> <Leader>rl <C-C>:call C_Link()<CR>:redraw<CR>:call C_HlMessage()<CR>
+ map <buffer> <silent> <Leader>rr <C-C>:call C_Run()<CR>
+ map <buffer> <silent> <Leader>ra <C-C>:call C_Arguments()<CR>
+ map <buffer> <silent> <Leader>rm <C-C>:call C_Make()<CR>
+ map <buffer> <silent> <Leader>rg <C-C>:call C_MakeArguments()<CR>
+ map <buffer> <silent> <Leader>rp <C-C>:call C_SplintCheck()<CR>:redraw<CR>:call C_HlMessage()<CR>
+ map <buffer> <silent> <Leader>ri <C-C>:call C_SplintArguments()<CR>
+ map <buffer> <silent> <Leader>rd <C-C>:call C_Indent("a")<CR>:redraw<CR>:call C_HlMessage()<CR>
+vmap <buffer> <silent> <Leader>rd <C-C>:call C_Indent("v")<CR>:redraw<CR>:call C_HlMessage()<CR>
+ map <buffer> <silent> <Leader>rh <C-C>:call C_Hardcopy("n")<CR>
+vmap <buffer> <silent> <Leader>rh <C-C>:call C_Hardcopy("v")<CR>
+ map <buffer> <silent> <Leader>rs <C-C>:call C_Settings()<CR>
+ map <buffer> <silent> <Leader>rt <C-C>:call C_RebuildTemplates()<CR>
+ if has("unix")
+ map <buffer> <silent> <Leader>rx <C-C>:call C_XtermSize()<CR>
+ endif
+ map <buffer> <silent> <Leader>ro <C-C>:call C_Toggle_Gvim_Xterm()<CR>
+"
+" Abraxas CodeCheck (R)
+"
+if executable("check")
+ map <buffer> <silent> <Leader>rk <C-C>:call C_CodeCheck()<CR>:redraw<CR>:call C_HlMessage()<CR>
+ map <buffer> <silent> <Leader>re <C-C>:call C_CodeCheckArguments()<CR>
+endif
+" ---------- plugin help -----------------------------------------------------
+"
+ map <buffer> <silent> <Leader>h <Esc>:call C_HelpCsupport()<CR>
+"
diff --git a/dot_vim/ftplugin/cpp.vim b/dot_vim/ftplugin/cpp.vim
new file mode 100644
index 0000000..79b3445
--- /dev/null
+++ b/dot_vim/ftplugin/cpp.vim
@@ -0,0 +1,164 @@
+" Line numbering
+set number
+" Set syntax highlighting
+syntax on
+" Tabbing
+set et
+set shiftwidth=4
+set smarttab
+set autoindent
+" Complete Brackets {
+"
+" }"
+" Complete quotes"
+inoremap " ""<Left>
+" We want a mouse in consoles, so:"
+set mouse=a
+"
+"===============================================================================
+"========== load example vimrc from the distribution =========================
+"===============================================================================
+"
+runtime vimrc_example.vim
+"
+filetype plugin on
+"
+"===============================================================================
+"========== CUSTOMIZATION (vimrc) ============================================
+"===============================================================================
+"
+" Platform specific items:
+" - central backup directory (has to be created)
+" - default dictionary
+" Uncomment your choice.
+if has("win16") || has("win32") || has("win64") ||
+ \ has("win95") || has("win32unix")
+ "
+" runtime mswin.vim
+" set backupdir =$VIM\vimfiles\backupdir
+" set dictionary=$VIM\vimfiles\wordlists/german.list
+else
+" set backupdir =$HOME/.vim.backupdir
+" set dictionary=$HOME/.vim/wordlists/german.list
+endif
+"
+" Using a backupdir under UNIX/Linux: you may want to include a line similar to
+" find $HOME/.vim.backupdir -name "*" -type f -mtime +60 -exec rm -f {} \;
+" in one of your shell startup files (e.g. $HOME/.profile)
+"
+"-------------------------------------------------------------------------------
+" Use of dictionaries
+"-------------------------------------------------------------------------------
+"
+set complete+=k " scan the files given with the 'dictionary' option
+"
+"-------------------------------------------------------------------------------
+" Various settings
+"-------------------------------------------------------------------------------
+"
+set autoread " read open files again when changed outside Vim
+set autowrite " write a modified buffer on each :next , ...
+set browsedir =current " which directory to use for the file browser
+set incsearch " use incremental search
+"set nowrap " do not wrap lines
+set shiftwidth =4 " number of spaces to use for each step of indent
+set tabstop =4 " number of spaces that a <Tab> in the file counts for
+set visualbell " visual bell instead of beeping
+"
+"
+"-------------------------------------------------------------------------------
+" some additional hot keys
+"-------------------------------------------------------------------------------
+" F2 - write file without confirmation
+" F3 - call file explorer Ex
+" F4 - show tag under curser in the preview window (tagfile must exist!)
+" F5 - open quickfix error window
+" F6 - close quickfix error window
+" F7 - display previous error
+" F8 - display next error
+" S-Tab - Fast switching between buffers (see below)
+" C-q - Leave the editor with Ctrl-q (see below)
+"-------------------------------------------------------------------------------
+"
+map <silent> <F2> :write<CR>
+map <silent> <F3> :Explore<CR>
+nmap <silent> <F4> :exe ":ptag ".expand("<cword>")<CR>
+map <silent> <F5> :copen<CR>
+map <silent> <F6> :cclose<CR>
+map <silent> <F7> :cp<CR>
+map <silent> <F8> :cn<CR>
+"
+imap <silent> <F2> <Esc>:write<CR>
+imap <silent> <F3> <Esc>:Explore<CR>
+imap <silent> <F4> <Esc>:exe ":ptag ".expand("<cword>")<CR>
+imap <silent> <F5> <Esc>:copen<CR>
+imap <silent> <F6> <Esc>:cclose<CR>
+imap <silent> <F7> <Esc>:cp<CR>
+imap <silent> <F8> <Esc>:cn<CR>
+"
+"-------------------------------------------------------------------------------
+" Fast switching between buffers
+" The current buffer will be saved before switching to the next one.
+" Choose :bprevious or :bnext
+"-------------------------------------------------------------------------------
+"
+ map <silent> <s-tab> <Esc>:if &modifiable && !&readonly &&
+ \ &modified <CR> :write<CR> :endif<CR>:bprevious<CR>
+imap <silent> <s-tab> <Esc>:if &modifiable && !&readonly &&
+ \ &modified <CR> :write<CR> :endif<CR>:bprevious<CR>
+"
+"-------------------------------------------------------------------------------
+" Leave the editor with Ctrl-q : Write all changed buffers and exit Vim
+"-------------------------------------------------------------------------------
+nmap <C-q> :wqa<CR>
+"
+"-------------------------------------------------------------------------------
+" autocomplete parenthesis, brackets and braces
+"-------------------------------------------------------------------------------
+inoremap ( ()<Left>
+inoremap [ []<Left>
+inoremap { {<CR>}<ESC>ko
+"
+vnoremap ( s()<Esc>P<Right>%
+vnoremap [ s[]<Esc>P<Right>%
+vnoremap { s{}<Esc>P<Right>%
+"
+"-------------------------------------------------------------------------------
+" Change the working directory to the directory containing the current file
+"-------------------------------------------------------------------------------
+if has("autocmd")
+ autocmd BufEnter * :lchdir %:p:h
+endif " has("autocmd")
+"
+"-------------------------------------------------------------------------------
+" Filename completion
+"
+" wildmenu : command-line completion operates in an enhanced mode
+" wildignore : A file that matches with one of these
+" patterns is ignored when completing file or directory names.
+"-------------------------------------------------------------------------------
+"
+set wildmenu
+set wildignore=*.bak,*.o,*.e,*~
+"
+"-------------------------------------------------------------------------------
+" print options (pc = percentage of the media size)
+"-------------------------------------------------------------------------------
+set printoptions=left:8pc,right:3pc
+"
+"-------------------------------------------------------------------------------
+" taglist.vim : toggle the taglist window
+" taglist.vim : define the title texts for make
+" taglist.vim : define the title texts for qmake
+"-------------------------------------------------------------------------------
+ noremap <silent> <F11> <Esc><Esc>:Tlist<CR>
+inoremap <silent> <F11> <Esc><Esc>:Tlist<CR>
+
+let tlist_make_settings = 'make;m:makros;t:targets'
+
+let tlist_qmake_settings = 'qmake;t:SystemVariables'
+
+if has("autocmd")
+ " ---------- qmake : set filetype for *.pro ----------
+ autocmd BufNewFile,BufRead *.pro set filetype=qmake
+endif " has("autocmd")
diff --git a/dot_vim/ftplugin/gpg.vim b/dot_vim/ftplugin/gpg.vim
new file mode 100644
index 0000000..20f641f
--- /dev/null
+++ b/dot_vim/ftplugin/gpg.vim
@@ -0,0 +1,33 @@
+" Transparent editing of gpg encrypted files.
+" By Wouter Hanegraaff <wouter@blub.net>
+augroup encrypted
+au!
+" First make sure nothing is written to ~/.viminfo while editing
+" an encrypted file.
+autocmd BufReadPre,FileReadPre *.gpg set viminfo=
+" We don't want a swap file, as it writes unencrypted data to disk
+autocmd BufReadPre,FileReadPre *.gpg set noswapfile
+" Switch to binary mode to read the encrypted file
+autocmd BufReadPre,FileReadPre *.gpg set bin
+autocmd BufReadPre,FileReadPre *.gpg let ch_save = &ch|set ch=2
+autocmd BufReadPre,FileReadPre *.gpg let shsave=&sh
+autocmd BufReadPre,FileReadPre *.gpg let &sh='sh'
+autocmd BufReadPre,FileReadPre *.gpg let ch_save = &ch|set ch=2
+autocmd BufReadPost,FileReadPost *.gpg '[,']!gpg --decrypt --default-recipient-self 2> /dev/null
+autocmd BufReadPost,FileReadPost *.gpg let &sh=shsave
+" Switch to normal mode for editing
+autocmd BufReadPost,FileReadPost *.gpg set nobin
+autocmd BufReadPost,FileReadPost *.gpg let &ch = ch_save|unlet ch_save
+autocmd BufReadPost,FileReadPost *.gpg execute ":doautocmd BufReadPost " . expand("%:r")
+" Convert all text to encrypted text before writing
+autocmd BufWritePre,FileWritePre *.gpg set bin
+autocmd BufWritePre,FileWritePre *.gpg let shsave=&sh
+autocmd BufWritePre,FileWritePre *.gpg let &sh='sh'
+autocmd BufWritePre,FileWritePre *.gpg '[,']!gpg --encrypt --default-recipient-self 2>/dev/null
+autocmd BufWritePre,FileWritePre *.gpg let &sh=shsave
+" Undo the encryption so we are back in the normal text, directly
+" after the file has been written.
+autocmd BufWritePost,FileWritePost *.gpg silent u
+autocmd BufWritePost,FileWritePost *.gpg set nobin
+augroup END
+
diff --git a/dot_vim/ftplugin/haskell.vim b/dot_vim/ftplugin/haskell.vim
new file mode 100644
index 0000000..ffe83fe
--- /dev/null
+++ b/dot_vim/ftplugin/haskell.vim
@@ -0,0 +1,13 @@
+"
+" general Haskell source settings
+" (shared functions are in autoload/haskellmode.vim)
+"
+" (Claus Reinke, last modified: 21/04/2009)
+"
+" part of haskell plugins: http://projects.haskell.org/haskellmode-vim
+" please send patches to <claus.reinke@talk21.com>
+
+" try gf on import line, or ctrl-x ctrl-i, or [I, [i, ..
+set include=^import\\s*\\(qualified\\)\\?\\s*
+set includeexpr=substitute(v:fname,'\\.','/','g').'.hs'
+
diff --git a/dot_vim/ftplugin/haskell_doc.vim b/dot_vim/ftplugin/haskell_doc.vim
new file mode 100644
index 0000000..f850667
--- /dev/null
+++ b/dot_vim/ftplugin/haskell_doc.vim
@@ -0,0 +1,817 @@
+"
+" use haddock docs and index files
+" show documentation, complete & qualify identifiers
+"
+" (Claus Reinke; last modified: 24/04/2009)
+"
+" part of haskell plugins: http://projects.haskell.org/haskellmode-vim
+" please send patches to <claus.reinke@talk21.com>
+
+" :Doc <name> and :IDoc <name> open haddocks for <name> in opera
+"
+" :Doc needs qualified name (default Prelude) and package (default base)
+" :IDoc needs unqualified name, looks up possible links in g:haddock_index
+"
+" :DocIndex populates g:haddock_index from haddock's index files
+" :ExportDocIndex saves g:haddock_index to cache file
+" :ImportDocIndex reloads g:haddock_index from cache file
+"
+" all the following use the haddock index (g:haddock_index)
+"
+" _? opens haddocks for unqualified name under cursor,
+" suggesting alternative full qualifications in popup menu
+"
+" _. fully qualifies unqualified name under cursor,
+" suggesting alternative full qualifications in popup menu
+"
+" _i add import <module>(<name>) statement for unqualified <name> under cursor,
+" _im add import <module> statement for unqualified <name> under cursor,
+" suggesting alternative full qualifications in popup menu
+" (this currently adds one statement per call, instead of
+" merging into existing import statements, but it's a start;-)
+"
+" CTRL-X CTRL-U (user-defined insert mode completion)
+" suggests completions of unqualified names in popup menu
+
+let s:scriptname = "haskell_doc.vim"
+
+" script parameters
+" g:haddock_browser *mandatory* which browser to call
+" g:haddock_browser_callformat [optional] how to call browser
+" g:haddock_indexfiledir [optional] where to put 'haddock_index.vim'
+" g:haddock_docdir [optional] where to find html docs
+" g:ghc [optional] which ghc to call
+" g:ghc_pkg [optional] which ghc_pkg to call
+
+" been here before?
+if exists("g:haddock_index")
+ finish
+endif
+
+" initialise nested dictionary, to be populated
+" - from haddock index files via :DocIndex
+" - from previous cached version via :ImportDocIndex
+let g:haddock_index = {}
+
+" initialise dictionary, mapping modules with haddocks to their packages,
+" populated via MkHaddockModuleIndex() or HaveModuleIndex()
+let g:haddock_moduleindex = {}
+
+" program to open urls, please set this in your vimrc
+ "examples (for windows):
+ "let g:haddock_browser = "C:/Program Files/Opera/Opera.exe"
+ "let g:haddock_browser = "C:/Program Files/Mozilla Firefox/firefox.exe"
+ "let g:haddock_browser = "C:/Program Files/Internet Explorer/IEXPLORE.exe"
+if !exists("g:haddock_browser")
+ echoerr s:scriptname." WARNING: please set g:haddock_browser!"
+endif
+
+if (!exists("g:ghc") || !executable(g:ghc))
+ if !executable('ghc')
+ echoerr s:scriptname." can't find ghc. please set g:ghc, or extend $PATH"
+ finish
+ else
+ let g:ghc = 'ghc'
+ endif
+endif
+
+if (!exists("g:ghc_pkg") || !executable(g:ghc_pkg))
+ let g:ghc_pkg = substitute(g:ghc,'\(.*\)ghc','\1ghc-pkg','')
+endif
+
+if exists("g:haddock_docdir") && isdirectory(g:haddock_docdir)
+ let s:docdir = g:haddock_docdir
+elseif executable(g:ghc_pkg)
+" try to figure out location of html docs
+" first choice: where the base docs are (from the first base listed)
+ let [field;x] = split(system(g:ghc_pkg . ' field base haddock-html'),'\n')
+ let field = substitute(field,'haddock-html: \(.*\)libraries.base','\1','')
+ let field = substitute(field,'\\','/','g')
+ let alternate = substitute(field,'html','doc/html','')
+ if isdirectory(field)
+ let s:docdir = field
+ elseif isdirectory(alternate)
+ let s:docdir = alternate
+ endif
+else
+ echoerr s:scriptname." can't find ghc-pkg (set g:ghc_pkg ?)."
+endif
+
+" second choice: try some known suspects for windows/unix
+if !exists('s:docdir') || !isdirectory(s:docdir)
+ let s:ghc_libdir = substitute(system(g:ghc . ' --print-libdir'),'\n','','')
+ let location1a = s:ghc_libdir . '/doc/html/'
+ let location1b = s:ghc_libdir . '/doc/'
+ let s:ghc_version = substitute(system(g:ghc . ' --numeric-version'),'\n','','')
+ let location2 = '/usr/share/doc/ghc-' . s:ghc_version . '/html/'
+ if isdirectory(location1a)
+ let s:docdir = location1a
+ elseif isdirectory(location1b)
+ let s:docdir = location1b
+ elseif isdirectory(location2)
+ let s:docdir = location2
+ else " give up
+ echoerr s:scriptname." can't find locaton of html documentation (set g:haddock_docdir)."
+ finish
+ endif
+endif
+
+" todo: can we turn s:docdir into a list of paths, and
+" include docs for third-party libs as well?
+
+let s:libraries = s:docdir . 'libraries/'
+let s:guide = s:docdir . 'users_guide/'
+let s:index = 'index.html'
+if exists("g:haddock_indexfiledir") && filewritable(g:haddock_indexfiledir)
+ let s:haddock_indexfiledir = g:haddock_indexfiledir
+elseif filewritable(s:libraries)
+ let s:haddock_indexfiledir = s:libraries
+elseif filewritable($HOME)
+ let s:haddock_indexfiledir = $HOME.'/'
+else "give up
+ echoerr s:scriptname." can't locate index file. please set g:haddock_indexfiledir"
+ finish
+endif
+let s:haddock_indexfile = s:haddock_indexfiledir . 'haddock_index.vim'
+
+" different browser setups require different call formats;
+" you might want to call the browser synchronously or
+" asynchronously, and the latter is os-dependent;
+"
+" by default, the browser is started in the background when on
+" windows or if running in a gui, and in the foreground otherwise
+" (eg, console-mode for remote sessions, with text-mode browsers).
+"
+" you can override these defaults in your vimrc, via a format
+" string including 2 %s parameters (the first being the browser
+" to call, the second being the url).
+if !exists("g:haddock_browser_callformat")
+ if has("win32") || has("win64")
+ let g:haddock_browser_callformat = 'start %s "%s"'
+ else
+ if has("gui_running")
+ let g:haddock_browser_callformat = '%s %s '.printf(&shellredir,'/dev/null').' &'
+ else
+ let g:haddock_browser_callformat = '%s %s'
+ endif
+ endif
+endif
+
+" allow map leader override
+if !exists("maplocalleader")
+ let maplocalleader='_'
+endif
+
+command! DocSettings call DocSettings()
+function! DocSettings()
+ for v in ["g:haddock_browser","g:haddock_browser_callformat","g:haddock_docdir","g:haddock_indexfiledir","s:ghc_libdir","s:ghc_version","s:docdir","s:libraries","s:guide","s:haddock_indexfile"]
+ if exists(v)
+ echo v '=' eval(v)
+ else
+ echo v '='
+ endif
+ endfor
+endfunction
+
+function! DocBrowser(url)
+ "echomsg "DocBrowser(".url.")"
+ if (!exists("g:haddock_browser") || !executable(g:haddock_browser))
+ echoerr s:scriptname." can't find documentation browser. please set g:haddock_browser"
+ return
+ endif
+ " start browser to open url, according to specified format
+ let url = a:url=~'^\(file://\|http://\)' ? a:url : 'file://'.a:url
+ silent exe '!'.printf(g:haddock_browser_callformat,g:haddock_browser,escape(url,'#%'))
+endfunction
+
+"usage examples:
+" :Doc length
+" :Doc Control.Monad.when
+" :Doc Data.List.
+" :Doc Control.Monad.State.runState mtl
+" :Doc -top
+" :Doc -libs
+" :Doc -guide
+command! -nargs=+ Doc call Doc('v',<f-args>)
+command! -nargs=+ Doct call Doc('t',<f-args>)
+
+function! Doc(kind,qualname,...)
+ let suffix = '.html'
+ let relative = '#'.a:kind.'%3A'
+
+ if a:qualname=="-top"
+ call DocBrowser(s:docdir . s:index)
+ return
+ elseif a:qualname=="-libs"
+ call DocBrowser(s:libraries . s:index)
+ return
+ elseif a:qualname=="-guide"
+ call DocBrowser(s:guide . s:index)
+ return
+ endif
+
+ if a:0==0 " no package specified
+ let package = 'base/'
+ else
+ let package = a:1 . '/'
+ endif
+
+ if match(a:qualname,'\.')==-1 " unqualified name
+ let [qual,name] = [['Prelude'],a:qualname]
+ let file = join(qual,'-') . suffix . relative . name
+ elseif a:qualname[-1:]=='.' " module qualifier only
+ let parts = split(a:qualname,'\.')
+ let quallen = len(parts)-1
+ let [qual,name] = [parts[0:quallen],parts[-1]]
+ let file = join(qual,'-') . suffix
+ else " qualified name
+ let parts = split(a:qualname,'\.')
+ let quallen = len(parts)-2
+ let [qual,name] = [parts[0:quallen],parts[-1]]
+ let file = join(qual,'-') . suffix . relative . name
+ endif
+
+" let path = s:libraries . package . file
+ let path = file
+ call DocBrowser(path)
+endfunction
+
+" TODO: add commandline completion for :IDoc
+" indexed variant of Doc, looking up links in g:haddock_index
+" usage:
+" 1. :IDoc length
+" 2. click on one of the choices, or select by number (starting from 0)
+command! -nargs=+ IDoc call IDoc(<f-args>)
+function! IDoc(name,...)
+ let choices = HaddockIndexLookup(a:name)
+ if choices=={} | return | endif
+ if a:0==0
+ let keylist = map(deepcopy(keys(choices)),'substitute(v:val,"\\[.\\]","","")')
+ let choice = inputlist(keylist)
+ else
+ let choice = a:1
+ endif
+ let path = values(choices)[choice] " assumes same order for keys/values..
+ call DocBrowser(path)
+endfunction
+
+let s:flagref = s:guide . 'flag-reference.html'
+if filereadable(s:flagref)
+ " extract the generated fragment ids for the
+ " flag reference sections
+ let s:headerPat = '.\{-}<h3 class="title"><a name="\([^"]*\)"><\/a>\([^<]*\)<\/h3>\(.*\)'
+ let s:flagheaders = []
+ let s:flagheaderids = {}
+ let s:contents = join(readfile(s:flagref))
+ let s:ml = matchlist(s:contents,s:headerPat)
+ while s:ml!=[]
+ let [_,s:id,s:title,s:r;s:x] = s:ml
+ let s:flagheaders = add(s:flagheaders, s:title)
+ let s:flagheaderids[s:title] = s:id
+ let s:ml = matchlist(s:r,s:headerPat)
+ endwhile
+ command! -nargs=1 -complete=customlist,CompleteFlagHeaders FlagReference call FlagReference(<f-args>)
+ function! FlagReference(section)
+ let relativeUrl = a:section==""||!exists("s:flagheaderids['".a:section."']") ?
+ \ "" : "#".s:flagheaderids[a:section]
+ call DocBrowser(s:flagref.relativeUrl)
+ endfunction
+ function! CompleteFlagHeaders(al,cl,cp)
+ let s:choices = s:flagheaders
+ return CompleteAux(a:al,a:cl,a:cp)
+ endfunction
+endif
+
+command! -nargs=1 -complete=customlist,CompleteHaddockModules MDoc call MDoc(<f-args>)
+function! MDoc(module)
+ let suffix = '.html'
+ call HaveModuleIndex()
+ if !has_key(g:haddock_moduleindex,a:module)
+ echoerr a:module 'not found in haddock module index'
+ return
+ endif
+ let package = g:haddock_moduleindex[a:module]['package']
+ let file = substitute(a:module,'\.','-','g') . suffix
+" let path = s:libraries . package . '/' . file
+ let path = g:haddock_moduleindex[a:module]['html']
+ call DocBrowser(path)
+endfunction
+
+function! CompleteHaddockModules(al,cl,cp)
+ call HaveModuleIndex()
+ let s:choices = keys(g:haddock_moduleindex)
+ return CompleteAux(a:al,a:cl,a:cp)
+endfunction
+
+" create a dictionary g:haddock_index, containing the haddoc index
+command! DocIndex call DocIndex()
+function! DocIndex()
+ let files = split(globpath(s:libraries,'doc-index*.html'),'\n')
+ let g:haddock_index = {}
+ call ProcessHaddockIndexes2(s:libraries,files)
+ if GHC_VersionGE([6,8,2])
+ if &shell =~ 'sh' " unix-type shell
+ let s:addon_libraries = split(system(g:ghc_pkg . ' field \* haddock-html'),'\n')
+ else " windows cmd.exe and the like
+ let s:addon_libraries = split(system(g:ghc_pkg . ' field * haddock-html'),'\n')
+ endif
+ for addon in s:addon_libraries
+ let ml = matchlist(addon,'haddock-html: \("\)\?\(file:///\)\?\([^"]*\)\("\)\?')
+ if ml!=[]
+ let [_,quote,file,addon_path;x] = ml
+ let addon_path = substitute(addon_path,'\(\\\\\|\\\)','/','g')
+ let addon_files = split(globpath(addon_path,'doc-index*.html'),'\n')
+ call ProcessHaddockIndexes2(addon_path,addon_files)
+ endif
+ endfor
+ endif
+ return 1
+endfunction
+
+function! ProcessHaddockIndexes(location,files)
+ let entryPat= '.\{-}"indexentry"[^>]*>\([^<]*\)<\(\%([^=]\{-}TD CLASS="\%(indexentry\)\@!.\{-}</TD\)*\)[^=]\{-}\(\%(="indexentry\|TABLE\).*\)'
+ let linkPat = '.\{-}HREF="\([^"]*\)".>\([^<]*\)<\(.*\)'
+
+ redraw
+ echo 'populating g:haddock_index from haddock index files in ' a:location
+ for f in a:files
+ echo f[len(a:location):]
+ let contents = join(readfile(f))
+ let ml = matchlist(contents,entryPat)
+ while ml!=[]
+ let [_,entry,links,r;x] = ml
+ "echo entry links
+ let ml2 = matchlist(links,linkPat)
+ let link = {}
+ while ml2!=[]
+ let [_,l,m,links;x] = ml2
+ "echo l m
+ let link[m] = a:location . '/' . l
+ let ml2 = matchlist(links,linkPat)
+ endwhile
+ let g:haddock_index[DeHTML(entry)] = deepcopy(link)
+ "echo entry g:haddock_index[entry]
+ let ml = matchlist(r,entryPat)
+ endwhile
+ endfor
+endfunction
+
+" concatenating all lines is too slow for a big file, process lines directly
+function! ProcessHaddockIndexes2(location,files)
+ let entryPat= '^>\([^<]*\)</'
+ let linkPat = '.\{-}A HREF="\([^"]*\)"'
+ let kindPat = '#\(.\)'
+
+ " redraw
+ echo 'populating g:haddock_index from haddock index files in ' a:location
+ for f in a:files
+ echo f[len(a:location):]
+ let isEntry = 0
+ let isLink = ''
+ let link = {}
+ let entry = ''
+ for line in readfile(f)
+ if line=~'CLASS="indexentry'
+ if (link!={}) && (entry!='')
+ if has_key(g:haddock_index,DeHTML(entry))
+ let dict = extend(g:haddock_index[DeHTML(entry)],deepcopy(link))
+ else
+ let dict = deepcopy(link)
+ endif
+ let g:haddock_index[DeHTML(entry)] = dict
+ let link = {}
+ let entry = ''
+ endif
+ let isEntry=1
+ continue
+ endif
+ if isEntry==1
+ let ml = matchlist(line,entryPat)
+ if ml!=[] | let [_,entry;x] = ml | let isEntry=0 | continue | endif
+ endif
+ if entry!=''
+ let ml = matchlist(line,linkPat)
+ if ml!=[] | let [_,isLink;x]=ml | continue | endif
+ endif
+ if isLink!=''
+ let ml = matchlist(line,entryPat)
+ if ml!=[]
+ let [_,module;x] = ml
+ let [_,kind;x] = matchlist(isLink,kindPat)
+ let last = a:location[strlen(a:location)-1]
+ let link[module."[".kind."]"] = a:location . (last=='/'?'':'/') . isLink
+ let isLink=''
+ continue
+ endif
+ endif
+ endfor
+ if link!={}
+ if has_key(g:haddock_index,DeHTML(entry))
+ let dict = extend(g:haddock_index[DeHTML(entry)],deepcopy(link))
+ else
+ let dict = deepcopy(link)
+ endif
+ let g:haddock_index[DeHTML(entry)] = dict
+ endif
+ endfor
+endfunction
+
+command! ExportDocIndex call ExportDocIndex()
+function! ExportDocIndex()
+ call HaveIndex()
+ let entries = []
+ for key in keys(g:haddock_index)
+ let entries += [key,string(g:haddock_index[key])]
+ endfor
+ call writefile(entries,s:haddock_indexfile)
+ redir end
+endfunction
+
+command! ImportDocIndex call ImportDocIndex()
+function! ImportDocIndex()
+ if filereadable(s:haddock_indexfile)
+ let lines = readfile(s:haddock_indexfile)
+ let i=0
+ while i<len(lines)
+ let [key,dict] = [lines[i],lines[i+1]]
+ sandbox let g:haddock_index[key] = eval(dict)
+ let i+=2
+ endwhile
+ return 1
+ else
+ return 0
+ endif
+endfunction
+
+function! HaveIndex()
+ return (g:haddock_index!={} || ImportDocIndex() || DocIndex() )
+endfunction
+
+function! MkHaddockModuleIndex()
+ let g:haddock_moduleindex = {}
+ call HaveIndex()
+ for key in keys(g:haddock_index)
+ let dict = g:haddock_index[key]
+ for module in keys(dict)
+ let html = dict[module]
+ let html = substitute(html ,'#.*$','','')
+ let module = substitute(module,'\[.\]','','')
+ let ml = matchlist(html,'libraries/\([^\/]*\)\/')
+ if ml!=[]
+ let [_,package;x] = ml
+ let g:haddock_moduleindex[module] = {'package':package,'html':html}
+ endif
+ let ml = matchlist(html,'/\([^\/]*\)\/html/[A-Z]')
+ if ml!=[]
+ let [_,package;x] = ml
+ let g:haddock_moduleindex[module] = {'package':package,'html':html}
+ endif
+ endfor
+ endfor
+endfunction
+
+function! HaveModuleIndex()
+ return (g:haddock_moduleindex!={} || MkHaddockModuleIndex() )
+endfunction
+
+" decode HTML symbol encodings (are these all we need?)
+function! DeHTML(entry)
+ let res = a:entry
+ let decode = { '&lt;': '<', '&gt;': '>', '&amp;': '\\&' }
+ for enc in keys(decode)
+ exe 'let res = substitute(res,"'.enc.'","'.decode[enc].'","g")'
+ endfor
+ return res
+endfunction
+
+" find haddocks for word under cursor
+" also lists possible definition sites
+" - needs to work for both qualified and unqualified items
+" - for 'import qualified M as A', consider M.item as source of A.item
+" - offer sources from both type [t] and value [v] namespaces
+" - for unqualified items, list all possible sites
+" - for qualified items, list imported sites only
+" keep track of keys with and without namespace tags:
+" the former are needed for lookup, the latter for matching against source
+map <LocalLeader>? :call Haddock()<cr>
+function! Haddock()
+ amenu ]Popup.- :echo '-'<cr>
+ aunmenu ]Popup
+ let namsym = haskellmode#GetNameSymbol(getline('.'),col('.'),0)
+ if namsym==[]
+ redraw
+ echo 'no name/symbol under cursor!'
+ return 0
+ endif
+ let [start,symb,qual,unqual] = namsym
+ let imports = haskellmode#GatherImports()
+ let asm = has_key(imports[1],qual) ? imports[1][qual]['modules'] : []
+ let name = unqual
+ let dict = HaddockIndexLookup(name)
+ if dict=={} | return | endif
+ " for qualified items, narrow results to possible imports that provide qualifier
+ let filteredKeys = filter(copy(keys(dict))
+ \ ,'match(asm,substitute(v:val,''\[.\]'','''',''''))!=-1')
+ let keys = (qual!='') ? filteredKeys : keys(dict)
+ if (keys==[]) && (qual!='')
+ echoerr qual.'.'.unqual.' not found in imports'
+ return 0
+ endif
+ if len(keys)==1 && exists("g:haskell_avoid_singleton_menus")
+ call DocBrowser(dict[keys[0]])
+ elseif has("gui_running")
+ for key in keys
+ exe 'amenu ]Popup.'.escape(key,'\.').' :call DocBrowser('''.dict[key].''')<cr>'
+ endfor
+ popup ]Popup
+ else
+ let s:choices = keys
+ let key = input('browse docs for '.name.' in: ','','customlist,CompleteAux')
+ if key!=''
+ call DocBrowser(dict[key])
+ endif
+ endif
+endfunction
+
+if !exists("g:haskell_search_engines")
+ let g:haskell_search_engines =
+ \ {'hoogle':'http://www.haskell.org/hoogle/?hoogle=%s'
+ \ ,'hayoo!':'http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=%s'
+ \ }
+endif
+
+map <LocalLeader>?? :let es=g:haskell_search_engines
+ \ \|echo "g:haskell_search_engines"
+ \ \|for e in keys(es)
+ \ \|echo e.' : '.es[e]
+ \ \|endfor<cr>
+map <LocalLeader>?1 :call HaskellSearchEngine('hoogle')<cr>
+map <LocalLeader>?2 :call HaskellSearchEngine('hayoo!')<cr>
+
+" query one of the Haskell search engines for the thing under cursor
+" - unqualified symbols need to be url-escaped
+" - qualified ids need to be fed as separate qualifier and id for
+" both hoogle (doesn't handle qualified symbols) and hayoo! (no qualified
+" ids at all)
+" - qualified ids referring to import-qualified-as qualifiers need to be
+" translated to the multi-module searches over the list of original modules
+function! HaskellSearchEngine(engine)
+ amenu ]Popup.- :echo '-'<cr>
+ aunmenu ]Popup
+ let namsym = haskellmode#GetNameSymbol(getline('.'),col('.'),0)
+ if namsym==[]
+ redraw
+ echo 'no name/symbol under cursor!'
+ return 0
+ endif
+ let [start,symb,qual,unqual] = namsym
+ let imports = haskellmode#GatherImports()
+ let asm = has_key(imports[1],qual) ? imports[1][qual]['modules'] : []
+ let unqual = haskellmode#UrlEncode(unqual)
+ if a:engine=='hoogle'
+ let name = asm!=[] ? unqual.'+'.join(map(copy(asm),'"%2B".v:val'),'+')
+ \ : qual!='' ? unqual.'+'.haskellmode#UrlEncode('+').qual
+ \ : unqual
+ elseif a:engine=='hayoo!'
+ let name = asm!=[] ? unqual.'+module:('.join(copy(asm),' OR ').')'
+ \ : qual!='' ? unqual.'+module:'.qual
+ \ : unqual
+ else
+ let name = qual=="" ? unqual : qual.".".unqual
+ endif
+ if has_key(g:haskell_search_engines,a:engine)
+ call DocBrowser(printf(g:haskell_search_engines[a:engine],name))
+ else
+ echoerr "unknown search engine: ".a:engine
+ endif
+endfunction
+
+" used to pass on choices to CompleteAux
+let s:choices=[]
+
+" if there's no gui, use commandline completion instead of :popup
+" completion function CompleteAux suggests completions for a:al, wrt to s:choices
+function! CompleteAux(al,cl,cp)
+ "echomsg '|'.a:al.'|'.a:cl.'|'.a:cp.'|'
+ let res = []
+ let l = len(a:al)-1
+ for r in s:choices
+ if l==-1 || r[0 : l]==a:al
+ let res += [r]
+ endif
+ endfor
+ return res
+endfunction
+
+" CamelCase shorthand matching:
+" favour upper-case letters and module qualifier separators (.) for disambiguation
+function! CamelCase(shorthand,string)
+ let s1 = a:shorthand
+ let s2 = a:string
+ let notFirst = 0 " don't elide before first pattern letter
+ while ((s1!="")&&(s2!=""))
+ let head1 = s1[0]
+ let head2 = s2[0]
+ let elide = notFirst && ( ((head1=~'[A-Z]') && (head2!~'[A-Z.]'))
+ \ ||((head1=='.') && (head2!='.')) )
+ if elide
+ let s2=s2[1:]
+ elseif (head1==head2)
+ let s1=s1[1:]
+ let s2=s2[1:]
+ else
+ return 0
+ endif
+ let notFirst = (head1!='.')||(head2!='.') " treat separators as new beginnings
+ endwhile
+ return (s1=="")
+endfunction
+
+" use haddock name index for insert mode completion (CTRL-X CTRL-U)
+function! CompleteHaddock(findstart, base)
+ if a:findstart
+ let namsym = haskellmode#GetNameSymbol(getline('.'),col('.'),-1) " insert-mode: we're 1 beyond the text
+ if namsym==[]
+ redraw
+ echo 'no name/symbol under cursor!'
+ return -1
+ endif
+ let [start,symb,qual,unqual] = namsym
+ return (start-1)
+ else " find keys matching with "a:base"
+ let res = []
+ let l = len(a:base)-1
+ let qual = a:base =~ '^[A-Z][a-zA-Z0-9_'']*\(\.[A-Z][a-zA-Z0-9_'']*\)*\(\.[a-zA-Z0-9_'']*\)\?$'
+ call HaveIndex()
+ for key in keys(g:haddock_index)
+ let keylist = map(deepcopy(keys(g:haddock_index[key])),'substitute(v:val,"\\[.\\]","","")')
+ if (key[0 : l]==a:base)
+ for m in keylist
+ let res += [{"word":key,"menu":m,"dup":1}]
+ endfor
+ elseif qual " this tends to be slower
+ for m in keylist
+ let word = m . '.' . key
+ if word[0 : l]==a:base
+ let res += [{"word":word,"menu":m,"dup":1}]
+ endif
+ endfor
+ endif
+ endfor
+ if res==[] " no prefix matches, try CamelCase shortcuts
+ for key in keys(g:haddock_index)
+ let keylist = map(deepcopy(keys(g:haddock_index[key])),'substitute(v:val,"\\[.\\]","","")')
+ if CamelCase(a:base,key)
+ for m in keylist
+ let res += [{"word":key,"menu":m,"dup":1}]
+ endfor
+ elseif qual " this tends to be slower
+ for m in keylist
+ let word = m . '.' . key
+ if CamelCase(a:base,word)
+ let res += [{"word":word,"menu":m,"dup":1}]
+ endif
+ endfor
+ endif
+ endfor
+ endif
+ return res
+ endif
+endfunction
+set completefunc=CompleteHaddock
+set completeopt=menu,menuone,longest
+
+" fully qualify an unqualified name
+" TODO: - standardise commandline versions of menus
+map <LocalLeader>. :call Qualify()<cr>
+function! Qualify()
+ amenu ]Popup.- :echo '-'<cr>
+ aunmenu ]Popup
+ let namsym = haskellmode#GetNameSymbol(getline('.'),col('.'),0)
+ if namsym==[]
+ redraw
+ echo 'no name/symbol under cursor!'
+ return 0
+ endif
+ let [start,symb,qual,unqual] = namsym
+ if qual!='' " TODO: should we support re-qualification?
+ redraw
+ echo 'already qualified'
+ return 0
+ endif
+ let name = unqual
+ let line = line('.')
+ let prefix = (start<=1 ? '' : getline(line)[0:start-2] )
+ let dict = HaddockIndexLookup(name)
+ if dict=={} | return | endif
+ let keylist = map(deepcopy(keys(dict)),'substitute(v:val,"\\[.\\]","","")')
+ let imports = haskellmode#GatherImports()
+ let qualifiedImports = []
+ for qualifiedImport in keys(imports[1])
+ let c=0
+ for module in imports[1][qualifiedImport]['modules']
+ if haskellmode#ListElem(keylist,module) | let c+=1 | endif
+ endfor
+ if c>0 | let qualifiedImports=[qualifiedImport]+qualifiedImports | endif
+ endfor
+ "let asm = has_key(imports[1],qual) ? imports[1][qual]['modules'] : []
+ let keylist = filter(copy(keylist),'index(qualifiedImports,v:val)==-1')
+ if has("gui_running")
+ " amenu ]Popup.-imported- :
+ for key in qualifiedImports
+ let lhs=escape(prefix.name,'/.|\')
+ let rhs=escape(prefix.key.'.'.name,'/&|\')
+ exe 'amenu ]Popup.'.escape(key,'\.').' :'.line.'s/'.lhs.'/'.rhs.'/<cr>:noh<cr>'
+ endfor
+ amenu ]Popup.-not\ imported- :
+ for key in keylist
+ let lhs=escape(prefix.name,'/.|\')
+ let rhs=escape(prefix.key.'.'.name,'/&|\')
+ exe 'amenu ]Popup.'.escape(key,'\.').' :'.line.'s/'.lhs.'/'.rhs.'/<cr>:noh<cr>'
+ endfor
+ popup ]Popup
+ else
+ let s:choices = qualifiedImports+keylist
+ let key = input('qualify '.name.' with: ','','customlist,CompleteAux')
+ if key!=''
+ let lhs=escape(prefix.name,'/.\')
+ let rhs=escape(prefix.key.'.'.name,'/&\')
+ exe line.'s/'.lhs.'/'.rhs.'/'
+ noh
+ endif
+ endif
+endfunction
+
+" create (qualified) import for a (qualified) name
+" TODO: refine search patterns, to avoid misinterpretation of
+" oddities like import'Neither or not'module
+map <LocalLeader>i :call Import(0,0)<cr>
+map <LocalLeader>im :call Import(1,0)<cr>
+map <LocalLeader>iq :call Import(0,1)<cr>
+map <LocalLeader>iqm :call Import(1,1)<cr>
+function! Import(module,qualified)
+ amenu ]Popup.- :echo '-'<cr>
+ aunmenu ]Popup
+ let namsym = haskellmode#GetNameSymbol(getline('.'),col('.'),0)
+ if namsym==[]
+ redraw
+ echo 'no name/symbol under cursor!'
+ return 0
+ endif
+ let [start,symb,qual,unqual] = namsym
+ let name = unqual
+ let pname = ( symb ? '('.name.')' : name )
+ let importlist = a:module ? '' : '('.pname.')'
+ let qualified = a:qualified ? 'qualified ' : ''
+
+ if qual!=''
+ exe 'call append(search(''\%1c\(\<import\>\|\<module\>\|{-# OPTIONS\|{-# LANGUAGE\)'',''nb''),''import '.qualified.qual.importlist.''')'
+ return
+ endif
+
+ let line = line('.')
+ let prefix = getline(line)[0:start-1]
+ let dict = HaddockIndexLookup(name)
+ if dict=={} | return | endif
+ let keylist = map(deepcopy(keys(dict)),'substitute(v:val,"\\[.\\]","","")')
+ if has("gui_running")
+ for key in keylist
+ " exe 'amenu ]Popup.'.escape(key,'\.').' :call append(search("\\%1c\\(import\\\\|module\\\\|{-# OPTIONS\\)","nb"),"import '.key.importlist.'")<cr>'
+ exe 'amenu ]Popup.'.escape(key,'\.').' :call append(search(''\%1c\(\<import\>\\|\<module\>\\|{-# OPTIONS\\|{-# LANGUAGE\)'',''nb''),''import '.qualified.key.escape(importlist,'|').''')<cr>'
+ endfor
+ popup ]Popup
+ else
+ let s:choices = keylist
+ let key = input('import '.name.' from: ','','customlist,CompleteAux')
+ if key!=''
+ exe 'call append(search(''\%1c\(\<import\>\|\<module\>\|{-# OPTIONS\|{-# LANGUAGE\)'',''nb''),''import '.qualified.key.importlist.''')'
+ endif
+ endif
+endfunction
+
+function! HaddockIndexLookup(name)
+ call HaveIndex()
+ if !has_key(g:haddock_index,a:name)
+ echoerr a:name 'not found in haddock index'
+ return {}
+ endif
+ return g:haddock_index[a:name]
+endfunction
+
+" copied from ghc.vim :-( should we move everything to using autoload instead?
+" we query the ghc version here, as we don't otherwise need it..
+function! GHC_VersionGE(target)
+ let s:ghc_version = substitute(system(g:ghc . ' --numeric-version'),'\n','','')
+ let current = split(g:ghc_version, '\.' )
+ let target = a:target
+ for i in current
+ if ((target==[]) || (i>target[0]))
+ return 1
+ elseif (i==target[0])
+ let target = target[1:]
+ else
+ return 0
+ endif
+ endfor
+ return 1
+endfunction
diff --git a/dot_vim/ftplugin/haskell_hpaste.vim b/dot_vim/ftplugin/haskell_hpaste.vim
new file mode 100644
index 0000000..33ea0bd
--- /dev/null
+++ b/dot_vim/ftplugin/haskell_hpaste.vim
@@ -0,0 +1,79 @@
+" rudimentary hpaste support for vim
+" (using netrw for reading, wget for posting/annotating)
+"
+" claus reinke, last modified: 07/04/2009
+"
+" part of haskell plugins: http://projects.haskell.org/haskellmode-vim
+
+" unless wget is in your PATH, you need to set g:wget
+" before loading this script. windows users are out of
+" luck, unless they have wget installed (such as the
+" cygwin one looked for here), or adapt this script to
+" whatever alternative they have at hand (perhaps using
+" vim's perl/python bindings?)
+if !exists("g:wget")
+ if executable("wget")
+ let g:wget = "!wget -q"
+ else
+ let g:wget = "!c:\\cygwin\\bin\\wget -q"
+ endif
+endif
+
+" read (recent) hpaste files
+" show index in new buffer, where ,r will open current entry
+" and ,p will annotate current entry with current buffer
+command! HpasteIndex call HpasteIndex()
+function! HpasteIndex()
+ new
+ read http://hpaste.org
+ %s/\_$\_.//g
+ %s/<tr[^>]*>//g
+ %s/<\/tr>/ /g
+ g/<\/table>/d
+ g/DOCTYPE/d
+ %s/<td>\([^<]*\)<\/td><td><a href="\/fastcgi\/hpaste\.fcgi\/view?id=\([0-9]*\)">\([^<]*\)<\/a><\/td><td>\([^<]*\)<\/td><td>\([^<]*\)<\/td><td>\([^<]*\)<\/td>/\2 [\1] "\3" \4 \5 \6/
+ map <buffer> ,r 0yE:noh<cr>:call HpasteEditEntry('"')<cr>
+endfunction
+
+" load an existing entry for editing
+command! -nargs=1 HpasteEditEntry call HpasteEditEntry(<f-args>)
+function! HpasteEditEntry(entry)
+ new
+ exe 'Nread http://hpaste.org/fastcgi/hpaste.fcgi/raw?id='.a:entry
+ "exe 'map <buffer> ,p :call HpasteAnnotate('''.a:entry.''')<cr>'
+endfunction
+
+" " posting temporarily disabled -- needs someone to look into new
+" " hpaste.org structure
+
+" " annotate existing entry (only to be called via ,p in HpasteIndex)
+" function! HpasteAnnotate(entry)
+" let nick = input("nick? ")
+" let title = input("title? ")
+" if nick=='' || title==''
+" echo "nick or title missing. aborting annotation"
+" return
+" endif
+" call HpastePost('annotate/'.a:entry,nick,title)
+" endfunction
+"
+" " post new hpaste entry
+" " using 'wget --post-data' and url-encoded content
+" command! HpastePostNew call HpastePost('new',<args>)
+" function! HpastePost(mode,nick,title,...)
+" let lines = getbufline("%",1,"$")
+" let pat = '\([^[:alnum:]]\)'
+" let code = '\=printf("%%%02X",char2nr(submatch(1)))'
+" let lines = map(lines,'substitute(v:val."\r\n",'''.pat.''','''.code.''',''g'')')
+"
+" let url = 'http://hpaste.org/' . a:mode
+" let nick = substitute(a:nick,pat,code,'g')
+" let title = substitute(a:title,pat,code,'g')
+" if a:0==0
+" let announce = 'false'
+" else
+" let announce = a:1
+" endif
+" let cmd = g:wget.' --post-data="content='.join(lines,'').'&nick='.nick.'&title='.title.'&announce='.announce.'" '.url
+" exe escape(cmd,'%')
+" endfunction
diff --git a/dot_vim/ftplugin/latex-suite/bibtex.vim b/dot_vim/ftplugin/latex-suite/bibtex.vim
new file mode 100644
index 0000000..8037914
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/bibtex.vim
@@ -0,0 +1,266 @@
+"=============================================================================
+" File: bibtex.vim
+" Function: BibT
+" Author: Alan G Isaac <aisaac@american.edu>
+" modified by Srinath Avadhanula for latex-suite.
+" License: Vim Charityware license.
+" CVS: $Id: bibtex.vim 997 2006-03-20 09:45:45Z srinathava $
+"=============================================================================
+
+" Fields:
+" Define what field type each letter denotes {{{
+"
+let s:w_standsfor = 'address'
+let s:a_standsfor = 'author'
+let s:b_standsfor = 'booktitle'
+let s:c_standsfor = 'chapter'
+let s:d_standsfor = 'edition'
+let s:e_standsfor = 'editor'
+let s:h_standsfor = 'howpublished'
+let s:i_standsfor = 'institution'
+let s:k_standsfor = 'isbn'
+let s:j_standsfor = 'journal'
+let s:m_standsfor = 'month'
+let s:n_standsfor = 'number'
+let s:o_standsfor = 'organization'
+let s:p_standsfor = 'pages'
+let s:q_standsfor = 'publisher'
+let s:r_standsfor = 'school'
+let s:s_standsfor = 'series'
+let s:t_standsfor = 'title'
+let s:u_standsfor = 'type'
+let s:v_standsfor = 'volume'
+let s:y_standsfor = 'year'
+let s:z_standsfor = 'note'
+
+" }}}
+" Define the fields required for the various entry types {{{
+"
+" s:{type}_required defines the required fields
+" s:{type}_optional1 defines common optional fields
+" s:{type}_optional2 defines uncommmon optional fields
+" s:{type}_retval defines the first line of the formatted bib entry.
+"
+let s:key='<+key+>'
+
+let s:{'article'}_required="atjy"
+let s:{'article'}_optional1="vnpm"
+let s:{'article'}_optional2="z" " z is note
+let s:{'article'}_retval = '@ARTICLE{' . s:key . ','."\n"
+
+let s:{'book'}_required="aetqy" " requires author *or* editor
+let s:{'book'}_optional1="wd"
+let s:{'book'}_optional2="vnsmz" " w is address, d is edition
+let s:{'book'}_extras="k" " isbn
+let s:{'book'}_retval = '@BOOK{' . s:key . ','."\n"
+
+let s:{'booklet'}_required="t"
+let s:{'booklet'}_optional1="ahy"
+let s:{'booklet'}_optional2="wmz" " w is address
+let s:{'booklet'}_retval = '@BOOKLET{' . s:key . ','."\n"
+
+let s:{'inbook'}_required="aetcpqy"
+let s:{'inbook'}_optional1="w" " w is address
+let s:{'inbook'}_optional2="vnsudmz" " d is edition
+let s:{'inbook'}_extras="k" " isbn
+let s:{'inbook'}_retval = '@INBOOK{' . s:key . ','."\n"
+
+let s:{'incollection'}_required="atbqy" " b is booktitle
+let s:{'incollection'}_optional1="cpw" " w is address, c is chapter
+let s:{'incollection'}_optional2="evnsudmz" " d is edition
+let s:{'incollection'}_extras="k" " isbn
+let s:{'incollection'}_retval = '@INCOLLECTION{' . s:key . ','."\n"
+
+let s:{'inproceedings'}_required="atby" " b is booktitle
+let s:{'inproceedings'}_optional1="epwoq" " w is address, q is publisher
+let s:{'inproceedings'}_optional2="vnsmz"
+let s:{'inproceedings'}_extras="k" " isbn
+let s:{'inproceedings'}_retval = '@INPROCEEDINGS{' . s:key . ','."\n"
+
+let s:{'conference'}_required="atby" " b is booktitle
+let s:{'conference'}_optional1="epwoq" " w is address, q is publisher
+let s:{'conference'}_optional2="vnsmz"
+let s:{'conference'}_extras="k" " isbn
+let s:{'conference'}_retval = '@CONFERENCE{' . s:key . ','."\n"
+
+let s:{'manual'}_required="t"
+let s:{'manual'}_optional1="ow"
+let s:{'manual'}_optional2="admyz" " w is address
+let s:{'manual'}_retval = '@MANUAL{' . s:key . ','."\n"
+
+let s:{'msthesis'}_required="atry" " r is school
+let s:{'msthesis'}_optional1="w" " w is address
+let s:{'msthesis'}_optional2="umz" " u is type, w is address
+let s:{'msthesis'}_retval = '@MASTERSTHESIS{' . s:key . ','."\n"
+
+let s:{'misc'}_required=""
+let s:{'misc'}_optional1="ath"
+let s:{'misc'}_optional2="myz"
+let s:{'misc'}_retval = '@MISC{' . s:key . ','."\n"
+
+let s:{'phdthesis'}_required="atry" " r is school
+let s:{'phdthesis'}_optional1="w" " w is address
+let s:{'phdthesis'}_optional2="umz" " u is type
+let s:{'phdthesis'}_retval = '@PHDTHESIS{' . s:key . ','."\n"
+
+let s:{'proceedings'}_required="ty"
+let s:{'proceedings'}_optional1="ewo" " w is address
+let s:{'proceedings'}_optional2="vnsmqz" " q is publisher
+let s:{'proceedings'}_retval = '@PROCEEDINGS{' . s:key . ','."\n"
+
+let s:{'techreport'}_required="atiy"
+let s:{'techreport'}_optional1="unw" " u is type, w is address
+let s:{'techreport'}_optional2="mz"
+let s:{'techreport'}_retval = '@TECHREPORT{' . s:key . ','."\n"
+
+let s:{'unpublished'}_required="atz"
+let s:{'unpublished'}_optional1="y"
+let s:{'unpublished'}_optional2="m"
+let s:{'unpublished'}_retval = '@UNPUBLISHED{' . s:key . ','."\n"
+
+" }}}
+
+if exists('s:done')
+ finish
+endif
+let s:done = 1
+
+call IMAP ('BBB', "\<C-r>=BibT('', '', 0)\<CR>", 'bib')
+call IMAP ('BBL', "\<C-r>=BibT('', 'o', 0)\<CR>", 'bib')
+call IMAP ('BBH', "\<C-r>=BibT('', 'O', 0)\<CR>", 'bib')
+call IMAP ('BBX', "\<C-r>=BibT('', 'Ox', 0)\<CR>", 'bib')
+
+" BibT: function to generate a formatted bibtex entry {{{
+" three sample usages:
+" :call BibT() will request type choice
+" :call BibT("article") preferred, provides most common fields
+" :call BibT("article","ox") more optional fields (o) and extras (x)
+"
+" Input Arguments:
+" type: is one of the types listed above. (this should be a complete name, not
+" the acronym).
+" options: a string containing 0 or more of the letters 'oOx'
+" where
+" o: include a bib entry with first set of options
+" O: include a bib entry with extended options
+" x: incude bib entry with extra options
+" prompt: whether the fields are asked to be filled on the command prompt or
+" whether place-holders are used. when prompt == 1, then comman line
+" questions are used.
+"
+" Returns:
+" a string containing a formatted bib entry
+function BibT(type, options, prompt)
+ if a:type != ''
+ let choosetype = a:type
+ else
+ let types =
+ \ 'article'."\n".
+ \ 'booklet'."\n".
+ \ 'book'."\n".
+ \ 'conference'."\n".
+ \ 'inbook'."\n".
+ \ 'incollection'."\n".
+ \ 'inproceedings'."\n".
+ \ 'manual'."\n".
+ \ 'msthesis'."\n".
+ \ 'misc'."\n".
+ \ 'phdthesis'."\n".
+ \ 'proceedings'."\n".
+ \ 'techreport'."\n".
+ \ 'unpublished'
+ let choosetype = Tex_ChooseFromPrompt(
+ \ "Choose the type of bibliographic entry: \n" .
+ \ Tex_CreatePrompt(types, 3, "\n") .
+ \ "\nEnter number or filename :",
+ \ types, "\n")
+ if choosetype == ''
+ let choosetype = 'article'
+ endif
+ if types !~ '^\|\n'.choosetype.'$\|\n'
+ echomsg 'Please choose only one of the given types'
+ return
+ endif
+ endif
+ if a:options != ''
+ let options = a:options
+ else
+ let options = ""
+ endif
+
+ let fields = ''
+ let extras=""
+ let retval = ""
+
+ " define fields
+ let fields = s:{choosetype}_required
+ if options =~ 'o' && exists('s:'.choosetype.'_optional1')
+ let fields = fields . s:{choosetype}_optional1
+ endif
+ if options =~ "O" && exists('s:'.choosetype.'_optional2')
+ if options !~ 'o'&& exists('s:'.choosetype.'_optional1')
+ let fields = fields . s:{choosetype}_optional1
+ endif
+ let fields = fields . s:{choosetype}_optional2
+ endif
+ if options =~ "x" && exists('s:'.choosetype.'_extras')
+ let fields = fields . extras
+ endif
+ if exists('g:Bib_'.choosetype.'_options')
+ let fields = fields . g:Bib_{choosetype}_options
+ endif
+
+ let retval = s:{choosetype}_retval
+
+ let i = 0
+ while i < strlen(fields)
+ let field = strpart(fields, i, 1)
+
+ if exists('s:'.field.'_standsfor')
+ let field_name = s:{field}_standsfor
+ let retval = retval.field_name." = {<++>},\n"
+ endif
+
+ let i = i + 1
+ endwhile
+
+ " If the user wants even more fine-tuning...
+ if Tex_GetVarValue('Bib_'.choosetype.'_extrafields') != ''
+
+ let extrafields = Tex_GetVarValue('Bib_'.choosetype.'_extrafields')
+
+ let i = 1
+ while 1
+ let field_name = Tex_Strntok(extrafields, "\n", i)
+ if field_name == ''
+ break
+ endif
+
+ let retval = retval.field_name." = {<++>},\n"
+
+ let i = i + 1
+ endwhile
+
+ endif
+
+ let retval = retval.'otherinfo = {<++>}'."\n"
+ let retval = retval."}<++>"."\n"
+
+ return IMAP_PutTextWithMovement(retval)
+endfunction
+
+" }}}
+function! s:Input(prompt, ask) " {{{
+ if a:ask == 1
+ let retval = input(a:prompt)
+ if retval == ''
+ return "<++>"
+ endif
+ else
+ return "<++>"
+ endif
+endfunction
+
+" }}}
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
diff --git a/dot_vim/ftplugin/latex-suite/bibtools.py b/dot_vim/ftplugin/latex-suite/bibtools.py
new file mode 100644
index 0000000..0a5366c
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/bibtools.py
@@ -0,0 +1,221 @@
+# Author: Srinath Avadhanula
+# This file is distributed as part of the vim-latex project
+# http://vim-latex.sf.net
+
+import re
+
+class Bibliography(dict):
+ def __init__(self, txt, macros={}):
+ """
+ txt:
+ a string which represents the entire bibtex entry. A typical
+ entry is of the form:
+ @ARTICLE{ellington:84:part3,
+ author = {Ellington, C P},
+ title = {The Aerodynamics of Hovering Insect Flight. III. Kinematics},
+ journal = {Philosophical Transactions of the Royal Society of London. Series B, Biological Sciences},
+ year = {1984},
+ volume = {305},
+ pages = {41-78},
+ number = {1122},
+ owner = {Srinath},
+ pdf = {C:\srinath\research\papers\Ellington-3-Kinematics.pdf},
+ timestamp = {2006.01.02},
+ }
+ """
+
+ if macros:
+ for k, v in macros.iteritems():
+ txt = txt.replace(k, '{'+v+'}')
+
+ m = re.match(r'\s*@(\w+){((\S+),)?(.*)}\s*', txt, re.MULTILINE | re.DOTALL)
+ if not m:
+ return None
+
+ self['bibtype'] = m.group(1).capitalize()
+ self['key'] = m.group(3)
+ self['body'] = m.group(4)
+
+ body = self['body']
+ self['bodytext'] = ''
+ while 1:
+ m = re.search(r'(\S+?)\s*=\s*(.)', body)
+ if not m:
+ break
+
+ field = m.group(1)
+
+ body = body[(m.start(2)+1):]
+ if m.group(2) == '{':
+ # search for the next closing brace. This is not simply a
+ # matter of searching for the next closing brace since
+ # braces can be nested. The following code basically goes
+ # to the next } which has not already been closed by a
+ # following {.
+ mniter = re.finditer(r'{|}', body)
+
+ count = 1
+ while 1:
+ try:
+ mn = mniter.next()
+ except StopIteration:
+ return None
+
+ if mn.group(0) == '{':
+ count += 1
+ else:
+ count -= 1
+
+ if count == 0:
+ value = body[:(mn.start(0))]
+ break
+
+ elif m.group(2) == '"':
+ # search for the next unquoted double-quote. To be more
+ # precise, a double quote which is preceded by an even
+ # number of double quotes.
+ mn = re.search(r'(?!\\)(\\\\)*"', body)
+ if not mn:
+ return None
+
+ value = body[:(mn.start(0))]
+
+ else:
+ # $ always matches. So we do not need to do any
+ # error-checking.
+ mn = re.search(r',|$', body)
+ value = m.group(2) + body[:(mn.start(0))].rstrip()
+
+ self[field] = re.sub(r'\s+', ' ', value)
+ body = body[(mn.start(0)+1):]
+
+ self['bodytext'] += (' %s: %s\n' % (field, value))
+ if self['bibtype'].lower() == 'string':
+ self['macro'] = {field: value}
+
+ self['bodytext'] = self['bodytext'].rstrip()
+
+
+ def __getitem__(self, key):
+ try:
+ return dict.__getitem__(self, key)
+ except KeyError:
+ return ''
+
+ def __str__(self):
+ if self['bibtype'].lower() == 'string':
+ return 'String: %(macro)s' % self
+
+ elif self['bibtype'].lower() == 'article':
+ return ('Article [%(key)s]\n' +
+ 'TI "%(title)s"\n' +
+ 'AU %(author)s\n' +
+ 'IN In %(journal)s, %(year)s') % self
+
+ elif self['bibtype'].lower() == 'conference':
+ return ('Conference [%(key)s]\n' +
+ 'TI "%(title)s"\n' +
+ 'AU %(author)s\n' +
+ 'IN In %(booktitle)s, %(year)s') % self
+
+ elif self['bibtype'].lower() == 'mastersthesis':
+ return ('Masters [%(key)s]\n' +
+ 'TI "%(title)s"\n' +
+ 'AU %(author)s\n' +
+ 'IN In %(school)s, %(year)s') % self
+
+ elif self['bibtype'].lower() == 'phdthesis':
+ return ('PhD [%(key)s]\n' +
+ 'TI "%(title)s"\n' +
+ 'AU %(author)s\n' +
+ 'IN In %(school)s, %(year)s') % self
+
+ elif self['bibtype'].lower() == 'book':
+ return ('Book [%(key)s]\n' +
+ 'TI "%(title)s"\n' +
+ 'AU %(author)s\n' +
+ 'IN %(publisher)s, %(year)s') % self
+
+ else:
+ s = '%(bibtype)s [%(key)s]\n' % self
+ if self['title']:
+ s += 'TI "%(title)s"\n' % self
+ if self['author']:
+ s += 'AU %(author)s\n' % self
+ for k, v in self.iteritems():
+ if k not in ['title', 'author', 'bibtype', 'key', 'id', 'file', 'body', 'bodytext']:
+ s += 'MI %s: %s\n' % (k, v)
+
+ return s.rstrip()
+
+ def satisfies(self, filters):
+ for field, regexp in filters:
+ if not re.search(regexp, self[field], re.I):
+ return False
+
+ return True
+
+class BibFile:
+
+ def __init__(self, filelist=''):
+ self.bibentries = []
+ self.filters = []
+ self.macros = {}
+ self.sortfields = []
+ if filelist:
+ for f in filelist.splitlines():
+ self.addfile(f)
+
+ def addfile(self, file):
+ fields = open(file).read().split('@')
+ for f in fields:
+ if not (f and re.match('string', f, re.I)):
+ continue
+
+ b = Bibliography('@' + f)
+ self.macros.update(b['macro'])
+
+ for f in fields:
+ if not f or re.match('string', f, re.I):
+ continue
+
+ b = Bibliography('@' + f, self.macros)
+ if b:
+ b['file'] = file
+ b['id'] = len(self.bibentries)
+ self.bibentries += [b]
+
+
+ def addfilter(self, filterspec):
+ self.filters += [filterspec.split()]
+
+ def rmfilters(self):
+ self.filters = []
+
+ def __str__(self):
+ s = ''
+ for b in self.bibentries:
+ if b['key'] and b.satisfies(self.filters):
+ s += '%s\n\n' % b
+ return s
+
+ def addsortfield(self, field):
+ self.sortfields += [field]
+
+ def rmsortfields(self):
+ self.sortfields = []
+
+ def sort(self):
+ def cmpfun(b1, b2):
+ for f in self.sortfields:
+ c = cmp(b1[f], b2[f])
+ if c:
+ return c
+ return 0
+ self.bibentries.sort(cmp=cmpfun)
+
+if __name__ == "__main__":
+ import sys
+
+ bf = BibFile(sys.argv[1])
+ print bf
diff --git a/dot_vim/ftplugin/latex-suite/bibtools.pyc b/dot_vim/ftplugin/latex-suite/bibtools.pyc
new file mode 100644
index 0000000..c79961f
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/bibtools.pyc
Binary files differ
diff --git a/dot_vim/ftplugin/latex-suite/brackets.vim b/dot_vim/ftplugin/latex-suite/brackets.vim
new file mode 100644
index 0000000..0669ce4
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/brackets.vim
@@ -0,0 +1,145 @@
+" ==============================================================================
+" History: This was originally part of auctex.vim by Carl Mueller.
+" Srinath Avadhanula incorporated it into latex-suite with
+" significant modifications.
+" Parts of this file may be copyrighted by others as noted.
+" CVS: $Id: brackets.vim 997 2006-03-20 09:45:45Z srinathava $
+" Description:
+" This ftplugin provides the following maps:
+" . <M-b> encloses the previous character in \mathbf{}
+" . <M-c> is polymorphic as follows:
+" Insert mode:
+" 1. If the previous character is a letter or number, then capitalize it and
+" enclose it in \mathcal{}
+" 2. otherwise insert \cite{}
+" Visual Mode:
+" 1. Enclose selection in \mathcal{}
+" . <M-l> is also polymorphic as follows:
+" If the character before typing <M-l> is one of '([{|<q', then do the
+" following:
+" 1. (<M-l> \left(\right
+" similarly for [, |
+" {<M-l> \left\{\right\}
+" 2. <<M-l> \langle\rangle
+" 3. q<M-l> \lefteqn{}
+" otherwise insert \label{}
+" . <M-i> inserts \item commands at the current cursor location depending on
+" the surrounding environment. For example, inside itemize, it will
+" insert a simple \item, but within a description, it will insert
+" \item[<+label+>] etc.
+"
+" These functions make it extremeley easy to do all the \left \right stuff in
+" latex.
+" ==============================================================================
+
+" Avoid reinclusion.
+if exists('b:did_brackets')
+ finish
+endif
+let b:did_brackets = 1
+
+" define the funtions only once.
+if exists('*Tex_MathBF')
+ finish
+endif
+
+" Tex_MathBF: encloses te previous letter/number in \mathbf{} {{{
+" Description:
+function! Tex_MathBF()
+ return "\<Left>\\mathbf{\<Right>}"
+endfunction " }}}
+" Tex_MathCal: enclose the previous letter/number in \mathcal {{{
+" Description:
+" if the last character is not a letter/number, then insert \cite{}
+function! Tex_MathCal()
+ let line = getline(line("."))
+ let char = line[col(".")-2]
+
+ if char =~ '[a-zA-Z0-9]'
+ return "\<BS>".'\mathcal{'.toupper(char).'}'
+ else
+ return IMAP_PutTextWithMovement('\cite{<++>}<++>')
+ endif
+endfunction
+" }}}
+" Tex_LeftRight: maps <M-l> in insert mode. {{{
+" Description:
+" This is a polymorphic function, which maps the behaviour of <M-l> in the
+" following way:
+" If the character before typing <M-l> is one of '([{|<q', then do the
+" following:
+" 1. (<M-l> \left(<++>\right<++>
+" similarly for [, |
+" {<M-l> \left\{<++>\right\}<++>
+" 2. <<M-l> \langle<++>\rangle<++>
+" 3. q<M-l> \lefteqn{<++>}<++>
+" otherwise insert \label{<++>}<++>
+function! Tex_LeftRight()
+ let line = getline(line("."))
+ let char = line[col(".")-2]
+ let previous = line[col(".")-3]
+
+ let matchedbrackets = '()[]{}||'
+ if char =~ '(\|\[\|{\||'
+ let add = ''
+ if char =~ '{'
+ let add = "\\"
+ endif
+ let rhs = matchstr(matchedbrackets, char.'\zs.\ze')
+ return "\<BS>".IMAP_PutTextWithMovement('\left'.add.char.'<++>\right'.add.rhs.'<++>')
+ elseif char == '<'
+ return "\<BS>".IMAP_PutTextWithMovement('langle<++>\rangle<++>')
+ elseif char == 'q'
+ return "\<BS>".IMAP_PutTextWithMovement('\lefteqn{<++>}<++>')
+ else
+ return IMAP_PutTextWithMovement('\label{<++>}<++>')
+ endif
+endfunction " }}}
+" Tex_PutLeftRight: maps <M-l> in normal mode {{{
+" Description:
+" Put \left...\right in front of the matched brackets.
+function! Tex_PutLeftRight()
+ let previous = getline(line("."))[col(".") - 2]
+ let char = getline(line("."))[col(".") - 1]
+ if previous == '\'
+ if char == '{'
+ exe "normal ileft\\\<Esc>l%iright\\\<Esc>l%"
+ elseif char == '}'
+ exe "normal iright\\\<Esc>l%ileft\\\<Esc>l%"
+ endif
+ elseif char =~ '\[\|('
+ exe "normal i\\left\<Esc>l%i\\right\<Esc>l%"
+ elseif char =~ '\]\|)'
+ exe "normal i\\right\<Esc>l%i\\left\<Esc>l%"
+ endif
+endfunction " }}}
+
+" Provide <plug>'d mapping for easy user customization. {{{
+inoremap <silent> <Plug>Tex_MathBF <C-r>=Tex_MathBF()<CR>
+inoremap <silent> <Plug>Tex_MathCal <C-r>=Tex_MathCal()<CR>
+inoremap <silent> <Plug>Tex_LeftRight <C-r>=Tex_LeftRight()<CR>
+vnoremap <silent> <Plug>Tex_MathBF <C-C>`>a}<Esc>`<i\mathbf{<Esc>
+vnoremap <silent> <Plug>Tex_MathCal <C-C>`>a}<Esc>`<i\mathcal{<Esc>
+nnoremap <silent> <Plug>Tex_LeftRight :call Tex_PutLeftRight()<CR>
+
+" }}}
+" Tex_SetBracketingMaps: create mappings for the current buffer {{{
+function! <SID>Tex_SetBracketingMaps()
+
+ call Tex_MakeMap('<M-b>', '<Plug>Tex_MathBF', 'i', '<buffer> <silent>')
+ call Tex_MakeMap('<M-c>', '<Plug>Tex_MathCal', 'i', '<buffer> <silent>')
+ call Tex_MakeMap('<M-l>', '<Plug>Tex_LeftRight', 'i', '<buffer> <silent>')
+ call Tex_MakeMap('<M-b>', '<Plug>Tex_MathBF', 'v', '<buffer> <silent>')
+ call Tex_MakeMap('<M-c>', '<Plug>Tex_MathCal', 'v', '<buffer> <silent>')
+ call Tex_MakeMap('<M-l>', '<Plug>Tex_LeftRight', 'n', '<buffer> <silent>')
+
+endfunction
+" }}}
+
+augroup LatexSuite
+ au LatexSuite User LatexSuiteFileType
+ \ call Tex_Debug('brackets.vim: Catching LatexSuiteFileType event', 'brak') |
+ \ call <SID>Tex_SetBracketingMaps()
+augroup END
+
+" vim:fdm=marker
diff --git a/dot_vim/ftplugin/latex-suite/compiler.vim b/dot_vim/ftplugin/latex-suite/compiler.vim
new file mode 100644
index 0000000..245f6cd
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/compiler.vim
@@ -0,0 +1,820 @@
+"=============================================================================
+" File: compiler.vim
+" Author: Srinath Avadhanula
+" Created: Tue Apr 23 05:00 PM 2002 PST
+"
+" Description: functions for compiling/viewing/searching latex documents
+" CVS: $Id: compiler.vim 997 2006-03-20 09:45:45Z srinathava $
+"=============================================================================
+
+" Tex_SetTeXCompilerTarget: sets the 'target' for the next call to Tex_RunLaTeX() {{{
+function! Tex_SetTeXCompilerTarget(type, target)
+ call Tex_Debug("+Tex_SetTeXCompilerTarget: setting target to [".a:target."] for ".a:type."r", "comp")
+
+ if a:target == ''
+ let target = Tex_GetVarValue('Tex_DefaultTargetFormat')
+ let target = input('Enter the target format for '.a:type.'r: ', target)
+ else
+ let target = a:target
+ endif
+ if target == ''
+ let target = 'dvi'
+ endif
+
+ let targetRule = Tex_GetVarValue('Tex_'.a:type.'Rule_'.target)
+
+ if targetRule != ''
+ if a:type == 'Compile'
+ let &l:makeprg = escape(targetRule, Tex_GetVarValue('Tex_EscapeChars'))
+ elseif a:type == 'View'
+ let s:viewer = targetRule
+ endif
+ let s:target = target
+
+ elseif Tex_GetVarValue('Tex_'.a:type.'RuleComplete_'.target) != ''
+ let s:target = target
+
+ else
+ let curd = getcwd()
+ exe 'cd '.expand('%:p:h')
+ if !Tex_GetVarValue('Tex_UseMakefile') || (glob('makefile*') == '' && glob('Makefile*') == '')
+ if has('gui_running')
+ call confirm(
+ \'No '.a:type.' rule defined for target '.target."\n".
+ \'Please specify a rule in $VIMRUNTIME/ftplugin/tex/texrc'."\n".
+ \' :help Tex_'.a:type.'Rule_format'."\n".
+ \'for more information',
+ \"&ok", 1, 'Warning')
+ else
+ call input(
+ \'No '.a:type.' rule defined for target '.target."\n".
+ \'Please specify a rule in $VIMRUNTIME/ftplugin/tex/texrc'."\n".
+ \' :help Tex_'.a:type.'Rule_format'."\n".
+ \'for more information'
+ \)
+ endif
+ else
+ echomsg 'Assuming target is for makefile'
+ let s:target = target
+ endif
+ exe 'cd '.curd
+ endif
+endfunction
+
+function! SetTeXTarget(...)
+ if a:0 < 1
+ let target = Tex_GetVarValue('Tex_DefaultTargetFormat')
+ let target = input('Enter the target format for compiler and viewer: ', target)
+ else
+ let target = a:1
+ endif
+ if target == ''
+ let target = 'dvi'
+ endif
+
+ call Tex_SetTeXCompilerTarget('Compile', target)
+ call Tex_SetTeXCompilerTarget('View', target)
+endfunction
+
+com! -nargs=1 TCTarget :call Tex_SetTeXCompilerTarget('Compile', <f-args>)
+com! -nargs=1 TVTarget :call Tex_SetTeXCompilerTarget('View', <f-args>)
+com! -nargs=? TTarget :call SetTeXTarget(<f-args>)
+
+" }}}
+" Tex_CompileLatex: compiles the present file. {{{
+" Description:
+function! Tex_CompileLatex()
+ if &ft != 'tex'
+ echo "calling Tex_RunLaTeX from a non-tex file"
+ return
+ end
+
+ " close any preview windows left open.
+ pclose!
+
+ let curd = getcwd()
+
+ " Find the main file corresponding to this file. Always cd to the
+ " directory containing the file to avoid problems with the directory
+ " containing spaces.
+ " Latex on linux seems to be unable to handle file names with spaces at
+ " all! Therefore for the moment, do not attempt to handle spaces in the
+ " file name.
+ if exists('b:fragmentFile')
+ let mainfname = expand('%:p:t')
+ call Tex_CD(expand('%:p:h'))
+ else
+ let mainfname = Tex_GetMainFileName(':p:t')
+ call Tex_CD(Tex_GetMainFileName(':p:h'))
+ end
+
+ call Tex_Debug('Tex_CompileLatex: getting mainfname = ['.mainfname.'] from Tex_GetMainFileName', 'comp')
+
+ " if a makefile exists and the user wants to use it, then use that
+ " irrespective of whether *.latexmain exists or not. mainfname is still
+ " extracted from *.latexmain (if possible) log file name depends on the
+ " main file which will be compiled.
+ if Tex_GetVarValue('Tex_UseMakefile') && (glob('makefile') != '' || glob('Makefile') != '')
+ let _makeprg = &l:makeprg
+ call Tex_Debug("Tex_CompileLatex: using the makefile in the current directory", "comp")
+ let &l:makeprg = 'make $*'
+ if exists('s:target')
+ call Tex_Debug('Tex_CompileLatex: execing [make! '.s:target.']', 'comp')
+ exec 'make! '.s:target
+ else
+ call Tex_Debug('Tex_CompileLatex: execing [make!]', 'comp')
+ exec 'make!'
+ endif
+ let &l:makeprg = _makeprg
+ else
+ " If &makeprg has something like "$*.ps", it means that it wants the
+ " file-name without the extension... Therefore remove it.
+ if &makeprg =~ '\$\*\.\w\+'
+ let mainfname = fnamemodify(mainfname, ':r')
+ endif
+ call Tex_Debug('Tex_CompileLatex: execing [make! '.mainfname.']', 'comp')
+ exec 'make! '.mainfname
+ endif
+ redraw!
+
+ call Tex_CD(curd)
+endfunction " }}}
+" Tex_RunLaTeX: compilation function {{{
+" this function runs the latex command on the currently open file. often times
+" the file being currently edited is only a fragment being \input'ed into some
+" master tex file. in this case, make a file called mainfile.latexmain in the
+" directory containig the file. in other words, if the current file is
+" ~/thesis/chapter.tex
+" so that doing "latex chapter.tex" doesnt make sense, then make a file called
+" main.tex.latexmain
+" in the ~/thesis directory. this will then run "latex main.tex" when
+" Tex_RunLaTeX() is called.
+function! Tex_RunLaTeX()
+ call Tex_Debug('+Tex_RunLaTeX, b:fragmentFile = '.exists('b:fragmentFile'), 'comp')
+
+ let dir = expand("%:p:h").'/'
+ let curd = getcwd()
+ call Tex_CD(expand("%:p:h"))
+
+ let initTarget = s:target
+
+ " first get the dependency chain of this format.
+ call Tex_Debug("Tex_RunLaTeX: compiling to target [".s:target."]", "comp")
+
+ if Tex_GetVarValue('Tex_FormatDependency_'.s:target) != ''
+ let dependency = Tex_GetVarValue('Tex_FormatDependency_'.s:target)
+ if dependency !~ ','.s:target.'$'
+ let dependency = dependency.','.s:target
+ endif
+ else
+ let dependency = s:target
+ endif
+
+ call Tex_Debug('Tex_RunLaTeX: getting dependency chain = ['.dependency.']', 'comp')
+
+ " now compile to the final target format via each dependency.
+ let i = 1
+ while Tex_Strntok(dependency, ',', i) != ''
+ let s:target = Tex_Strntok(dependency, ',', i)
+
+ call Tex_SetTeXCompilerTarget('Compile', s:target)
+ call Tex_Debug('Tex_RunLaTeX: setting target to '.s:target, 'comp')
+
+ if Tex_GetVarValue('Tex_MultipleCompileFormats') =~ '\<'.s:target.'\>'
+ call Tex_Debug("Tex_RunLaTeX: compiling file multiple times via Tex_CompileMultipleTimes", "comp")
+ call Tex_CompileMultipleTimes()
+ else
+ call Tex_Debug("Tex_RunLaTeX: compiling file once via Tex_CompileLatex", "comp")
+ call Tex_CompileLatex()
+ endif
+
+ let errlist = Tex_GetErrorList()
+ call Tex_Debug("Tex_RunLaTeX: errlist = [".errlist."]", "comp")
+
+ " If there are any errors, then break from the rest of the steps
+ if errlist =~ '\v(error|warning)'
+ call Tex_Debug('Tex_RunLaTeX: There were errors in compiling, breaking chain...', 'comp')
+ break
+ endif
+
+ let i = i + 1
+ endwhile
+
+ let s:target = initTarget
+ let s:origwinnum = winnr()
+ call Tex_SetupErrorWindow()
+
+ call Tex_CD(curd)
+ call Tex_Debug("-Tex_RunLaTeX", "comp")
+endfunction
+
+" }}}
+" Tex_ViewLaTeX: opens viewer {{{
+" Description: opens the DVI viewer for the file being currently edited.
+" Again, if the current file is a \input in a master file, see text above
+" Tex_RunLaTeX() to see how to set this information.
+function! Tex_ViewLaTeX()
+ if &ft != 'tex'
+ echo "calling Tex_ViewLaTeX from a non-tex file"
+ return
+ end
+
+ let curd = getcwd()
+
+ " If b:fragmentFile is set, it means this file was compiled as a fragment
+ " using Tex_PartCompile, which means that we want to ignore any
+ " *.latexmain or makefile's.
+ if !exists('b:fragmentFile')
+ " cd to the location of the file to avoid having to deal with spaces
+ " in the directory name.
+ let mainfname = Tex_GetMainFileName(':p:t:r')
+ call Tex_CD(Tex_GetMainFileName(':p:h'))
+ else
+ let mainfname = expand("%:p:t:r")
+ call Tex_CD(expand("%:p:h"))
+ endif
+
+ if Tex_GetVarValue('Tex_ViewRuleComplete_'.s:target) != ''
+
+ let execString = Tex_GetVarValue('Tex_ViewRuleComplete_'.s:target)
+ let execString = substitute(execString, '{v:servername}', v:servername, 'g')
+
+ elseif has('win32')
+ " unfortunately, yap does not allow the specification of an external
+ " editor from the command line. that would have really helped ensure
+ " that this particular vim and yap are connected.
+ let execString = 'start '.s:viewer.' "$*.'.s:target.'"'
+
+ elseif has('macunix')
+ if strlen(s:viewer)
+ let s:viewer = '-a '.s:viewer
+ endif
+ let execString = 'open '.s:viewer.' $*.'.s:target
+
+ else
+ " taken from Dimitri Antoniou's tip on vim.sf.net (tip #225).
+ " slight change to actually use the current servername instead of
+ " hardcoding it as xdvi.
+ " Using an option for specifying the editor in the command line
+ " because that seems to not work on older bash'es.
+ if s:target == 'dvi'
+
+ if Tex_GetVarValue('Tex_UseEditorSettingInDVIViewer') == 1 &&
+ \ v:servername != '' &&
+ \ (s:viewer == "xdvi" || s:viewer == "xdvik")
+
+ let execString = s:viewer.' -editor "gvim --servername '.v:servername.
+ \ ' --remote-silent +\%l \%f" $*.dvi &'
+
+ elseif Tex_GetVarValue('Tex_UseEditorSettingInDVIViewer') == 1 &&
+ \ s:viewer == "kdvi"
+
+ let execString = 'kdvi --unique $*.dvi &'
+
+ else
+
+ let execString = s:viewer.' $*.dvi &'
+
+ endif
+
+ else
+
+ let execString = s:viewer.' $*.'.s:target.' &'
+
+ endif
+ end
+
+ let execString = substitute(execString, '\V$*', mainfname, 'g')
+ call Tex_Debug("Tex_ViewLaTeX: execString = ".execString, "comp")
+
+ exec 'silent! !'.execString
+
+ if !has('gui_running')
+ redraw!
+ endif
+
+ call Tex_CD(curd)
+endfunction
+
+" }}}
+" Tex_ForwardSearchLaTeX: searches for current location in dvi file. {{{
+" Description: if the DVI viewr is compatible, then take the viewer to that
+" position in the dvi file. see docs for Tex_RunLaTeX() to set a
+" master file if this is an \input'ed file.
+" Tip: With YAP on Windows, it is possible to do forward and inverse searches
+" on DVI files. to do forward search, you'll have to compile the file
+" with the --src-specials option. then set the following as the command
+" line in the 'view/options/inverse search' dialog box:
+" gvim --servername LATEX --remote-silent +%l "%f"
+" For inverse search, if you are reading this, then just pressing \ls
+" will work.
+function! Tex_ForwardSearchLaTeX()
+ if &ft != 'tex'
+ echo "calling Tex_ViewLaTeX from a non-tex file"
+ return
+ end
+
+ " only know how to do forward search for yap on windows and xdvik (and
+ " some newer versions of xdvi) on unices. Therefore forward searching will
+ " automatically open the DVI viewer irrespective of what the user chose as
+ " the default view format.
+ if Tex_GetVarValue('Tex_ViewRule_dvi') == ''
+ return
+ endif
+ let viewer = Tex_GetVarValue('Tex_ViewRule_dvi')
+
+ let curd = getcwd()
+
+ let mainfname = Tex_GetMainFileName(':t')
+ let mainfnameRoot = fnamemodify(Tex_GetMainFileName(), ':t:r')
+ " cd to the location of the file to avoid problems with directory name
+ " containing spaces.
+ call Tex_CD(Tex_GetMainFileName(':p:h'))
+
+ " inverse search tips taken from Dimitri Antoniou's tip and Benji Fisher's
+ " tips on vim.sf.net (vim.sf.net tip #225)
+ if has('win32')
+
+ let execString = 'silent! !start '. viewer.' -s '.line('.').expand('%').' '.mainfnameRoot
+
+ else
+ if Tex_GetVarValue('Tex_UseEditorSettingInDVIViewer') == 1 &&
+ \ exists('v:servername') &&
+ \ (viewer == "xdvi" || viewer == "xdvik")
+
+ let execString = 'silent! !'.viewer.' -name xdvi -sourceposition '.line('.').expand("%").
+ \ ' -editor "gvim --servername '.v:servername.' --remote-silent +\%l \%f" '.
+ \ mainfnameRoot.'.dvi &'
+
+ elseif Tex_GetVarValue('Tex_UseEditorSettingInDVIViewer') == 1 && viewer == "kdvi"
+
+ let execString = 'silent! !kdvi --unique file:'.mainfnameRoot.'.dvi\#src:'.line('.').expand("%").' &'
+
+ else
+
+ let execString = 'silent! !'.viewer.' -name xdvi -sourceposition '.line('.').expand("%").' '.mainfnameRoot.'.dvi &'
+
+ endif
+ end
+
+ call Tex_Debug("Tex_ForwardSearchLaTeX: execString = ".execString, "comp")
+ execute execString
+ if !has('gui_running')
+ redraw!
+ endif
+
+ call Tex_CD(curd)
+endfunction
+
+" }}}
+
+" ==============================================================================
+" Functions for compiling parts of a file.
+" ==============================================================================
+" Tex_PartCompile: compiles selected fragment {{{
+" Description: creates a temporary file from the selected fragment of text
+" prepending the preamble and \end{document} and then asks Tex_RunLaTeX() to
+" compile it.
+function! Tex_PartCompile() range
+ call Tex_Debug('+Tex_PartCompile', 'comp')
+ " Save position
+ let pos = line('.').' | normal! '.virtcol('.').'|'
+
+ " Get a temporary file in the same directory as the file from which
+ " fragment is being extracted. This is to enable the use of relative path
+ " names in the fragment.
+ let tmpfile = Tex_GetTempName(expand('%:p:h'))
+
+ " Remember all the temp files and for each temp file created, remember
+ " where the temp file came from.
+ let s:Tex_NumTempFiles = (exists('s:Tex_NumTempFiles') ? s:Tex_NumTempFiles + 1 : 1)
+ let s:Tex_TempFiles = (exists('s:Tex_TempFiles') ? s:Tex_TempFiles : '')
+ \ . tmpfile."\n"
+ let s:Tex_TempFile_{s:Tex_NumTempFiles} = tmpfile
+ " TODO: For a function Tex_RestoreFragment which restores a temp file to
+ " its original location.
+ let s:Tex_TempFileOrig_{s:Tex_NumTempFiles} = expand('%:p')
+ let s:Tex_TempFileRange_{s:Tex_NumTempFiles} = a:firstline.','.a:lastline
+
+ " Set up an autocmd to clean up the temp files when Vim exits.
+ if Tex_GetVarValue('Tex_RemoveTempFiles')
+ augroup RemoveTmpFiles
+ au!
+ au VimLeave * :call Tex_RemoveTempFiles()
+ augroup END
+ endif
+
+ " If mainfile exists open it in tiny window and extract preamble there,
+ " otherwise do it from current file
+ let mainfile = Tex_GetMainFileName(":p")
+ exe 'bot 1 split '.escape(mainfile, ' ')
+ exe '1,/\s*\\begin{document}/w '.tmpfile
+ wincmd q
+
+ exe a:firstline.','.a:lastline."w! >> ".tmpfile
+
+ " edit the temporary file
+ exec 'drop '.tmpfile
+
+ " append the \end{document} line.
+ $ put ='\end{document}'
+ w
+
+ " set this as a fragment file.
+ let b:fragmentFile = 1
+
+ silent! call Tex_RunLaTeX()
+endfunction " }}}
+" Tex_RemoveTempFiles: cleans up temporary files created during part compilation {{{
+" Description: During part compilation, temporary files containing the
+" visually selected text are created. These files need to be
+" removed when Vim exits to avoid "file leakage".
+function! Tex_RemoveTempFiles()
+ if !exists('s:Tex_NumTempFiles') || !Tex_GetVarValue('Tex_RemoveTempFiles')
+ return
+ endif
+ let i = 1
+ while i <= s:Tex_NumTempFiles
+ let tmpfile = s:Tex_TempFile_{i}
+ " Remove the tmp file and all other associated files such as the
+ " .log files etc.
+ call Tex_DeleteFile(fnamemodify(tmpfile, ':p:r').'.*')
+ let i = i + 1
+ endwhile
+endfunction " }}}
+
+" ==============================================================================
+" Compiling a file multiple times to resolve references/citations etc.
+" ==============================================================================
+" Tex_CompileMultipleTimes: The main function {{{
+" Description: compiles a file multiple times to get cross-references right.
+function! Tex_CompileMultipleTimes()
+ " Just extract the root without any extension because we want to construct
+ " the log file names etc from it.
+ let curd = getcwd()
+ let mainFileName_root = Tex_GetMainFileName(':p:t:r')
+ call Tex_CD(Tex_GetMainFileName(':p:h'))
+
+ " First ignore undefined references and the
+ " "rerun to get cross-references right" message from
+ " the compiler output.
+ let origlevel = Tex_GetVarValue('Tex_IgnoreLevel')
+ let origpats = Tex_GetVarValue('Tex_IgnoredWarnings')
+
+ let g:Tex_IgnoredWarnings = g:Tex_IgnoredWarnings."\n"
+ \ . 'Reference %.%# undefined'."\n"
+ \ . 'Rerun to get cross-references right'
+ TCLevel 1000
+
+ let idxFileName = mainFileName_root.'.idx'
+ let auxFileName = mainFileName_root.'.aux'
+
+ let runCount = 0
+ let needToRerun = 1
+ while needToRerun == 1 && runCount < 5
+ " assume we need to run only once.
+ let needToRerun = 0
+
+ let idxlinesBefore = Tex_CatFile(idxFileName)
+ let auxlinesBefore = Tex_GetAuxFile(auxFileName)
+
+ " first run latex.
+ echomsg "latex run number : ".(runCount+1)
+ call Tex_Debug("Tex_CompileMultipleTimes: latex run number : ".(runCount+1), "comp")
+ silent! call Tex_CompileLatex()
+
+ " If there are errors in any latex compilation step, immediately
+ " return. For now, do not bother with warnings because those might go
+ " away after compiling again or after bibtex is run etc.
+ let errlist = Tex_GetErrorList()
+ call Tex_Debug("Tex_CompileMultipleTimes: errors = [".errlist."]", "comp")
+
+ if errlist =~ 'error'
+ let g:Tex_IgnoredWarnings = origpats
+ exec 'TCLevel '.origlevel
+
+ return
+ endif
+
+ let idxlinesAfter = Tex_CatFile(idxFileName)
+
+ " If .idx file changed, then run makeindex to generate the new .ind
+ " file and remember to rerun latex.
+ if runCount == 0 && glob(idxFileName) != '' && idxlinesBefore != idxlinesAfter
+ echomsg "Running makeindex..."
+ let temp_mp = &mp | let &mp = Tex_GetVarValue('Tex_MakeIndexFlavor')
+ exec 'silent! make '.mainFileName_root
+ let &mp = temp_mp
+
+ let needToRerun = 1
+ endif
+
+ " The first time we see if we need to run bibtex and if the .bbl file
+ " changes, we will rerun latex.
+ if runCount == 0 && Tex_IsPresentInFile('\\bibdata', mainFileName_root.'.aux')
+ let bibFileName = mainFileName_root.'.bbl'
+
+ let biblinesBefore = Tex_CatFile(bibFileName)
+
+ echomsg "Running '".Tex_GetVarValue('Tex_BibtexFlavor')."' ..."
+ let temp_mp = &mp | let &mp = Tex_GetVarValue('Tex_BibtexFlavor')
+ exec 'silent! make '.mainFileName_root
+ let &mp = temp_mp
+
+ let biblinesAfter = Tex_CatFile(bibFileName)
+
+ " If the .bbl file changed after running bibtex, we need to
+ " latex again.
+ if biblinesAfter != biblinesBefore
+ echomsg 'Need to rerun because bibliography file changed...'
+ call Tex_Debug('Tex_CompileMultipleTimes: Need to rerun because bibliography file changed...', 'comp')
+ let needToRerun = 1
+ endif
+ endif
+
+ " check if latex asks us to rerun
+ let auxlinesAfter = Tex_GetAuxFile(auxFileName)
+ if auxlinesAfter != auxlinesBefore
+ echomsg "Need to rerun because the AUX file changed..."
+ call Tex_Debug("Tex_CompileMultipleTimes: Need to rerun to get cross-references right...", 'comp')
+ let needToRerun = 1
+ endif
+
+ let runCount = runCount + 1
+ endwhile
+
+ call Tex_Debug("Tex_CompileMultipleTimes: Ran latex ".runCount." time(s)", "comp")
+ echomsg "Ran latex ".runCount." time(s)"
+
+ let g:Tex_IgnoredWarnings = origpats
+ exec 'TCLevel '.origlevel
+ " After all compiler calls are done, reparse the .log file for
+ " errors/warnings to handle the situation where the clist might have been
+ " emptied because of bibtex/makeindex being run as the last step.
+ exec 'silent! cfile '.mainFileName_root.'.log'
+
+ call Tex_CD(curd)
+endfunction " }}}
+" Tex_GetAuxFile: get the contents of the AUX file {{{
+" Description: get the contents of the AUX file recursively including any
+" @\input'ted AUX files.
+function! Tex_GetAuxFile(auxFile)
+ if !filereadable(a:auxFile)
+ return ''
+ endif
+
+ let auxContents = Tex_CatFile(a:auxFile)
+ let pattern = '@\input{\(.\{-}\)}'
+
+ let auxContents = substitute(auxContents, pattern, '\=Tex_GetAuxFile(submatch(1))', 'g')
+
+ return auxContents
+endfunction " }}}
+
+" ==============================================================================
+" Helper functions for
+" . viewing the log file in preview mode.
+" . syncing the display between the quickfix window and preview window
+" . going to the correct line _and column_ number from from the quick fix
+" window.
+" ==============================================================================
+" Tex_SetupErrorWindow: sets up the cwindow and preview of the .log file {{{
+" Description:
+function! Tex_SetupErrorWindow()
+ let mainfname = Tex_GetMainFileName()
+
+ let winnum = winnr()
+
+ " close the quickfix window before trying to open it again, otherwise
+ " whether or not we end up in the quickfix window after the :cwindow
+ " command is not fixed.
+ cclose
+ cwindow
+ " create log file name from mainfname
+ let mfnlog = fnamemodify(mainfname, ":t:r").'.log'
+ call Tex_Debug('Tex_SetupErrorWindow: mfnlog = '.mfnlog, 'comp')
+ " if we moved to a different window, then it means we had some errors.
+ if winnum != winnr()
+ if Tex_GetVarValue('Tex_ShowErrorContext')
+ call Tex_UpdatePreviewWindow(mfnlog)
+ exe 'nnoremap <buffer> <silent> j j:call Tex_UpdatePreviewWindow("'.mfnlog.'")<CR>'
+ exe 'nnoremap <buffer> <silent> k k:call Tex_UpdatePreviewWindow("'.mfnlog.'")<CR>'
+ exe 'nnoremap <buffer> <silent> <up> <up>:call Tex_UpdatePreviewWindow("'.mfnlog.'")<CR>'
+ exe 'nnoremap <buffer> <silent> <down> <down>:call Tex_UpdatePreviewWindow("'.mfnlog.'")<CR>'
+ endif
+ exe 'nnoremap <buffer> <silent> <enter> :call Tex_GotoErrorLocation("'.mfnlog.'")<CR>'
+
+ setlocal nowrap
+
+ " resize the window to just fit in with the number of lines.
+ exec ( line('$') < 4 ? line('$') : 4 ).' wincmd _'
+ if Tex_GetVarValue('Tex_GotoError') == 1
+ call Tex_GotoErrorLocation(mfnlog)
+ else
+ exec s:origwinnum.' wincmd w'
+ endif
+ endif
+
+endfunction " }}}
+" Tex_PositionPreviewWindow: positions the preview window correctly. {{{
+" Description:
+" The purpose of this function is to count the number of times an error
+" occurs on the same line. or in other words, if the current line is
+" something like |10 error|, then we want to count the number of
+" lines in the quickfix window before this line which also contain lines
+" like |10 error|.
+"
+function! Tex_PositionPreviewWindow(filename)
+
+ if getline('.') !~ '|\d\+ \(error\|warning\)|'
+ if !search('|\d\+ \(error\|warning\)|')
+ call Tex_Debug("not finding error pattern anywhere in quickfix window :".bufname(bufnr('%')),
+ \ 'comp')
+ pclose!
+ return
+ endif
+ endif
+
+ " extract the error pattern (something like 'file.tex|10 error|') on the
+ " current line.
+ let errpat = matchstr(getline('.'), '^\f*|\d\+ \(error\|warning\)|\ze')
+ let errfile = matchstr(getline('.'), '^\f*\ze|\d\+ \(error\|warning\)|')
+ " extract the line number from the error pattern.
+ let linenum = matchstr(getline('.'), '|\zs\d\+\ze \(error\|warning\)|')
+
+ " if we are on an error, then count the number of lines before this in the
+ " quickfix window with an error on the same line.
+ if errpat =~ 'error|$'
+ " our location in the quick fix window.
+ let errline = line('.')
+
+ " goto the beginning of the quickfix window and begin counting the lines
+ " which show an error on the same line.
+ 0
+ let numrep = 0
+ while 1
+ " if we are on the same kind of error line, then means we have another
+ " line containing the same error pattern.
+ if getline('.') =~ errpat
+ let numrep = numrep + 1
+ normal! 0
+ endif
+ " if we have reached the original location in the quick fix window,
+ " then break.
+ if line('.') == errline
+ break
+ else
+ " otherwise, search for the next line which contains the same
+ " error pattern again. goto the end of the current line so we
+ " dont count this line again.
+ normal! $
+ call search(errpat, 'W')
+ endif
+ endwhile
+ else
+ let numrep = 1
+ endif
+
+ if getline('.') =~ '|\d\+ warning|'
+ let searchpat = escape(matchstr(getline('.'), '|\d\+ warning|\s*\zs.*'), '\ ')
+ else
+ let searchpat = 'l\.'.linenum
+ endif
+
+ " We first need to be in the scope of the correct file in the .log file.
+ " This is important for example, when a.tex and b.tex both have errors on
+ " line 9 of the file and we want to go to the error of b.tex. Merely
+ " searching forward from the beginning of the log file for l.9 will always
+ " land us on the error in a.tex.
+ if errfile != ''
+ exec 'silent! bot pedit +/(\\(\\f\\|\\[\\|\]\\|\\s\\)*'.errfile.'/ '.a:filename
+ else
+ exec 'bot pedit +0 '.a:filename
+ endif
+ " Goto the preview window
+ " TODO: This is not robust enough. Check that a wincmd j actually takes
+ " us to the preview window.
+ wincmd j
+ " now search forward from this position in the preview window for the
+ " numrep^th error of the current line in the quickfix window.
+ while numrep > 0
+ call search(searchpat, 'W')
+ let numrep = numrep - 1
+ endwhile
+ normal! z.
+
+endfunction " }}}
+" Tex_UpdatePreviewWindow: updates the view of the log file {{{
+" Description:
+" This function should be called when focus is in a quickfix window.
+" It opens the log file in a preview window and makes it display that
+" part of the log file which corresponds to the error which the user is
+" currently on in the quickfix window. Control returns to the quickfix
+" window when the function returns.
+"
+function! Tex_UpdatePreviewWindow(filename)
+ call Tex_PositionPreviewWindow(a:filename)
+
+ if &previewwindow
+ 6 wincmd _
+ wincmd p
+ endif
+endfunction " }}}
+" Tex_GotoErrorLocation: goes to the correct location of error in the tex file {{{
+" Description:
+" This function should be called when focus is in a quickfix window. This
+" function will first open the preview window of the log file (if it is not
+" already open), position the display of the preview to coincide with the
+" current error under the cursor and then take the user to the file in
+" which this error has occured.
+"
+" The position is both the correct line number and the column number.
+function! Tex_GotoErrorLocation(filename)
+
+ " first use vim's functionality to take us to the location of the error
+ " accurate to the line (not column). This lets us go to the correct file
+ " without applying any logic.
+ exec "normal! \<enter>"
+ " If the log file is not found, then going to the correct line number is
+ " all we can do.
+ if glob(a:filename) == ''
+ return
+ endif
+
+ let winnum = winnr()
+ " then come back to the quickfix window
+ wincmd w
+
+ " find out where in the file we had the error.
+ let linenum = matchstr(getline('.'), '|\zs\d\+\ze \(warning\|error\)|')
+ call Tex_PositionPreviewWindow(a:filename)
+
+ if getline('.') =~ 'l.\d\+'
+
+ let brokenline = matchstr(getline('.'), 'l.'.linenum.' \zs.*\ze')
+ " If the line is of the form
+ " l.10 ...and then there was some error
+ " it means (most probably) that only part of the erroneous line is
+ " shown. In this case, finding the length of the broken line is not
+ " correct. Instead goto the beginning of the line and search forward
+ " for the part which is displayed and then go to its end.
+ if brokenline =~ '^\M...'
+ let partline = matchstr(brokenline, '^\M...\m\zs.*')
+ let normcmd = "0/\\V".escape(partline, "\\")."/e+1\<CR>"
+ else
+ let column = strlen(brokenline) + 1
+ let normcmd = column.'|'
+ endif
+
+ elseif getline('.') =~ 'LaTeX Warning: \(Citation\|Reference\) `.*'
+
+ let ref = matchstr(getline('.'), "LaTeX Warning: \\(Citation\\|Reference\\) `\\zs[^']\\+\\ze'")
+ let normcmd = '0/'.ref."\<CR>"
+
+ else
+
+ let normcmd = '0'
+
+ endif
+
+ " go back to the window where we came from.
+ exec winnum.' wincmd w'
+ exec 'silent! '.linenum.' | normal! '.normcmd
+
+ if !Tex_GetVarValue('Tex_ShowErrorContext')
+ pclose!
+ endif
+endfunction " }}}
+" Tex_SetCompilerMaps: sets maps for compiling/viewing/searching {{{
+" Description:
+function! <SID>Tex_SetCompilerMaps()
+ if exists('b:Tex_doneCompilerMaps')
+ return
+ endif
+ let s:ml = exists('g:mapleader') ? g:mapleader : "\\"
+
+ nnoremap <buffer> <Plug>Tex_Compile :call Tex_RunLaTeX()<cr>
+ vnoremap <buffer> <Plug>Tex_Compile :call Tex_PartCompile()<cr>
+ nnoremap <buffer> <Plug>Tex_View :call Tex_ViewLaTeX()<cr>
+ nnoremap <buffer> <Plug>Tex_ForwardSearch :call Tex_ForwardSearchLaTeX()<cr>
+
+ call Tex_MakeMap(s:ml."ll", "<Plug>Tex_Compile", 'n', '<buffer>')
+ call Tex_MakeMap(s:ml."ll", "<Plug>Tex_Compile", 'v', '<buffer>')
+ call Tex_MakeMap(s:ml."lv", "<Plug>Tex_View", 'n', '<buffer>')
+ call Tex_MakeMap(s:ml."ls", "<Plug>Tex_ForwardSearch", 'n', '<buffer>')
+endfunction
+" }}}
+
+augroup LatexSuite
+ au LatexSuite User LatexSuiteFileType
+ \ call Tex_Debug('compiler.vim: Catching LatexSuiteFileType event', 'comp') |
+ \ call <SID>Tex_SetCompilerMaps()
+augroup END
+
+command! -nargs=0 -range=% TPartCompile :<line1>, <line2> silent! call Tex_PartCompile()
+" Setting b:fragmentFile = 1 makes Tex_CompileLatex consider the present file
+" the _main_ file irrespective of the presence of a .latexmain file.
+command! -nargs=0 TCompileThis let b:fragmentFile = 1
+command! -nargs=0 TCompileMainFile let b:fragmentFile = 0
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
diff --git a/dot_vim/ftplugin/latex-suite/custommacros.vim b/dot_vim/ftplugin/latex-suite/custommacros.vim
new file mode 100644
index 0000000..1b1c6bd
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/custommacros.vim
@@ -0,0 +1,257 @@
+"=============================================================================
+" File: custommacros.vim
+" Author: Mikolaj Machowski
+" Version: 1.0
+" Created: Tue Apr 23 05:00 PM 2002 PST
+" CVS: $Id: custommacros.vim 997 2006-03-20 09:45:45Z srinathava $
+"
+" Description: functions for processing custom macros in the
+" latex-suite/macros directory
+"=============================================================================
+
+let s:path = expand('<sfile>:p:h')
+
+" Set path to macros dir dependent on OS {{{
+if has("unix") || has("macunix")
+ let s:macrodirpath = $HOME."/.vim/ftplugin/latex-suite/macros/"
+elseif has("win32")
+ if exists("$HOME")
+ let s:macrodirpath = $HOME."/vimfiles/ftplugin/latex-suite/macros/"
+ else
+ let s:macrodirpath = $VIM."/vimfiles/ftplugin/latex-suite/macros/"
+ endif
+endif
+
+" }}}
+" SetCustomMacrosMenu: sets up the menu for Macros {{{
+function! <SID>SetCustomMacrosMenu()
+ let flist = Tex_FindInRtp('', 'macros')
+ exe 'amenu '.g:Tex_MacrosMenuLocation.'&New :call <SID>NewMacro("FFFromMMMenu")<CR>'
+ exe 'amenu '.g:Tex_MacrosMenuLocation.'&Redraw :call RedrawMacro()<CR>'
+
+ let i = 1
+ while 1
+ let fname = Tex_Strntok(flist, ',', i)
+ if fname == ''
+ break
+ endif
+ exe "amenu ".g:Tex_MacrosMenuLocation."&Delete.&".i.":<tab>".fname." :call <SID>DeleteMacro('".fname."')<CR>"
+ exe "amenu ".g:Tex_MacrosMenuLocation."&Edit.&".i.":<tab>".fname." :call <SID>EditMacro('".fname."')<CR>"
+ exe "imenu ".g:Tex_MacrosMenuLocation."&".i.":<tab>".fname." <C-r>=<SID>ReadMacro('".fname."')<CR>"
+ exe "nmenu ".g:Tex_MacrosMenuLocation."&".i.":<tab>".fname." i<C-r>=<SID>ReadMacro('".fname."')<CR>"
+ let i = i + 1
+ endwhile
+endfunction
+
+if g:Tex_Menus
+ call <SID>SetCustomMacrosMenu()
+endif
+
+" }}}
+" NewMacro: opens new file in macros directory {{{
+function! <SID>NewMacro(...)
+ " Allow for calling :TMacroNew without argument or from menu and prompt
+ " for name.
+ if a:0 > 0
+ let newmacroname = a:1
+ else
+ let newmacroname = input("Name of new macro: ")
+ if newmacroname == ''
+ return
+ endif
+ endif
+
+ if newmacroname == "FFFromMMMenu"
+ " Check if NewMacro was called from menu and prompt for insert macro
+ " name
+ let newmacroname = input("Name of new macro: ")
+ if newmacroname == ''
+ return
+ endif
+ elseif Tex_FindInRtp(newmacroname, 'macros') != ''
+ " If macro with this name already exists, prompt for another name.
+ exe "echomsg 'Macro ".newmacroname." already exists. Try another name.'"
+ let newmacroname = input("Name of new macro: ")
+ if newmacroname == ''
+ return
+ endif
+ endif
+ exec 'split '.Tex_EscapeSpaces(s:macrodirpath.newmacroname)
+ setlocal filetype=tex
+endfunction
+
+" }}}
+" RedrawMacro: refreshes macro menu {{{
+function! RedrawMacro()
+ aunmenu TeX-Suite.Macros
+ call <SID>SetCustomMacrosMenu()
+endfunction
+
+" }}}
+" ChooseMacro: choose a macro file {{{
+" " Description:
+function! s:ChooseMacro(ask)
+ let filelist = Tex_FindInRtp('', 'macros')
+ let filename = Tex_ChooseFromPrompt(
+ \ a:ask."\n" .
+ \ Tex_CreatePrompt(filelist, 2, ',') .
+ \ "\nEnter number or filename :",
+ \ filelist, ',')
+endfunction
+
+" }}}
+" DeleteMacro: deletes macro file {{{
+function! <SID>DeleteMacro(...)
+ if a:0 > 0
+ let filename = a:1
+ else
+ let filename = s:ChooseMacro('Choose a macro file for deletion :')
+ endif
+
+ if !filereadable(s:macrodirpath.filename)
+ " When file is not in local directory decline to remove it.
+ call confirm('This file is not in your local directory: '.filename."\n".
+ \ 'It will not be deleted.' , '&OK', 1)
+
+ else
+ let ch = confirm('Really delete '.filename.' ?', "&Yes\n&No", 2)
+ if ch == 1
+ call delete(s:macrodirpath.filename)
+ endif
+ call RedrawMacro()
+ endif
+endfunction
+
+" }}}
+" EditMacro: edits macro file {{{
+function! <SID>EditMacro(...)
+ if a:0 > 0
+ let filename = a:1
+ else
+ let filename = s:ChooseMacro('Choose a macro file for insertion:')
+ endif
+
+ if filereadable(s:macrodirpath.filename)
+ " If file exists in local directory open it.
+ exec 'split '.Tex_EscapeSpaces(s:macrodirpath.filename)
+ else
+ " But if file doesn't exist in local dir it probably is in user
+ " restricted area. Instead opening try to copy it to local dir.
+ " Pity VimL doesn't have mkdir() function :)
+ let ch = confirm("You are trying to edit file which is probably read-only.\n".
+ \ "It will be copied to your local LaTeX-Suite macros directory\n".
+ \ "and you will be operating on local copy with suffix -local.\n".
+ \ "It will succeed only if ftplugin/latex-suite/macros dir exists.\n".
+ \ "Do you agree?", "&Yes\n&No", 1)
+ if ch == 1
+ " But there is possibility we already created local modification.
+ " Check it and offer opening this file.
+ if filereadable(s:macrodirpath.filename.'-local')
+ let ch = confirm('Local version of '.filename." already exists.\n".
+ \ 'Do you want to open it or overwrite with original version?',
+ \ "&Open\nOver&write\n&Cancel", 1)
+ if ch == 1
+ exec 'split '.Tex_EscapeSpaces(s:macrodirpath.filename.'-local')
+ elseif ch == 2
+ new
+ exe '0read '.Tex_FindInRtp(filename, 'macros')
+ " This is possible macro was edited before, wipe it out.
+ if bufexists(s:macrodirpath.filename.'-local')
+ exe 'bwipe '.s:macrodirpath.filename.'-local'
+ endif
+ exe 'write! '.s:macrodirpath.filename.'-local'
+ else
+ return
+ endif
+ else
+ " If file doesn't exist, open new file, read in system macro and
+ " save it in local macro dir with suffix -local
+ new
+ exe '0read '.Tex_FindInRtp(filename, 'macros')
+ exe 'write '.s:macrodirpath.filename.'-local'
+ endif
+ endif
+
+ endif
+ setlocal filetype=tex
+endfunction
+
+" }}}
+" ReadMacro: reads in a macro from a macro file. {{{
+" allowing for placement via placeholders.
+function! <SID>ReadMacro(...)
+
+ if a:0 > 0
+ let filename = a:1
+ else
+ let filelist = Tex_FindInRtp('', 'macros')
+ let filename =
+ \ Tex_ChooseFromPrompt("Choose a macro file:\n" .
+ \ Tex_CreatePrompt(filelist, 2, ',') .
+ \ "\nEnter number or name of file :",
+ \ filelist, ',')
+ endif
+
+ let fname = Tex_FindInRtp(filename, 'macros', ':p')
+
+ let markerString = '<---- Latex Suite End Macro ---->'
+ let _a = @a
+ let position = line('.').' | normal! '.virtcol('.').'|'
+ silent! call append(line('.'), markerString)
+ silent! exec "read ".fname
+ silent! exec "normal! V/^".markerString."$/-1\<CR>\"ax"
+ " This is kind of tricky: At this stage, we are one line after the one we
+ " started from with the marker text on it. We need to
+ " 1. remove the marker and the line.
+ " 2. get focus to the previous line.
+ " 3. not remove anything from the previous line.
+ silent! exec "normal! $v0k$\"_x"
+
+ call Tex_CleanSearchHistory()
+
+ let @a = substitute(@a, '['."\n\r\t ".']*$', '', '')
+ let textWithMovement = IMAP_PutTextWithMovement(@a)
+ let @a = _a
+
+ return textWithMovement
+
+endfunction
+
+" }}}
+" commands for macros {{{
+com! -nargs=? TMacroNew :call <SID>NewMacro(<f-args>)
+
+" This macros had to have 2 versions:
+if v:version >= 602
+ com! -complete=custom,Tex_CompleteMacroName -nargs=? TMacro
+ \ :let s:retVal = <SID>ReadMacro(<f-args>) <bar> normal! i<C-r>=s:retVal<CR>
+ com! -complete=custom,Tex_CompleteMacroName -nargs=? TMacroEdit
+ \ :call <SID>EditMacro(<f-args>)
+ com! -complete=custom,Tex_CompleteMacroName -nargs=? TMacroDelete
+ \ :call <SID>DeleteMacro(<f-args>)
+
+ " Tex_CompleteMacroName: for completing names in TMacro... commands {{{
+ " Description: get list of macro names with Tex_FindInRtp(), remove full path
+ " and return list of names separated with newlines.
+ "
+ function! Tex_CompleteMacroName(A,P,L)
+ " Get name of macros from all runtimepath directories
+ let macronames = Tex_FindInRtp('', 'macros')
+ " Separate names with \n not ,
+ let macronames = substitute(macronames,',','\n','g')
+ return macronames
+ endfunction
+
+ " }}}
+
+else
+ com! -nargs=? TMacro
+ \ :let s:retVal = <SID>ReadMacro(<f-args>) <bar> normal! i<C-r>=s:retVal<CR>
+ com! -nargs=? TMacroEdit :call <SID>EditMacro(<f-args>)
+ com! -nargs=? TMacroDelete :call <SID>DeleteMacro(<f-args>)
+
+endif
+
+" }}}
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
diff --git a/dot_vim/ftplugin/latex-suite/diacritics.vim b/dot_vim/ftplugin/latex-suite/diacritics.vim
new file mode 100644
index 0000000..616d30a
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/diacritics.vim
@@ -0,0 +1,124 @@
+"=============================================================================
+" File: diacritics.vim
+" Author: Lubomir Host
+" Created: Tue Apr 23 07:00 PM 2002 PST
+"
+" Description: shortcuts for all diacritics.
+"=============================================================================
+
+if !g:Tex_Diacritics
+ finish
+endif
+
+" \'{a} {{{
+call IMAP ('=a', "\\\'{a}", 'tex')
+call IMAP ('=b', "\\'{b}", 'tex')
+call IMAP ('=c', "\\'{c}", 'tex')
+call IMAP ('=d', "\\'{d}", 'tex')
+call IMAP ('=e', "\\'{e}", 'tex')
+call IMAP ('=f', "\\'{f}", 'tex')
+call IMAP ('=g', "\\'{g}", 'tex')
+call IMAP ('=h', "\\'{h}", 'tex')
+call IMAP ('=i', "\\'{\i}", 'tex')
+call IMAP ('=j', "\\'{j}", 'tex')
+call IMAP ('=k', "\\'{k}", 'tex')
+call IMAP ('=l', "\\'{l}", 'tex')
+call IMAP ('=m', "\\'{m}", 'tex')
+call IMAP ('=n', "\\'{n}", 'tex')
+call IMAP ('=o', "\\'{o}", 'tex')
+call IMAP ('=p', "\\'{p}", 'tex')
+call IMAP ('=q', "\\'{q}", 'tex')
+call IMAP ('=r', "\\'{r}", 'tex')
+call IMAP ('=s', "\\'{s}", 'tex')
+call IMAP ('=t', "\\'{t}", 'tex')
+call IMAP ('=u', "\\'{u}", 'tex')
+call IMAP ('=v', "\\'{v}", 'tex')
+call IMAP ('=w', "\\'{w}", 'tex')
+call IMAP ('=x', "\\'{x}", 'tex')
+call IMAP ('=y', "\\'{y}", 'tex')
+call IMAP ('=z', "\\'{z}", 'tex')
+call IMAP ('=A', "\\'{A}", 'tex')
+call IMAP ('=B', "\\'{B}", 'tex')
+call IMAP ('=C', "\\'{C}", 'tex')
+call IMAP ('=D', "\\'{D}", 'tex')
+call IMAP ('=E', "\\'{E}", 'tex')
+call IMAP ('=F', "\\'{F}", 'tex')
+call IMAP ('=G', "\\'{G}", 'tex')
+call IMAP ('=H', "\\'{H}", 'tex')
+call IMAP ('=I', "\\'{\I}", 'tex')
+call IMAP ('=J', "\\'{J}", 'tex')
+call IMAP ('=K', "\\'{K}", 'tex')
+call IMAP ('=L', "\\'{L}", 'tex')
+call IMAP ('=M', "\\'{M}", 'tex')
+call IMAP ('=N', "\\'{N}", 'tex')
+call IMAP ('=O', "\\'{O}", 'tex')
+call IMAP ('=P', "\\'{P}", 'tex')
+call IMAP ('=Q', "\\'{Q}", 'tex')
+call IMAP ('=R', "\\'{R}", 'tex')
+call IMAP ('=S', "\\'{S}", 'tex')
+call IMAP ('=T', "\\'{T}", 'tex')
+call IMAP ('=U', "\\'{U}", 'tex')
+call IMAP ('=V', "\\'{V}", 'tex')
+call IMAP ('=W', "\\'{W}", 'tex')
+call IMAP ('=X', "\\'{X}", 'tex')
+call IMAP ('=Y', "\\'{Y}", 'tex')
+call IMAP ('=Z', "\\'{Z}", 'tex')
+" }}}
+" \v{a} {{{
+call IMAP ('+a', "\\v{a}", 'tex')
+call IMAP ('+b', "\\v{b}", 'tex')
+call IMAP ('+c', "\\v{c}", 'tex')
+call IMAP ('+d', "\\v{d}", 'tex')
+call IMAP ('+e', "\\v{e}", 'tex')
+call IMAP ('+f', "\\v{f}", 'tex')
+call IMAP ('+g', "\\v{g}", 'tex')
+call IMAP ('+h', "\\v{h}", 'tex')
+call IMAP ('+i', "\\v{\i}", 'tex')
+call IMAP ('+j', "\\v{j}", 'tex')
+call IMAP ('+k', "\\v{k}", 'tex')
+call IMAP ('+l', "\\q l", 'tex')
+call IMAP ('+m', "\\v{m}", 'tex')
+call IMAP ('+n', "\\v{n}", 'tex')
+call IMAP ('+o', "\\v{o}", 'tex')
+call IMAP ('+p', "\\v{p}", 'tex')
+call IMAP ('+q', "\\v{q}", 'tex')
+call IMAP ('+r', "\\v{r}", 'tex')
+call IMAP ('+s', "\\v{s}", 'tex')
+call IMAP ('+t', "\\q t", 'tex')
+call IMAP ('+u', "\\v{u}", 'tex')
+call IMAP ('+v', "\\v{v}", 'tex')
+call IMAP ('+w', "\\v{w}", 'tex')
+call IMAP ('+x', "\\v{x}", 'tex')
+call IMAP ('+y', "\\v{y}", 'tex')
+call IMAP ('+z', "\\v{z}", 'tex')
+call IMAP ('+A', "\\v{A}", 'tex')
+call IMAP ('+B', "\\v{B}", 'tex')
+call IMAP ('+C', "\\v{C}", 'tex')
+call IMAP ('+D', "\\v{D}", 'tex')
+call IMAP ('+E', "\\v{E}", 'tex')
+call IMAP ('+F', "\\v{F}", 'tex')
+call IMAP ('+G', "\\v{G}", 'tex')
+call IMAP ('+H', "\\v{H}", 'tex')
+call IMAP ('+I', "\\v{\I}", 'tex')
+call IMAP ('+J', "\\v{J}", 'tex')
+call IMAP ('+K', "\\v{K}", 'tex')
+call IMAP ('+L', "\\v{L}", 'tex')
+call IMAP ('+M', "\\v{M}", 'tex')
+call IMAP ('+N', "\\v{N}", 'tex')
+call IMAP ('+O', "\\v{O}", 'tex')
+call IMAP ('+P', "\\v{P}", 'tex')
+call IMAP ('+Q', "\\v{Q}", 'tex')
+call IMAP ('+R', "\\v{R}", 'tex')
+call IMAP ('+S', "\\v{S}", 'tex')
+call IMAP ('+T', "\\v{T}", 'tex')
+call IMAP ('+U', "\\v{U}", 'tex')
+call IMAP ('+V', "\\v{V}", 'tex')
+call IMAP ('+W', "\\v{W}", 'tex')
+call IMAP ('+X', "\\v{X}", 'tex')
+call IMAP ('+Y', "\\v{Y}", 'tex')
+call IMAP ('+Z', "\\v{Z}", 'tex')
+" }}}
+call IMAP ('+}', "\\\"{a}", 'tex')
+call IMAP ('+:', "\\^{o}", 'tex')
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
diff --git a/dot_vim/ftplugin/latex-suite/dictionaries/SIunits b/dot_vim/ftplugin/latex-suite/dictionaries/SIunits
new file mode 100644
index 0000000..d4ac081
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/dictionaries/SIunits
@@ -0,0 +1,289 @@
+addprefix
+addunit
+ampere
+amperemetresecond
+amperepermetre
+amperepermetrenp
+amperepersquaremetre
+amperepersquaremetrenp
+angstrom
+arad
+arcminute
+arcsecond
+are
+atomicmass
+atto
+attod
+barn
+bbar
+becquerel
+becquerelbase
+bel
+candela
+candelapersquaremetre
+candelapersquaremetrenp
+celsius
+Celsius
+celsiusbase
+centi
+centid
+coulomb
+coulombbase
+coulombpercubicmetre
+coulombpercubicmetrenp
+coulombperkilogram
+coulombperkilogramnp
+coulombpermol
+coulombpermolnp
+coulombpersquaremetre
+coulombpersquaremetrenp
+cubed
+cubic
+cubicmetre
+cubicmetreperkilogram
+cubicmetrepersecond
+curie
+dday
+deca
+decad
+deci
+decid
+degree
+degreecelsius
+deka
+dekad
+derbecquerel
+dercelsius
+dercoulomb
+derfarad
+dergray
+derhenry
+derhertz
+derjoule
+derkatal
+derlumen
+derlux
+dernewton
+derohm
+derpascal
+derradian
+dersiemens
+dersievert
+dersteradian
+dertesla
+dervolt
+derwatt
+derweber
+electronvolt
+exa
+exad
+farad
+faradbase
+faradpermetre
+faradpermetrenp
+femto
+femtod
+fourth
+gal
+giga
+gigad
+gram
+graybase
+graypersecond
+graypersecondnp
+hectare
+hecto
+hectod
+henry
+henrybase
+henrypermetre
+henrypermetrenp
+hertz
+hertzbase
+hour
+joule
+joulebase
+joulepercubicmetre
+joulepercubicmetrenp
+jouleperkelvin
+jouleperkelvinnp
+jouleperkilogram
+jouleperkilogramkelvin
+jouleperkilogramkelvinnp
+jouleperkilogramnp
+joulepermole
+joulepermolekelvin
+joulepermolekelvinnp
+joulepermolenp
+joulepersquaremetre
+joulepersquaremetrenp
+joulepertesla
+jouleperteslanp
+katal
+katalbase
+katalpercubicmetre
+katalpercubicmetrenp
+kelvin
+kilo
+kilod
+kilogram
+kilogrammetrepersecond
+kilogrammetrepersecondnp
+kilogrammetrepersquaresecond
+kilogrammetrepersquaresecondnp
+kilogrampercubicmetre
+kilogrampercubicmetrecoulomb
+kilogrampercubicmetrecoulombnp
+kilogrampercubicmetrenp
+kilogramperkilomole
+kilogramperkilomolenp
+kilogrampermetre
+kilogrampermetrenp
+kilogrampersecond
+kilogrampersecondcubicmetre
+kilogrampersecondcubicmetrenp
+kilogrampersecondnp
+kilogrampersquaremetre
+kilogrampersquaremetrenp
+kilogrampersquaremetresecond
+kilogrampersquaremetresecondnp
+kilogramsquaremetre
+kilogramsquaremetrenp
+kilogramsquaremetrepersecond
+kilogramsquaremetrepersecondnp
+kilowatthour
+liter
+litre
+lumen
+lumenbase
+lux
+luxbase
+mega
+megad
+meter
+metre
+metrepersecond
+metrepersecondnp
+metrepersquaresecond
+metrepersquaresecondnp
+micro
+microd
+milli
+millid
+minute
+mole
+molepercubicmetre
+molepercubicmetrenp
+nano
+nanod
+neper
+newton
+newtonbase
+newtonmetre
+newtonpercubicmetre
+newtonpercubicmetrenp
+newtonperkilogram
+newtonperkilogramnp
+newtonpermetre
+newtonpermetrenp
+newtonpersquaremetre
+newtonpersquaremetrenp
+NoAMS
+no@qsk
+ohm
+ohmbase
+ohmmetre
+one
+paminute
+pascal
+pascalbase
+pascalsecond
+pasecond
+per
+period@active
+persquaremetresecond
+persquaremetresecondnp
+peta
+petad
+pico
+picod
+power
+@qsk
+quantityskip
+rad
+radian
+radianbase
+radianpersecond
+radianpersecondnp
+radianpersquaresecond
+radianpersquaresecondnp
+reciprocal
+rem
+roentgen
+rp
+rpcubed
+rpcubic
+rpcubicmetreperkilogram
+rpcubicmetrepersecond
+rperminute
+rpersecond
+rpfourth
+rpsquare
+rpsquared
+rpsquaremetreperkilogram
+second
+siemens
+siemensbase
+sievert
+sievertbase
+square
+squared
+squaremetre
+squaremetrepercubicmetre
+squaremetrepercubicmetrenp
+squaremetrepercubicsecond
+squaremetrepercubicsecondnp
+squaremetreperkilogram
+squaremetrepernewtonsecond
+squaremetrepernewtonsecondnp
+squaremetrepersecond
+squaremetrepersecondnp
+squaremetrepersquaresecond
+squaremetrepersquaresecondnp
+steradian
+steradianbase
+tera
+terad
+tesla
+teslabase
+ton
+tonne
+unit
+unitskip
+usk
+volt
+voltbase
+voltpermetre
+voltpermetrenp
+watt
+wattbase
+wattpercubicmetre
+wattpercubicmetrenp
+wattperkilogram
+wattperkilogramnp
+wattpermetrekelvin
+wattpermetrekelvinnp
+wattpersquaremetre
+wattpersquaremetrenp
+wattpersquaremetresteradian
+wattpersquaremetresteradiannp
+weber
+weberbase
+yocto
+yoctod
+yotta
+yottad
+zepto
+zeptod
+zetta
+zettad
diff --git a/dot_vim/ftplugin/latex-suite/dictionaries/dictionary b/dot_vim/ftplugin/latex-suite/dictionaries/dictionary
new file mode 100644
index 0000000..458dc0b
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/dictionaries/dictionary
@@ -0,0 +1,677 @@
+abbrv
+abovedisplayshortskip
+abovedisplayskip
+abstract
+abstract
+abstractname
+acute
+addcontentsline
+address
+addtime
+addtocontents
+addtocounter
+addtolength
+addvspace
+align
+alph
+Alph
+alpha
+amsmath
+amsthm
+and
+appendix
+appendixname
+arabic
+array
+arraycolsep
+arrayrulewidth
+arraystretch
+article
+author
+a4paper
+a5paper
+backmatter
+bar
+bar
+baselineskip
+baselinestretch
+batchmode
+begin
+belowdisplayshortskip
+belowdisplayskip
+bezier
+bf
+bfseries
+bibindent
+bibitem
+bibliography
+bibliographystyle
+bibname
+big
+Big
+Bigg
+bigg
+Biggl
+biggl
+Biggm
+biggm
+Biggr
+biggr
+Bigl
+bigl
+bigm
+Bigm
+bigr
+Bigr
+bigskip
+bigskipamount
+binom
+blg
+boldmath
+boldsymbol
+book
+botfigrule
+bottmofraction
+bottomnumber
+boxedminipage
+bp
+breve
+b5paper
+calc
+calc
+caption
+caption2
+capt-of
+cases
+cc
+ccaption
+ccname
+cdotscenter
+centering
+cercle
+cfrac
+changebar
+chapter
+chapterbib
+chaptername
+check
+cite
+cleardoublepage
+clearpage
+cline
+clock
+closing
+cm
+COLON
+columnsep
+columnseprule
+columnwidth
+contentsline
+contentsname
+copyright
+dag
+dashbox
+date
+dbinom
+dblfigure
+dblfloatpage
+dblfloatsep
+dbltextfloatsep
+dbltopfraction
+dbltopnumber
+dcolumn
+dd
+ddag
+ddot
+ddots
+DeclareMathOperator
+depth
+description
+dfrac
+displaylimits
+displaymath
+displaystyle
+document
+documentclass
+dot
+dotfill
+doublerulesep
+downbracefill
+draft
+dropping
+dywiz
+em
+emph
+empty
+encl
+enclname
+end
+endfloat
+enlargethispage
+enskip
+enspace
+ensuremath
+enumerate
+enumi
+enumii
+enumiii
+enumiv
+eqnarray
+equation
+errorstopmode
+eucal
+eufrak
+evensidemargin
+everyship
+ex
+executivepaper
+expdlist
+extracolsep
+extramark
+fancybox
+fancyhdr
+fbox
+fboxrule
+fboxsep
+figure
+figurename
+file
+filecontents
+final
+flafter
+fleqn
+floatflt
+floatpagefraction
+floatsep
+flushbottom
+flushleft
+flushright
+fnpara
+fnsymbol
+fn2end
+fontenc
+footheight
+footmisc
+footnote
+footnotemark
+footnoterule
+footnotesep
+footnotesize
+footnotetext
+footnpag
+footskip
+frac
+frame
+framebox
+frenchspacing
+frontmatter
+ftnright
+fussy
+gather
+genfrac
+geometry
+glossary
+glossaryentry
+graphicx
+graphpaper
+grave
+hat
+hbox
+headheihgt
+headings
+headsep
+height
+helvet
+hfill
+hhline
+hline
+hrulefill
+hspace
+huge
+Huge
+HUGE
+hyperref
+hyphenation
+ifthen
+in
+include
+includeonly
+indent
+indentfirst
+index
+indexentry
+indexname
+indexspace
+input
+inputenc
+intertext
+intextsep
+invisible
+it
+item
+itemindent
+itemize
+itemsep
+itshape
+jot
+kill
+label
+labelenumi
+labelenumii
+labelenumiii
+labelenumiv
+labelitemi
+labelitemii
+labelitemiii
+labelitemiv
+labelsep
+labelwidth
+landscape
+large
+LARGE
+Large
+LaTeX
+LaTeXe
+latexsym
+ldots
+left
+leftarrowfill
+lefteqn
+leftmargin
+leftmargini
+leftmarginii
+leftmarginiii
+leftmarginiv
+leftmarginv
+leftmarginvi
+leftmark
+legalpaper
+leq
+leqno
+letter
+letterpaper
+letterspace
+lhead
+limits
+line
+linebreak
+linethickness
+linewidth
+list
+listfigurename
+listfiles
+listoffigures
+listoftables
+listparindent
+location
+longtable
+lq
+lrbox
+lscape
+mainmatter
+makeatletter
+makeatother
+makebox
+makeglossary
+makeidx
+makeindex
+makelabel
+maketitle
+manyfoot
+marginpar
+marginparpush
+marginparsep
+marginparwidth
+markboth
+markleft
+markright
+math
+mathbb
+mathbf
+mathbin
+mathcal
+mathclose
+mathfrak
+mathindent
+mathit
+mathnormal
+mathop
+mathopen
+mathord
+mathpunct
+mathrel
+mathrm
+mathscr
+mathsf
+mathstrut
+mathtt
+mathversion
+mbox
+mdseries
+medmuskip
+medskip
+medskipamount
+minipage
+minitoc
+minus
+mkern
+mm
+moreverbatim
+mpfootnote
+mu
+multicol
+multicolumn
+multilanguage
+multiput
+multirow
+myheadings
+nabla
+name
+NeedsTeXFormat
+newcommand
+newcounter
+newenvironment
+newfont
+newlength
+newline
+newpage
+newsavebox
+newtheorem
+nocite
+nofiles
+noindent
+nolimits
+nolinebreak
+nomathsymbols
+nonfrenchspacing
+nonumber
+nopagebreak
+normalfont
+normalsize
+not
+notag
+note
+notitlepage
+nu
+numberline
+numline
+numprint
+oddsidemargin
+oldstyle
+onecolumn
+oneside
+onlynotes
+onlyslides
+openany
+openbib
+opening
+openright
+operatorname
+oval
+overbrace
+overlay
+overleftarrow
+overline
+overrightarrow
+page
+pagebreak
+pagenumbering
+pageref
+pagestyle
+paperheight
+paperwidth
+par
+paragraph
+parbox
+parbox
+parindent
+parsep
+parskip
+part
+partial
+partname
+partopsep
+pauza
+pc
+phi
+pi
+picture
+plain
+PLdateending
+plmath
+PLSlash
+plus
+pmb
+pmod
+polski
+polski
+poptabs
+pounds
+ppauza
+prefixing
+printindex
+protect
+providecommand
+ps
+pt
+pushtabs
+put
+qbezier
+qbeziermax
+qquad
+quad
+quotation
+quote
+raggedbottom
+raggedleft
+raggedright
+ragged2e
+raisebox
+ratio
+real
+ref
+refname
+refstepcounter
+relsize
+renewcommand
+renewenvironment
+report
+reversemarginpar
+rhead
+right
+rightarrowfill
+rightmargin
+rightmark
+rm
+rmfamily
+roman
+Roman
+rotate
+rotating
+rq
+rule
+samepage
+savebox
+sb
+sbox
+sc
+scriptscriptstyle
+scriptsize
+scriptstyle
+scrollmode
+scshape
+secnumdepth
+section
+sectionmark
+see
+seename
+selectfont
+selectlanguage
+setcounter
+setlength
+settime
+settodepth
+settoheight
+settowidth
+sf
+sffamily
+shadethm
+shadow
+shapepar
+shortstack
+showlabels
+sidecap
+signature
+sin
+sl
+slide
+slides
+sloppy
+sloppybar
+slshape
+small
+smallskip
+smallskipamount
+soul
+sp
+space
+sqrt
+ss
+SS
+stackrel
+startbreaks
+stepcounter
+stop
+stopbreaks
+stretch
+strut
+subfigure
+subfigure
+subitem
+subparagraph
+subsection
+subsubitem
+subsubsection
+sum
+supressfloats
+symbol
+symbol
+tabbing
+tabcolsep
+table
+tablename
+tableofcontents
+tabular
+tabularx
+tag
+tan
+tbinom
+telephone
+TeX
+textbf
+textbullet
+textcircled
+textcompwordmark
+textemdash
+textendash
+textexclamdown
+textfloatsep
+textfraction
+textheight
+textit
+textmd
+textnormal
+textperiodcenter
+textquestiondown
+textquotedblleft
+textquotedblright
+textquoteleft
+textquoteright
+textrm
+textsc
+textsf
+textsl
+textstyle
+textsuperscript
+texttt
+textup
+textvisiblespace
+textwidth
+tfrac
+thanks
+the
+thebibliography
+theindex
+theorem
+thepage
+thesection
+theta
+thicklines
+thickmuskip
+thinlines
+thispagestyle
+tilde
+time
+times
+tiny
+title
+titlepage
+tocdepth
+today
+topfigrule
+topfraction
+topmargin
+topmargin
+topmargin
+topsep
+topskip
+topskip
+totalheight
+totalnumber
+trivlist
+tt
+ttfamily
+twocolumn
+twocolumn
+twoside
+typein
+typein
+typeout
+typeout
+ulem
+ulem
+unboldmath
+underbrace
+underline
+unsort
+unsrt
+upbracefill
+upshape
+upshape
+usebox
+usebox
+usecounter
+usefont
+usepackage
+value
+vbox
+vdots
+vec
+vector
+verb
+verb
+verbatim
+verse
+vfill
+visible
+vline
+vmargin
+voffset
+vspace
+widehat
+widetilde
+width
+wrapfig
+xleftarrow
+xrightarrow
+threeparttable
diff --git a/dot_vim/ftplugin/latex-suite/elementmacros.vim b/dot_vim/ftplugin/latex-suite/elementmacros.vim
new file mode 100644
index 0000000..8960a0f
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/elementmacros.vim
@@ -0,0 +1,338 @@
+"=============================================================================
+" File: elementmacros.vim
+" Author: Mikolaj Machowski
+" Created: Tue Apr 23 06:00 PM 2002 PST
+"
+" Description: macros for dimensions/fonts/counters.
+" and various common commands such ref/label/footnote.
+"=============================================================================
+
+nmap <silent> <script> <plug> i
+imap <silent> <script> <C-o><plug> <Nop>
+
+if exists('s:lastElementsLocation') && g:Tex_ElementsMenuLocation == s:lastElementsLocation
+ finish
+endif
+
+if exists('s:lastElementsLocation')
+ exe 'aunmenu '.s:lastElementsLocation.'Font.'
+ exe 'aunmenu '.s:lastElementsLocation.'Dimension.'
+ exe 'aunmenu '.s:lastElementsLocation.'Counters.'
+ exe 'aunmenu '.s:lastElementsLocation.'Various.'
+endif
+
+let s:lastElementsLocation = g:Tex_ElementsMenuLocation
+
+let s:fontMenuLoc = g:Tex_ElementsMenuLocation.'Font.'
+let s:dimensionMenuLoc = g:Tex_ElementsMenuLocation.'Dimension.'
+let s:counterMenuLoc = g:Tex_ElementsMenuLocation.'Counters.'
+let s:variousMenuLoc = g:Tex_ElementsMenuLocation.'Various.'
+
+" ==============================================================================
+" Set up the functions the first time.
+" ==============================================================================
+if !exists('s:definedFuncs') " {{{
+ let s:definedFuncs = 1
+
+ " Tex_RemoveElementMenus: remove the elements menu {{{
+ "
+ function! Tex_RemoveElementMenus()
+ exe 'silent! aunmenu '.s:lastElementsLocation.'Font.'
+ exe 'silent! aunmenu '.s:lastElementsLocation.'Dimension.'
+ exe 'silent! aunmenu '.s:lastElementsLocation.'Counters.'
+ exe 'silent! aunmenu '.s:lastElementsLocation.'Various.'
+ endfunction
+
+ " }}}
+ " Tex_FontFamily: sets up font menus {{{
+ "
+ function! <SID>Tex_FontFamily(font,fam)
+ let vislhs = matchstr(tolower(a:font), '^.\zs.*')
+
+ " avoid redoing imaps and vmaps for every reconfiguration of menus.
+ if !exists('s:doneOnce') && g:Tex_FontMaps
+ exe "vnoremap <silent> ".g:Tex_Leader.vislhs.
+ \" \<C-\\>\<C-N>:call VEnclose('\\text".vislhs."{', '}', '{\\".vislhs.a:fam." ', '}')<CR>"
+ exe 'call IMAP ("'.a:font.'", "\\text'.vislhs.'{<++>}<++>", "tex")'
+ endif
+
+ " menu entry.
+ if g:Tex_Menus && g:Tex_FontMenus
+ let location = s:fontMenuLoc.substitute(a:fam, '^.', '\u&', '').'.'.vislhs.a:fam.'<tab>'.a:font.'\ ('.g:Tex_Leader.vislhs.')'
+ exe "amenu ".location.
+ \" <plug><C-r>=IMAP_PutTextWithMovement('\\text".vislhs."{<++>}<++>')<CR>"
+ exe "vmenu ".location.
+ \" \<C-\\>\<C-N>:call VEnclose('\\text".vislhs."{', '}', '{\\".vislhs.a:fam." ', '}')<CR>"
+ endif
+
+ endfunction
+
+ " }}}
+ " Tex_FontDiacritics: sets up menus for diacritics. {{{
+ "
+ function! <SID>Tex_FontDiacritics(name, rhs)
+ let location = s:fontMenuLoc.'&Diacritics.'.a:name.'<tab>'
+ exe 'amenu '.location.
+ \" <plug><C-r>=IMAP_PutTextWithMovement('\\".a:rhs."{<++>}<++>')<CR>"
+ exe 'vmenu '.location.
+ \" \<C-\\>\<C-n>:call VEnclose('\\".a:rhs."{', '}', '', '')<CR>"
+ endfunction " }}}
+ " Tex_FontSize: sets up size fonts {{{
+ "
+ function! <SID>Tex_FontSize(name)
+ let location = s:fontMenuLoc.'&Size.'.a:name.'<tab>'
+ exe 'amenu '.location." <plug>\\".a:name
+ exe 'vunmenu '.location
+ endfunction " }}}
+ " Tex_Fontfont: sets up the 'font' part of font menus {{{
+ "
+ function! <SID>Tex_Fontfont(desc, lhs)
+ let location = s:fontMenuLoc.'&font.'.a:desc.'<tab>'
+ exe "amenu ".location." <plug><C-r>=IMAP_PutTextWithMovement('".a:lhs."')<CR>"
+ exe "vunmenu ".location
+ endfunction " }}}
+ " Tex_DimMenus: set up dimension menus {{{
+ function! <SID>Tex_DimMenus(submenu, rhs)
+ let location = s:dimensionMenuLoc.a:submenu.'.'.a:rhs.'<tab>'
+ exe "amenu ".location." <plug>\\".a:rhs
+ exe "vunmenu ".location
+ endfunction " }}}
+ " Tex_CounterMenus: set up counters menus {{{
+ function! <SID>Tex_CounterMenus(submenu, rhs)
+ let location = s:counterMenuLoc.a:submenu.'.'.a:rhs.'<tab>'
+ exe "amenu ".location." <plug>\\".a:rhs
+ exe "vunmenu ".location
+ endfunction " }}}
+ " Tex_VariousMenus: set up various menus {{{
+ function! <SID>Tex_VariousMenus(desc, lhs)
+ let location = s:variousMenuLoc.a:desc.'<tab>'
+ exe "amenu ".location." <plug><C-r>=IMAP_PutTextWithMovement('".a:lhs."')<CR>"
+ exe "vunmenu ".location
+ endfunction " }}}
+endif
+" }}}
+
+" ==============================================================================
+" Fonts
+" ==============================================================================
+" series/family/shape {{{
+call <SID>Tex_FontFamily("FBF","series")
+call <SID>Tex_FontFamily("FMD","series")
+
+call <SID>Tex_FontFamily("FTT","family")
+call <SID>Tex_FontFamily("FSF","family")
+call <SID>Tex_FontFamily("FRM","family")
+
+call <SID>Tex_FontFamily("FUP","shape")
+call <SID>Tex_FontFamily("FSL","shape")
+call <SID>Tex_FontFamily("FSC","shape")
+call <SID>Tex_FontFamily("FIT","shape")
+
+" the \emph is special.
+if g:Tex_FontMaps | exe "vnoremap <silent> ".g:Tex_Leader."em \<C-\\>\<C-N>:call VEnclose('\\emph{', '}', '{\\em', '\\/}')<CR>" | endif
+if g:Tex_FontMaps | exe 'call IMAP ("FEM", "\\emph{<++>}<++>", "tex")' | endif
+
+" }}}
+if g:Tex_Menus && g:Tex_FontMenus
+ " {{{ diacritics
+ call <SID>Tex_FontDiacritics('Acute', '"')
+ call <SID>Tex_FontDiacritics('Breve', 'u')
+ call <SID>Tex_FontDiacritics('Circle', 'r')
+ call <SID>Tex_FontDiacritics('Circumflex', '^')
+ call <SID>Tex_FontDiacritics('Umlaut', '"')
+ call <SID>Tex_FontDiacritics('HUmlaut', 'H')
+ call <SID>Tex_FontDiacritics('Dot\ over', '.')
+ call <SID>Tex_FontDiacritics('Grave', '`')
+ call <SID>Tex_FontDiacritics('Hacek', 'v')
+ call <SID>Tex_FontDiacritics('Makron', '=')
+ call <SID>Tex_FontDiacritics('Tilde', '~')
+ call <SID>Tex_FontDiacritics('Underline', 'b')
+ call <SID>Tex_FontDiacritics('Cedille', 'c')
+ call <SID>Tex_FontDiacritics('Dot\ under', ' ')
+ call <SID>Tex_FontDiacritics('Ligature', 't')
+ " }}}
+ " {{{ Si&ze.
+ call <SID>Tex_FontSize('tiny')
+ call <SID>Tex_FontSize('scriptsize')
+ call <SID>Tex_FontSize('footnotesize')
+ call <SID>Tex_FontSize('small')
+ call <SID>Tex_FontSize('normalsize')
+ call <SID>Tex_FontSize('large')
+ call <SID>Tex_FontSize('Large')
+ call <SID>Tex_FontSize('LARGE')
+ call <SID>Tex_FontSize('huge')
+ call <SID>Tex_FontSize('Huge')
+ " }}}
+ " {{{ &font.
+ call s:Tex_Fontfont('fontencoding{}', '\fontencoding{<++>}<++>')
+ call s:Tex_Fontfont('fontfamily{qtm}', '\fontfamily{<++>}<++>')
+ call s:Tex_Fontfont('fontseries{m\ b\ bx\ sb\ c}', '\fontseries{<++>}<++>')
+ call s:Tex_Fontfont('fontshape{n\ it\ sl\ sc\ ui}', '\fontshape{<++>}<++>')
+ call s:Tex_Fontfont('fontsize{}{}', '\fontsize{<++>}{<++>}<++>')
+ call s:Tex_Fontfont('selectfont', '\selectfont ')
+ " }}}
+endif
+
+" ==============================================================================
+" Dimensions
+" ==============================================================================
+if g:Tex_Menus
+ " {{{ Static1
+ call <SID>Tex_DimMenus('Static1', 'arraycolsep')
+ call <SID>Tex_DimMenus('Static1', 'arrayrulewidth')
+ call <SID>Tex_DimMenus('Static1', 'bibindent')
+ call <SID>Tex_DimMenus('Static1', 'columnsep')
+ call <SID>Tex_DimMenus('Static1', 'columnseprule')
+ call <SID>Tex_DimMenus('Static1', 'columnwidth')
+ call <SID>Tex_DimMenus('Static1', 'doublerulesep')
+ call <SID>Tex_DimMenus('Static1', 'evensidemargin')
+ call <SID>Tex_DimMenus('Static1', 'fboxrule')
+ call <SID>Tex_DimMenus('Static1', 'fboxsep')
+ call <SID>Tex_DimMenus('Static1', 'footheight')
+ call <SID>Tex_DimMenus('Static1', 'footnotesep')
+ call <SID>Tex_DimMenus('Static1', 'footskip')
+ call <SID>Tex_DimMenus('Static1', 'headheight')
+ call <SID>Tex_DimMenus('Static1', 'headsep')
+ call <SID>Tex_DimMenus('Static1', 'itemindent')
+ call <SID>Tex_DimMenus('Static1', 'labelsep')
+ call <SID>Tex_DimMenus('Static1', 'labelwidth')
+ call <SID>Tex_DimMenus('Static1', 'leftmargin')
+ call <SID>Tex_DimMenus('Static1', 'leftmargini')
+ call <SID>Tex_DimMenus('Static1', 'leftmarginii')
+ call <SID>Tex_DimMenus('Static1', 'leftmarginiii')
+ call <SID>Tex_DimMenus('Static1', 'leftmarginiv')
+ call <SID>Tex_DimMenus('Static1', 'leftmarginv')
+ call <SID>Tex_DimMenus('Static1', 'leftmarginvi')
+ call <SID>Tex_DimMenus('Static1', 'linewidth')
+ call <SID>Tex_DimMenus('Static1', 'listparindent')
+ call <SID>Tex_DimMenus('Static1', 'marginparpush')
+ call <SID>Tex_DimMenus('Static1', 'marginparsep')
+ call <SID>Tex_DimMenus('Static1', 'marginparwidth')
+ call <SID>Tex_DimMenus('Static1', 'mathindent')
+ call <SID>Tex_DimMenus('Static1', 'oddsidemargin')
+ " }}}
+ " {{{ Static2
+ call <SID>Tex_DimMenus('Static2', 'paperheight')
+ call <SID>Tex_DimMenus('Static2', 'paperwidth')
+ call <SID>Tex_DimMenus('Static2', 'parindent')
+ call <SID>Tex_DimMenus('Static2', 'rightmargin')
+ call <SID>Tex_DimMenus('Static2', 'tabbingsep')
+ call <SID>Tex_DimMenus('Static2', 'tabcolsep')
+ call <SID>Tex_DimMenus('Static2', 'textheight')
+ call <SID>Tex_DimMenus('Static2', 'textwidth')
+ call <SID>Tex_DimMenus('Static2', 'topmargin')
+ call <SID>Tex_DimMenus('Static2', 'unitlength')
+ " }}}
+ " {{{ Dynamic
+ call <SID>Tex_DimMenus('Dynamic', 'abovedisplayshortskip')
+ call <SID>Tex_DimMenus('Dynamic', 'abovedisplayskip')
+ call <SID>Tex_DimMenus('Dynamic', 'baselineskip')
+ call <SID>Tex_DimMenus('Dynamic', 'belowdisplayshortskip')
+ call <SID>Tex_DimMenus('Dynamic', 'belowdisplayskip')
+ call <SID>Tex_DimMenus('Dynamic', 'dblfloatsep')
+ call <SID>Tex_DimMenus('Dynamic', 'dbltextfloatsep')
+ call <SID>Tex_DimMenus('Dynamic', 'floatsep')
+ call <SID>Tex_DimMenus('Dynamic', 'intextsep')
+ call <SID>Tex_DimMenus('Dynamic', 'itemsep')
+ call <SID>Tex_DimMenus('Dynamic', 'parsep')
+ call <SID>Tex_DimMenus('Dynamic', 'parskip')
+ call <SID>Tex_DimMenus('Dynamic', 'partopsep')
+ call <SID>Tex_DimMenus('Dynamic', 'textfloatsep')
+ call <SID>Tex_DimMenus('Dynamic', 'topsep')
+ call <SID>Tex_DimMenus('Dynamic', 'topskip')
+ " }}}
+ " {{{ Change
+ call <SID>Tex_DimMenus('Change', 'setlength')
+ call <SID>Tex_DimMenus('Change', 'addtolength')
+ call <SID>Tex_DimMenus('Change', 'settoheight')
+ call <SID>Tex_DimMenus('Change', 'settowidth')
+ call <SID>Tex_DimMenus('Change', 'settolength')
+ " }}}
+endif
+
+" ==============================================================================
+" Counters
+" ==============================================================================
+if g:Tex_Menus
+ " Counters {{{
+ call <SID>Tex_CounterMenus('Counters', 'bottomnumber')
+ call <SID>Tex_CounterMenus('Counters', 'chapter')
+ call <SID>Tex_CounterMenus('Counters', 'dbltopnumber')
+ call <SID>Tex_CounterMenus('Counters', 'enumi')
+ call <SID>Tex_CounterMenus('Counters', 'enumii')
+ call <SID>Tex_CounterMenus('Counters', 'enumiii')
+ call <SID>Tex_CounterMenus('Counters', 'enumiv')
+ call <SID>Tex_CounterMenus('Counters', 'equation')
+ call <SID>Tex_CounterMenus('Counters', 'figure')
+ call <SID>Tex_CounterMenus('Counters', 'footnote')
+ call <SID>Tex_CounterMenus('Counters', 'mpfootnote')
+ call <SID>Tex_CounterMenus('Counters', 'page')
+ call <SID>Tex_CounterMenus('Counters', 'paragraph')
+ call <SID>Tex_CounterMenus('Counters', 'part')
+ call <SID>Tex_CounterMenus('Counters', 'secnumdepth')
+ call <SID>Tex_CounterMenus('Counters', 'section')
+ call <SID>Tex_CounterMenus('Counters', 'subparagraph')
+ call <SID>Tex_CounterMenus('Counters', 'subsection')
+ call <SID>Tex_CounterMenus('Counters', 'subsubsection')
+ call <SID>Tex_CounterMenus('Counters', 'table')
+ call <SID>Tex_CounterMenus('Counters', 'tocdepth')
+ call <SID>Tex_CounterMenus('Counters', 'topnumber')
+ call <SID>Tex_CounterMenus('Counters', 'totalnumber')
+ " }}}
+ " theCounters {{{
+ call <SID>Tex_CounterMenus('theCounters', 'thebottomnumber')
+ call <SID>Tex_CounterMenus('theCounters', 'thechapter')
+ call <SID>Tex_CounterMenus('theCounters', 'thedbltopnumber')
+ call <SID>Tex_CounterMenus('theCounters', 'theenumi')
+ call <SID>Tex_CounterMenus('theCounters', 'theenumii')
+ call <SID>Tex_CounterMenus('theCounters', 'theenumiii')
+ call <SID>Tex_CounterMenus('theCounters', 'theenumiv')
+ call <SID>Tex_CounterMenus('theCounters', 'theequation')
+ call <SID>Tex_CounterMenus('theCounters', 'thefigure')
+ call <SID>Tex_CounterMenus('theCounters', 'thefootnote')
+ call <SID>Tex_CounterMenus('theCounters', 'thempfootnote')
+ call <SID>Tex_CounterMenus('theCounters', 'thepage')
+ call <SID>Tex_CounterMenus('theCounters', 'theparagraph')
+ call <SID>Tex_CounterMenus('theCounters', 'thepart')
+ call <SID>Tex_CounterMenus('theCounters', 'thesecnumdepth')
+ call <SID>Tex_CounterMenus('theCounters', 'thesection')
+ call <SID>Tex_CounterMenus('theCounters', 'thesubparagraph')
+ call <SID>Tex_CounterMenus('theCounters', 'thesubsection')
+ call <SID>Tex_CounterMenus('theCounters', 'thesubsubsection')
+ call <SID>Tex_CounterMenus('theCounters', 'thetable')
+ call <SID>Tex_CounterMenus('theCounters', 'thetocdepth')
+ call <SID>Tex_CounterMenus('theCounters', 'thetopnumber')
+ call <SID>Tex_CounterMenus('theCounters', 'thetotalnumber')
+ " }}}
+ " Type {{{
+ call <SID>Tex_CounterMenus('Type', 'alph')
+ call <SID>Tex_CounterMenus('Type', 'Alph')
+ call <SID>Tex_CounterMenus('Type', 'arabic')
+ call <SID>Tex_CounterMenus('Type', 'roman')
+ call <SID>Tex_CounterMenus('Type', 'Roman')
+ " }}}
+endif
+
+" ==============================================================================
+" Various
+" ==============================================================================
+if g:Tex_Menus
+ " Various {{{
+ call <SID>Tex_VariousMenus('ref{}' , '\ref{<++>}<++>')
+ call <SID>Tex_VariousMenus('pageref{}' , '\pageref{<++>}<++>')
+ call <SID>Tex_VariousMenus('label{}' , '\label{<++>}<++>')
+ call <SID>Tex_VariousMenus('footnote{}' , '\footnote{<++>}<++>')
+ call <SID>Tex_VariousMenus('footnotemark{}', '\footnotemark{<++>}<++>')
+ call <SID>Tex_VariousMenus('footnotemark{}', '\footnotetext{<++>}<++>')
+ call <SID>Tex_VariousMenus('cite{}' , '\cite{<++>}<++>')
+ call <SID>Tex_VariousMenus('nocite{}' , '\nocite{<++>}<++>')
+ " }}}
+endif
+
+if g:Tex_CatchVisMapErrors
+ exe "vnoremap ".g:Tex_Leader." :\<C-u>call ExecMap('".g:Tex_Leader."', 'v')\<CR>"
+endif
+" this is for avoiding reinclusion of imaps from next time on.
+let s:doneOnce = 1
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
diff --git a/dot_vim/ftplugin/latex-suite/envmacros.vim b/dot_vim/ftplugin/latex-suite/envmacros.vim
new file mode 100644
index 0000000..2f41a27
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/envmacros.vim
@@ -0,0 +1,1167 @@
+"=============================================================================
+" File: envmacros.vim
+" Author: Mikolaj Machowski
+" Created: Tue Apr 23 08:00 PM 2002 PST
+" CVS Header: $Id: envmacros.vim 997 2006-03-20 09:45:45Z srinathava $
+" Description: mappings/menus for environments.
+"=============================================================================
+
+if !g:Tex_EnvironmentMaps && !g:Tex_EnvironmentMenus
+ finish
+endif
+
+exe 'so '.expand('<sfile>:p:h').'/wizardfuncs.vim'
+
+nmap <silent> <script> <plug> i
+imap <silent> <script> <C-o><plug> <Nop>
+
+" Define environments for IMAP evaluation " {{{
+let s:figure = "\\begin{figure}[<+htpb+>]\<cr>\\begin{center}\<cr>\\psfig{figure=<+eps file+>}\<cr>\\end{center}\<cr>\\caption{<+caption text+>}\<cr>\\label{fig:<+label+>}\<cr>\\end{figure}<++>"
+let s:figure_graphicx = "\\begin{figure}[<+htpb+>]\<cr>\\begin{center}\<cr>\\includegraphics{<+file+>}\<cr>\\end{center}\<cr>\\caption{<+caption text+>}\<cr>\\label{fig:<+label+>}\<cr>\\end{figure}<++>"
+let s:minipage = "\\begin{minipage}[<+tb+>]{<+width+>}\<cr><++>\<cr>\\end{minipage}<++>"
+let s:picture = "\\begin{picture}(<+width+>, <+height+>)(<+xoff+>,<+yoff+>)\<cr>\\put(<+xoff+>,<+yoff+>){\\framebox(<++>,<++>){<++>}}\<cr>\\end{picture}<++>"
+let s:list = "\\begin{list}{<+label+>}{<+spacing+>}\<cr>\\item <++>\<cr>\\end{list}<++>"
+let s:table = "\\begin{table}\<cr>\\centering\<cr>\\begin{tabular}{<+dimensions+>}\<cr><++>\<cr>\\end{tabular}\<cr>\\caption{<+Caption text+>}\<cr>\\label{tab:<+label+>}\<cr>\\end{table}<++>"
+let s:array = "\\left<++>\<cr>\\begin{array}{<+dimension+>}\<cr><+elements+>\<cr>\\end{array}\<cr>\\right<++>"
+let s:description ="\\begin{description}\<cr>\\item[<+label+>]<++>\<cr>\\end{description}<++>"
+let s:document = "\\documentclass[<+options+>]{<+class+>}\<cr>\<cr>\\begin{document}\<cr><++>\<cr>\\end{document}"
+let s:tabular = "\\begin{tabular}[<+hbtp+>]{<+format+>}\<cr><++>\<cr>\\end{tabular}"
+let s:tabular_star = "\\begin{tabular*}[<+hbtp+>]{<+format+>}\<cr><++>\<cr>\\end{tabular*}"
+let s:frame = "\\begin{frame}{<+title>}\<cr><++>\<cr>\\end{frame}<++>"
+
+" }}}
+" define environments with special behavior in line wise selection. {{{
+if !exists('s:vis_center_left')
+ let s:vis_center_left = '\centerline{'
+ let s:vis_center_right = '}'
+
+ let s:vis_verbatim_left = '\verb\|'
+ let s:vis_verbatim_right = '\|'
+
+ let s:vis_flushright_left = '{\raggedright '
+ let s:vis_flushright_right = '}'
+
+ let s:vis_fushleft_left = '{\raggedleft '
+ let s:vis_fushleft_right = '}'
+
+ let s:vis_lrbox_left = '\sbox{'
+ let s:vis_lrbox_right = '}'
+endif
+" }}}
+" Tex_EnvMacros: sets up maps and menus for environments {{{
+" Description:
+function! <SID>Tex_EnvMacros(lhs, submenu, name)
+
+ let extra = ''
+ if a:submenu =~ 'Lists'
+ let extra = '\item '
+ endif
+
+ let vright = ''
+ let vleft = ''
+ if exists('s:vis_'.a:name.'_right')
+ let vright = s:vis_{a:name}_right
+ let vleft = s:vis_{a:name}_left
+ endif
+ let vrhs = "\<C-\\>\<C-N>:call VEnclose('".vleft."', '".vright."', '\\begin{".a:name."}', '\\end{".a:name."}')\<CR>"
+ let location = g:Tex_EnvMenuLocation.a:submenu.a:name.'<tab>'
+
+ if a:lhs != ''
+
+ let vlhs = g:Tex_Leader2.substitute(tolower(a:lhs), '^.', '', '')
+ let location = location.a:lhs.'\ ('.vlhs.')'
+
+ if g:Tex_EnvironmentMaps && !exists('s:doneOnce')
+ call IMAP(a:lhs, "\<C-r>=Tex_PutEnvironment('".a:name."')\<CR>", 'tex')
+ exec 'vnoremap <silent> '.vlhs.' '.vrhs
+ endif
+
+ endif
+
+ if g:Tex_Menus && g:Tex_EnvironmentMenus && has("gui_running")
+ exe 'amenu '.location.' <plug><C-r>=Tex_DoEnvironment("'.a:name.'")<CR>'
+ exe 'vmenu '.location.' '.vrhs
+ endif
+
+endfunction
+
+" }}}
+" Tex_SpecialMacros: macros with special right hand sides {{{
+" Description:
+function! <SID>Tex_SpecialMacros(lhs, submenu, name, irhs, ...)
+
+ let wiz = 1
+ if a:0 > 0 && a:1 == 0
+ let wiz = 0
+ endif
+
+ let location = g:Tex_EnvMenuLocation.a:submenu.a:name
+
+ let vright = ''
+ let vleft = ''
+ if exists('s:vis_'.a:name.'_right')
+ let vright = s:vis_{a:name}_right
+ let vleft = s:vis_{a:name}_left
+ endif
+ let vrhs = "\<C-\\>\<C-N>:call VEnclose('".vleft."', '".vright."', '\\begin{".a:name."}', '\\end{".a:name."}')\<CR>"
+
+ if a:lhs != ''
+
+ let vlhs = g:Tex_Leader2.substitute(tolower(a:lhs), '^.', '', '')
+ let location = location.'<tab>'.a:lhs.'\ ('.vlhs.')'
+
+ if g:Tex_EnvironmentMaps && !exists('s:doneOnce')
+ call IMAP(a:lhs, a:irhs, 'tex')
+ exec 'vnoremap '.vlhs.' '.vrhs
+ endif
+
+ endif
+
+ if g:Tex_Menus && g:Tex_EnvironmentMenus
+ if wiz
+ exe 'amenu '.location.' <plug><C-r>=Tex_DoEnvironment("'.a:name.'")<CR>'
+ else
+ exe 'amenu '.location." <plug><C-r>=IMAP_PutTextWithMovement('".a:irhs."')<CR>"
+ endif
+ exe 'vmenu '.location.' '.vrhs
+ endif
+
+endfunction " }}}
+" Tex_SectionMacros: creates section maps and menus {{{
+" Description:
+function! <SID>Tex_SectionMacros(lhs, name)
+
+ let vlhs = g:Tex_Leader2.substitute(tolower(a:lhs), '^.', '', '')
+ let vrhs = "\<C-\\>\<C-N>:call VEnclose('\\".a:name."{', '}', '', '')<CR>"
+
+ if g:Tex_SectionMaps && !exists('s:doneOnce')
+ exe 'vnoremap '.vlhs.' '.vrhs
+ call IMAP (a:lhs, "\\".a:name.'{<++>}<++>', 'tex')
+ endif
+
+ if g:Tex_Menus && g:Tex_SectionMenus
+ let location = g:Tex_EnvMenuLocation.'Sections.'.a:name.'<tab>'.a:lhs.'\ ('.vlhs.')'
+ let advlocation = g:Tex_EnvMenuLocation.'Sections.Advanced.'.a:name
+
+ let irhs = "\<C-r>=IMAP_PutTextWithMovement('\\".a:name."{<++>}<++>')\<CR>"
+
+ let advirhs = "\<C-r>=Tex_InsSecAdv('".a:name."')\<CR>"
+ let advvrhs = "\<C-\\>\<C-N>:call Tex_VisSecAdv('".a:name."')\<CR>"
+
+ exe 'amenu '.advlocation.' <plug>'.advirhs
+ exe 'vnoremenu '.advlocation." ".advvrhs
+
+ exe 'amenu '.location.' <plug>'.irhs
+ exe 'vnoremenu '.location." ".vrhs
+ endif
+endfunction " }}}
+
+" NewEnvironments {{{
+call s:Tex_SpecialMacros('', '', 'newenvironment', '\newenvironment{<++>}[<++>][<++>]{<++>}{<++>}<++>', 0)
+call s:Tex_SpecialMacros('', '', 'newenvironment*', '\newenvironment*{<++>}[<++>][<++>]{<++>}{<++>}<++>', 0)
+call s:Tex_SpecialMacros('', '', 'renewenvironment', '\renewenvironment{<++>}[<++>][<++>]{<++>}{<++>}<++>', 0)
+call s:Tex_SpecialMacros('', '', 'renewenvironment*', '\renewenvironment*{<++>}[<++>][<++>]{<++>}{<++>}<++>', 0)
+call s:Tex_SpecialMacros('', '', '-sepenv0-', ' :', 0)
+" }}}
+" Environments specific commands {{{
+call s:Tex_SpecialMacros('', 'Env&Commands.&Lists.', '&item', '\item', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Lists.', 'i&tem[]', '\item[<++>]<++>', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Lists.', '&bibitem{}', '\bibitem{<++>}<++>', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', '\\&=', '\=', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', '\\&>', '\>', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', '&\\\\', '\\', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', '\\&+', '\+', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', '\\&-', '\-', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', "\\\'", "\\\'", 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', '\\&`', '\`', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', '\\&kill', '\kill', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', '&makron\ \\CHAR=', '\<++>=<++>', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', "&aigu\ \\CHAR\'", "\\<++>\'<++>", 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', '&grave\ \\CHAR`', '\<++>`<++>', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', 'p&ushtabs', '\pushtabs', 0)
+call s:Tex_SpecialMacros('', 'Env&Commands.&Tabbing.', 'p&optabs', '\poptabs', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.&Tabular.', '&hline', '\hline', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.&Tabular.', '&cline', '\cline', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.&Tabular.', '&\&', '&', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.&Tabular.', '&\\\\', '\\', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.&Tabular.', '&multicolumn{}{}{}', '\multicolumn{<++>}{<++>}{<++>}<++>', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.Le&tter.', '&makelabels', '\makelabels', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.Le&tter.', '&address', '\address', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.Le&tter.', '&signature', '\signature', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.Le&tter.', '&date', '\date', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.Le&tter.', '-sepenva4-', ' :', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.Le&tter.', '&opening{}', '\opening{<++>}<++>', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.Le&tter.', '&closing{}', '\closing{<++>}<++>', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.Le&tter.', '&ps{}', '\ps{<++>}<++>', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.Le&tter.', 'cc&{}', '\cc{<++>}<++>', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.&Slides.', '&onlyslides{}', '\onlyslides{<++>}<++>', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.&Slides.', '&onlynotes{}', '\onlynotes{<++>}<++>', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.&Slides.', '-sepenva5-', ' :', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.&Slides.', '&invisible', '\invisible', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.&Slides.', '&visible', '\visible', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.&Slides.', '&settime', '\settime', 0)
+call s:Tex_SpecialMacros('', 'EnvCommands.&Slides.', '&addtime', '\addtime', 0)
+call s:Tex_SpecialMacros('', '', '-sepenv0-', ' :', 0)
+" }}}
+" Lists {{{
+call s:Tex_SpecialMacros('ELI', '&Lists.', 'list', s:list)
+call s:Tex_SpecialMacros('EDE', '&Lists.', 'description', s:description)
+call s:Tex_EnvMacros('EEN', '&Lists.', 'enumerate')
+call s:Tex_EnvMacros('EIT', '&Lists.', 'itemize')
+call s:Tex_EnvMacros('ETI', '&Lists.', 'theindex')
+call s:Tex_EnvMacros('ETL', '&Lists.', 'trivlist')
+" }}}
+" Tables {{{
+call s:Tex_SpecialMacros('ETE', '&Tables.', 'table', s:table)
+call s:Tex_EnvMacros('ETG', '&Tables.', 'tabbing')
+call s:Tex_EnvMacros('', '&Tables.', 'table*')
+call s:Tex_EnvMacros('', '&Tables.', 'table2')
+call s:Tex_SpecialMacros('ETR', '&Tables.', 'tabular', s:tabular)
+call s:Tex_SpecialMacros('', '&Tables.', 'tabular*', s:tabular_star)
+" }}}
+" Math {{{
+call s:Tex_EnvMacros('EAR', '&Math.', 'array')
+call s:Tex_EnvMacros('EDM', '&Math.', 'displaymath')
+call s:Tex_EnvMacros('EEA', '&Math.', 'eqnarray')
+call s:Tex_EnvMacros('', '&Math.', 'eqnarray*')
+call s:Tex_EnvMacros('EEQ', '&Math.', 'equation')
+call s:Tex_EnvMacros('EMA', '&Math.', 'math')
+" }}}
+" Structure {{{
+call s:Tex_SpecialMacros('EAR', 'Math.', 'array', s:array)
+call s:Tex_EnvMacros('EAB', '&Structure.', 'abstract')
+call s:Tex_EnvMacros('EAP', '&Structure.', 'appendix')
+call s:Tex_EnvMacros('ECE', '&Structure.', 'center')
+call s:Tex_EnvMacros('EDO', '&Structure.', 'document')
+call s:Tex_EnvMacros('EFC', '&Structure.', 'filecontents')
+call s:Tex_EnvMacros('', '&Structure.', 'filecontents*')
+call s:Tex_EnvMacros('EFL', '&Structure.', 'flushleft')
+call s:Tex_EnvMacros('EFR', '&Structure.', 'flushright')
+call s:Tex_EnvMacros('EQN', '&Structure.', 'quotation')
+call s:Tex_EnvMacros('EQE', '&Structure.', 'quote')
+call s:Tex_EnvMacros('ESB', '&Structure.', 'sloppybar')
+call s:Tex_EnvMacros('ETI', '&Structure.', 'theindex')
+call s:Tex_EnvMacros('ETP', '&Structure.', 'titlepage')
+call s:Tex_EnvMacros('EVM', '&Structure.', 'verbatim')
+call s:Tex_EnvMacros('', '&Structure.', 'verbatim*')
+call s:Tex_EnvMacros('EVE', '&Structure.', 'verse')
+call s:Tex_EnvMacros('ETB', '&Structure.', 'thebibliography')
+call s:Tex_SpecialMacros('', '&Structure.', '-sepstruct0-', ':', 0)
+call s:Tex_EnvMacros('ENO', '&Structure.', 'note')
+call s:Tex_EnvMacros('EOV', '&Structure.', 'overlay')
+call s:Tex_EnvMacros('ESL', '&Structure.', 'slide')
+" }}}
+" Sections {{{
+call s:Tex_SectionMacros('SPA', 'part')
+call s:Tex_SectionMacros('SCH', 'chapter')
+call s:Tex_SectionMacros('SSE', 'section')
+call s:Tex_SectionMacros('SSS', 'subsection')
+call s:Tex_SectionMacros('SS2', 'subsubsection')
+call s:Tex_SectionMacros('SPG', 'paragraph')
+call s:Tex_SectionMacros('SSP', 'subparagraph')
+" }}}
+" Miscellaneous {{{
+call s:Tex_SpecialMacros('', '', '-sepenv1-', ' :', 0)
+call s:Tex_SpecialMacros('EFI', '', 'figure', "\<C-r>=Tex_PutEnvironment('figure')\<CR>")
+call s:Tex_EnvMacros('', '', 'figure*')
+call s:Tex_EnvMacros('ELR', '', 'lrbox')
+call s:Tex_SpecialMacros('EMP', '', 'minipage', s:minipage)
+call s:Tex_SpecialMacros('EPI', '', 'picture', s:picture)
+" }}}
+
+if g:Tex_CatchVisMapErrors
+ exe 'vnoremap '.g:Tex_Leader2." :\<C-u>call ExecMap('".g:Tex_Leader2."', 'v')\<CR>"
+endif
+
+" ==============================================================================
+" Specialized functions for various environments
+"
+" All these functions are to be used as:
+"
+" inoremap <lhs> <C-r>=Tex_itemize('enumerate')<CR>
+" nnoremap <lhs> i<C-r>=Tex_itemize('enumerate')<CR>
+"
+" and so on...
+" ==============================================================================
+" Tex_itemize: {{{
+function! Tex_itemize(env)
+ return IMAP_PutTextWithMovement('\begin{'.a:env."}\<cr>\\item <++>\<cr>\\end{".a:env."}<++>")
+endfunction
+" }}}
+" Tex_description: {{{
+function! Tex_description(env)
+ if g:Tex_UseMenuWizard == 1
+ let itlabel = input('(Optional) Item label? ')
+ if itlabel != ''
+ let itlabel = '['.itlabel.']'
+ endif
+ return IMAP_PutTextWithMovement("\\begin{description}\<cr>\\item".itlabel." <++>\<cr>\\end{description}<++>")
+ else
+ return IMAP_PutTextWithMovement(s:description)
+ endif
+endfunction
+" }}}
+" Tex_figure: {{{
+function! Tex_figure(env)
+ if g:Tex_UseMenuWizard == 1
+ let flto = input('Float to (htbp)? ')
+ let caption = input('Caption? ')
+ let center = input('Center ([y]/n)? ')
+ let label = input('Label (for use with \ref)? ')
+ " additional to AUC Tex since my pics are usually external files
+ let pic = input('Name of Pic-File? ')
+ if flto != ''
+ let flto = '['.flto."]\<cr>"
+ else
+ let flto = "\<cr>"
+ endif
+ if pic != ''
+ let pic = '\input{'.pic."}\<cr>"
+ else
+ let pic = "<++>\<cr>"
+ endif
+ if caption != ''
+ let caption = '\caption{'.caption."}\<cr>"
+ endif
+ if label != ''
+ let label = '\label{fig:'.label."}\<cr>"
+ endif
+ if center == 'y'
+ let centr = '\begin{center}' . "\<cr>"
+ let centr = centr . pic
+ let centr = centr . caption
+ let centr = centr . label
+ let centr = centr . '\end{center}' . "\<cr>"
+ else
+ let centr = pic
+ let centr = centr . caption
+ let centr = centr . label
+ endif
+ let figure = '\begin{'.a:env.'}'.flto
+ let figure = figure . centr
+ let figure = figure . '\end{'.a:env.'}'
+ return IMAP_PutTextWithMovement(figure)
+ else
+ if g:Tex_package_detected =~ '\<graphicx\>'
+ return IMAP_PutTextWithMovement(s:figure_graphicx)
+ else
+ return IMAP_PutTextWithMovement(s:figure)
+ endif
+ endif
+endfunction
+" }}}
+" Tex_table: {{{
+function! Tex_table(env)
+ if g:Tex_UseMenuWizard == 1
+ let flto = input('Float to (htbp)? ')
+ let caption = input('Caption? ')
+ let center = input('Center (y/n)? ')
+ let label = input('Label? ')
+ if flto != ''
+ let flto ='['.flto."]\<cr>"
+ else
+ let flto = ''
+ endif
+ let ret='\begin{table}'.flto
+ if center == 'y'
+ let ret=ret."\\begin{center}\<cr>"
+ endif
+ let foo = '\begin{tabular}'
+ let pos = input('(Optional) Position (t b)? ')
+ if pos != ''
+ let foo = foo.'['.pos.']'
+ else
+ let foo = foo."\<cr>"
+ endif
+ let format = input("Format ( l r c p{width} | @{text} )? ")
+ if format == ''
+ let format = '<++>'
+ endif
+ let ret = ret.foo.'{'.format."}\<cr><++>\<cr>\\end{tabular}<++>\<cr>"
+ if center == 'y'
+ let ret=ret."\\end{center}\<cr>"
+ endif
+ if caption != ''
+ let ret=ret.'\caption{'.caption."}\<cr>"
+ endif
+ if label != ''
+ let ret=ret.'\label{tab:'.label."}\<cr>"
+ endif
+ let ret=ret.'\end{table}<++>'
+ return IMAP_PutTextWithMovement(ret)
+ else
+ return IMAP_PutTextWithMovement(s:table)
+ endif
+endfunction
+" }}}
+" Tex_tabular: {{{
+function! Tex_tabular(env)
+ if g:Tex_UseMenuWizard == 1
+ let pos = input('(Optional) Position (t b)? ')
+ let format = input("Format ( l r c p{width} | @{text} )? ")
+ if pos != ''
+ let pos = '['.pos.']'
+ endif
+ if format != ''
+ let format = '{'.format.'}'
+ endif
+ return IMAP_PutTextWithMovement('\begin{'.a:env.'}'.pos.format."\<cr> \<cr>\\end{".a:env.'}<++>')
+ else
+ return IMAP_PutTextWithMovement('\begin{'.a:env.'}[<+position+>]{<+format+>}'."\<cr><++>\<cr>\\end{".a:env.'}<++>')
+ endif
+endfunction
+" }}}
+" Tex_eqnarray: {{{
+function! Tex_eqnarray(env)
+ if g:Tex_UseMenuWizard == 1
+ if a:env !~ '\*'
+ let label = input('Label? ')
+ if label != ''
+ let arrlabel = '\label{'.label."}\<cr>"
+ else
+ let arrlabel = ''
+ endif
+ else
+ let arrlabel = ''
+ endif
+ else
+ if a:env !~ '\*'
+ let arrlabel = "\\label{<++>}\<cr>"
+ else
+ let arrlabel = ""
+ endif
+ endif
+ return IMAP_PutTextWithMovement('\begin{'.a:env."}\<cr><++>\<cr>".arrlabel."\\end{".a:env."}<++>")
+endfunction
+" }}}
+" Tex_list: {{{
+function! Tex_list(env)
+ if g:Tex_UseMenuWizard == 1
+ let label = input('Label (for \item)? ')
+ if label != ''
+ let label = '{'.label.'}'
+ let addcmd = input('Additional commands? ')
+ if addcmd != ''
+ let label = label . '{'.addcmd.'}'
+ endif
+ else
+ let label = ''
+ endif
+ return IMAP_PutTextWithMovement('\begin{list}'.label."\<cr>\\item \<cr>\\end{list}<++>")
+ else
+ return IMAP_PutTextWithMovement(s:list)
+ endif
+endfunction
+" }}}
+" Tex_document: {{{
+function! Tex_document(env)
+ if g:Tex_UseMenuWizard == 1
+ let dstyle = input('Document style? ')
+ let opts = input('(Optional) Options? ')
+ let foo = '\documentclass'
+ if opts == ''
+ let foo = foo.'{'.dstyle.'}'
+ else
+ let foo = foo.'['.opts.']'.'{'.dstyle.'}'
+ endif
+ return IMAP_PutTextWithMovement(foo."\<cr>\<cr>\\begin{document}\<cr><++>\<cr>\\end{document}")
+ else
+ return IMAP_PutTextWithMovement(s:document)
+ endif
+endfunction
+" }}}
+" Tex_minipage: {{{
+function! Tex_minipage(env)
+ if g:Tex_UseMenuWizard == 1
+ let foo = '\begin{minipage}'
+ let pos = input('(Optional) Position (t b)? ')
+ let width = input('Width? ')
+ if pos == ''
+ let foo = foo.'{'.width.'}'
+ else
+ let foo = foo.'['.pos.']{'.width.'}'
+ endif
+ return IMAP_PutTextWithMovement(foo."\<cr><++>\<cr>\\end{minipage}<++>")
+ else
+ return IMAP_PutTextWithMovement(s:minipage)
+ endif
+endfunction
+" }}}
+" Tex_thebibliography: {{{
+function! Tex_thebibliography(env)
+ if g:Tex_UseMenuWizard == 1
+ " AUC Tex: "Label for BibItem: 99"
+ let indent = input('Indent for BibItem? ')
+ let foo = '{'.indent.'}'
+ let biblabel = input('(Optional) Bibitem label? ')
+ let key = input('Add key? ')
+ let bar = '\bibitem'
+ if biblabel != ''
+ let bar = bar.'['.biblabel.']'
+ endif
+ let bar = bar.'{'.key.'}'
+ return IMAP_PutTextWithMovement('\begin{thebibliography}'.foo."\<cr>".bar." \<cr>\\end{thebibliography}<++>\<Up>")
+ else
+ return IMAP_PutTextWithMovement(
+ \ "\\begin{thebibliography}\<CR>".
+ \ "\\item[<+biblabel+>]{<+bibkey+>} <++>\<CR>".
+ \ "<++>\<CR>".
+ \ "\\end{thebibliography}<++>")
+ endif
+endfunction
+" }}}
+
+" ==============================================================================
+" Contributions / suggestions from Carl Mueller (auctex.vim)
+" ==============================================================================
+" PromptForEnvironment: prompts for an environment {{{
+" Description:
+function! PromptForEnvironment(ask)
+ return Tex_ChooseFromPrompt(
+ \ a:ask."\n" .
+ \ Tex_CreatePrompt(g:Tex_PromptedEnvironments, 2, ",") .
+ \ "\nEnter nae or number of environment :",
+ \ g:Tex_PromptedEnvironments, ",")
+endfunction " }}}
+" Tex_DoEnvironment: fast insertion of environments {{{
+" Description:
+" The menus call this function with an argument (the name of the environment
+" to insert). The maps call this without any arguments. In this case, it
+" prompts for an environment to enter if the current line is empty. If
+" called without arguments and there is a word on the current line, then use
+" that as the name of a new environment.
+function! Tex_DoEnvironment(...)
+ if a:0 < 1
+ let env = matchstr(getline('.'), '^\s*\zs\w*\*\=\ze\s*$')
+ " If in current line is more than one word or in visual mode
+ " ignore contents of line and prompt for environment
+ if env == '' || (exists('s:isvisual') && s:isvisual == 'yes')
+ let env = PromptForEnvironment('Choose which environment to insert: ')
+ if env != ''
+ return Tex_PutEnvironment(env)
+ else
+ return ''
+ endif
+ else
+ " delete the word on the line into the blackhole register.
+ normal! 0"_D
+ return Tex_PutEnvironment(env)
+ endif
+ else
+ return Tex_PutEnvironment(a:1)
+ endif
+endfunction " }}}
+" Tex_PutEnvironment: calls various specialized functions {{{
+" Description:
+" Based on input argument, it calls various specialized functions.
+function! Tex_PutEnvironment(env)
+ if exists("s:isvisual") && s:isvisual == "yes"
+ let s:isvisual = 'no'
+ if a:env == '\['
+ return VEnclose('', '', '\[', '\]')
+ elseif a:env == '$$'
+ return VEnclose('', '', '$$', '$$')
+ endif
+ return VEnclose('\begin{'.a:env.'}', '\end{'.a:env.'}', '\begin{'.a:env.'}', '\end{'.a:env.'}')
+ else
+ " The user can define something like
+ " let g:Tex_Env_theorem = "\\begin{theorem}\<CR><++>\<CR>\\end{theorem}"
+ " This will effectively over-write the default definition of the
+ " theorem environment which uses a \label.
+ if exists("b:Tex_Env_{'".a:env."'}")
+ return IMAP_PutTextWithMovement(b:Tex_Env_{a:env})
+ elseif exists("g:Tex_Env_{'".a:env."'}")
+ return IMAP_PutTextWithMovement(g:Tex_Env_{a:env})
+ elseif a:env =~ 'equation*\|eqnarray*\|theorem\|lemma\|equation\|eqnarray\|align\*\|align\>\|multline'
+ let g:aa = a:env
+ return Tex_eqnarray(a:env)
+ elseif a:env =~ "enumerate\\|itemize\\|theindex\\|trivlist"
+ return Tex_itemize(a:env)
+ elseif a:env =~ "table\\|table*"
+ return Tex_table(a:env)
+ elseif a:env =~ "tabular\\|tabular*\\|array\\|array*"
+ return Tex_tabular(a:env)
+ elseif exists('*Tex_'.a:env)
+ exe 'return Tex_'.a:env.'(a:env)'
+ elseif a:env == '$$'
+ return IMAP_PutTextWithMovement('$$<++>$$')
+ elseif a:env == '\['
+ return IMAP_PutTextWithMovement("\\[\<CR><++>\<CR>\\]<++>")
+ else
+ " Look in supported packages if exists template for environment
+ " given in the line
+ if exists('g:Tex_package_supported') && g:Tex_package_supported != ''
+ let i = 1
+ while Tex_Strntok(g:Tex_package_supported, ',', i) != ''
+ let checkpack = Tex_Strntok(g:Tex_package_supported, ',', i)
+ if g:TeX_package_{checkpack} =~ 'e..:'.a:env
+ if a:env =~ '*'
+ " Don't allow * to be treated as wildcard
+ let aenv = substitute(a:env, '*', '\\*', '')
+ else
+ let aenv = a:env
+ endif
+ let envcommand = matchstr(g:TeX_package_{checkpack}, '\zse..:'.aenv.'[^,]\{-}\ze,')
+ return Tex_ProcessPackageCommand(envcommand)
+ endif
+ let i = i + 1
+ endwhile
+ endif
+ " If nothing before us managed to create an environment, then just
+ " create a bare-bones environment from the name.
+ return IMAP_PutTextWithMovement('\begin{'.a:env."}\<cr><++>\<cr>\\end{".a:env."}<++>")
+ endif
+endfunction " }}}
+" Mapping the <F5> key to insert/prompt for an environment/package {{{
+" and <S-F5> to prompt/replace an environment
+"
+" g:Tex_PromptedEnvironments is a variable containing a comma seperated list
+" of environments. This list defines the prompt which latex-suite sets up when
+" the user presses <F5> on an empty line.
+"
+" Leaving this empty is equivalent to disabling the feature.
+if g:Tex_PromptedEnvironments != ''
+
+ let b:DoubleDollars = 0
+
+ " Provide only <plug>s here. main.vim will create the actual maps.
+ inoremap <silent> <Plug>Tex_FastEnvironmentInsert <C-r>=Tex_FastEnvironmentInsert("no")<cr>
+ nnoremap <silent> <Plug>Tex_FastEnvironmentInsert i<C-r>=Tex_FastEnvironmentInsert("no")<cr>
+ vnoremap <silent> <Plug>Tex_FastEnvironmentInsert <C-\><C-N>:call Tex_FastEnvironmentInsert("yes")<CR>
+ inoremap <silent> <Plug>Tex_FastEnvironmentChange <C-O>:call Tex_ChangeEnvironments()<CR>
+ nnoremap <silent> <Plug>Tex_FastEnvironmentChange :call Tex_ChangeEnvironments()<CR>
+
+ " Tex_FastEnvironmentInsert: maps <F5> to prompt for env and insert it " {{{
+ " Description:
+ " This function calculates whether we are in the preamble. If we are
+ " then inserts a \usepackage line by either reading in a word from the
+ " current line or prompting to type in one. If not in the preamble, then
+ " inserts a environment template either by reading in a word from the
+ " current line or prompting the user to choose one.
+ "
+ function! Tex_FastEnvironmentInsert(isvisual)
+
+ let start_line = line('.')
+ let pos = line('.').' | normal! '.virtcol('.').'|'
+ let s:isvisual = a:isvisual
+
+ " decide if we are in the preamble of the document. If we are then
+ " insert a package, otherwise insert an environment.
+ "
+ if search('\\documentclass', 'bW') && search('\\begin{document}')
+
+ " If there is a \documentclass line and a \begin{document} line in
+ " the file, then a part of the file is the preamble.
+
+ " search for where the document begins.
+ let begin_line = search('\\begin{document}')
+ " if the document begins after where we are presently, then we are
+ " in the preamble.
+ if start_line < begin_line
+ " return to our original location and insert a package
+ " statement.
+ exe pos
+ return Tex_package_from_line()
+ else
+ " we are after the preamble. insert an environment.
+ exe pos
+ return Tex_DoEnvironment()
+ endif
+
+ elseif search('\\documentclass')
+ " if there is only a \documentclass but no \begin{document}, then
+ " the entire file is a preamble. Put a package.
+
+ exe pos
+ return Tex_package_from_line()
+
+ else
+ " no \documentclass, put an environment.
+
+ exe pos
+ return Tex_DoEnvironment()
+
+ endif
+
+ endfunction
+
+ " }}}
+ " Tex_package_from_line: puts a \usepackage line in the current line. " {{{
+ " Description:
+ "
+ function! Tex_package_from_line()
+ " Function Tex_PutPackage is defined in packages.vim
+ " Ignores <F5> in Visual mode
+ if s:isvisual == "yes"
+ return 0
+ else
+ let l = getline(".")
+ let pack = matchstr(l, '^\s*\zs.*')
+ normal! 0"_D
+ return Tex_pack_one(pack)
+ endif
+ endfunction
+
+ " }}}
+ " Tex_ChangeEnvironments: calls Change() to change the environment {{{
+ " Description:
+ " Finds out which environment the cursor is positioned in and changes
+ " that to the chosen new environment. This function knows the changes
+ " which need to be made to change one env to another and calls
+ " Change() with the info.
+ "
+ function! Tex_ChangeEnvironments()
+
+ let env_line = searchpair('$$\|\\[\|begin{', '', '$$\|\\]\|end{', "bn")
+
+ if env_line != 0
+ if getline(env_line) !~ 'begin{'
+ let env_name = '['
+ else
+ let env_name = matchstr(getline(env_line), 'begin{\zs.\{-}\ze}')
+ endif
+ endif
+
+ if !exists('env_name')
+ echomsg "You are not inside environment"
+ return 0
+ endif
+
+ exe 'echomsg "You are within a '.env_name.' environment."'
+ let change_env = PromptForEnvironment('What do you want to change it to? ')
+
+ if change_env == 'eqnarray'
+ call <SID>Change('eqnarray', 1, '', 1)
+ elseif change_env == 'eqnarray*'
+ call <SID>Change('eqnarray*', 0, '\\nonumber', 0)
+ elseif change_env == 'align'
+ call <SID>Change('align', 1, '', 1)
+ elseif change_env == 'align*'
+ call <SID>Change('align*', 0, '\\nonumber', 0)
+ elseif change_env == 'equation*'
+ call <SID>Change('equation*', 0, '&\|\\lefteqn{\|\\nonumber\|\\\\', 0)
+ elseif change_env == ''
+ return 0
+ else
+ call <SID>Change(change_env, 0, '', '')
+ return 0
+ endif
+
+ endfunction
+
+ " }}}
+ " Change: changes the current env to the new env {{{
+ " Description:
+ " This function needs to know the changes which need to be made while
+ " going from an old environment to a new one. This info, it gets from
+ " Tex_ChangeEnvironments
+ "
+ " env : name of the new environment.
+ " label : if 1, then insert a \label at the end of the environment.
+ " otherwise, delete any \label line found.
+ " delete : a pattern which is to be deleted from the original environment.
+ " for example, going to a eqnarray* environment means we need to
+ " delete \label's.
+ " putInNonumber : whether we need to put a \nonumber before the end of the
+ " environment.
+ function! s:Change(env, label, delete, putInNonumber)
+
+ let start_line = line('.')
+ let start_col = virtcol('.')
+
+ if a:env == '['
+ if b:DoubleDollars == 0
+ let first = '\\['
+ let second = '\\]'
+ else
+ let first = '$$'
+ let second = '$$'
+ endif
+ else
+ let first = '\\begin{' . a:env . '}'
+ let second = '\\end{' . a:env . '}'
+ endif
+
+ if b:DoubleDollars == 0
+ let bottom = searchpair('\\\[\|\\begin{','','\\\]\|\\end{','')
+ s/\\\]\|\\end{.\{-}}/\=second/
+ let top = searchpair('\\\[\|\\begin{','','\\\]\|\\end{','b')
+ s/\\\[\|\\begin{.\{-}}/\=first/
+ else
+ let bottom = search('\$\$\|\\end{')
+ s/\$\$\|\\end{.\{-}}/\=second/
+ let top = search('\$\$\|\\begin{','b')
+ s/\$\$\|\\begin{.\{-}}/\=first/
+ end
+ if a:delete != ''
+ exe 'silent '. top . "," . bottom . 's/' . a:delete . '//e'
+ endif
+
+ if a:putInNonumber == 1
+ exe top
+ call search('\\end\|\\\\')
+ if line('.') != bottom
+ exe '.+1,' . bottom . 's/\\\\/\\nonumber\\\\/e'
+ exe (bottom-1) . 's/\s*$/ \\nonumber/'
+ endif
+ endif
+
+ if a:label == 1
+ exe top
+ if search("\\label", "W") > bottom
+ exe top
+ let local_label = input('Label? ')
+ if local_label != ''
+ put = '\label{'.local_label.'}'
+ endif
+ normal $
+ endif
+ else
+ exe 'silent '.top . ',' . bottom . ' g/\\label/delete'
+ endif
+
+ if exists('local_label') && local_label != ''
+ exe start_line + 1.' | normal! '.start_col.'|'
+ else
+ exe start_line.' | normal! '.start_col.'|'
+ endif
+ endfunction " }}}
+
+endif
+
+" }}}
+" Map <S-F1> through <S-F4> to insert environments {{{
+if g:Tex_HotKeyMappings != ''
+
+ " SetUpHotKeys: maps <F1> through <F4> to insert environments
+ " Description:
+ function! <SID>SetUpHotKeys()
+ let i = 1
+ let envname = Tex_Strntok(g:Tex_HotKeyMappings, ',', i)
+ while envname != ''
+
+ exec 'inoremap <silent> <buffer> <S-F'.i.'> <C-r>=Tex_PutEnvironment("'.envname.'")<CR>'
+
+ let i = i + 1
+ let envname = Tex_Strntok(g:Tex_HotKeyMappings, ',', i)
+
+ endwhile
+
+ endfunction
+
+endif
+
+" }}}
+" Tex_SetFastEnvironmentMaps: function for setting up the <F5> and <S-F1>-<S-F4> keys {{{
+" Description: This function is made public so it can be called by the
+" SetTeXOptions() function in main.vim
+function! Tex_SetFastEnvironmentMaps()
+ if g:Tex_PromptedEnvironments != ''
+ call Tex_MakeMap("<F5>", "<Plug>Tex_FastEnvironmentInsert", 'i', '<silent> <buffer>')
+ call Tex_MakeMap("<F5>", "<Plug>Tex_FastEnvironmentInsert", 'n', '<silent> <buffer>')
+ call Tex_MakeMap("<F5>", "<Plug>Tex_FastEnvironmentInsert", 'v', '<silent> <buffer>')
+ call Tex_MakeMap("<S-F5>", "<Plug>Tex_FastEnvironmentChange", 'i', '<silent> <buffer>')
+ call Tex_MakeMap("<S-F5>", "<Plug>Tex_FastEnvironmentChange", 'n', '<silent> <buffer>')
+ endif
+ if g:Tex_HotKeyMappings != ''
+ call s:SetUpHotKeys()
+ endif
+endfunction " }}}
+
+" ==============================================================================
+" Contributions / Tex_InsertItem() from Johannes Tanzler
+" ==============================================================================
+" Tex_GetCurrentEnv: gets the current environment in which the cursor lies {{{
+" Description: handles cases such as:
+"
+" \begin{itemize}
+" \item first item
+" \item second item
+" \begin{description}
+" \item first desc
+" \item second
+" % Tex_GetCurrentEnv will return "description" when called from here
+" \end{description}
+" \item third item
+" % Tex_GetCurrentEnv will return "itemize" when called from here
+" \end{itemize}
+" % Tex_GetCurrentEnv will return "" when called from here
+"
+" Author: Alan Schmitt
+function! Tex_GetCurrentEnv()
+ let pos = line('.').' | normal! '.virtcol('.').'|'
+ let i = 0
+ while 1
+ let env_line = search('^[^%]*\\\%(begin\|end\){', 'bW')
+ if env_line == 0
+ " we reached the beginning of the file, so we return the empty string
+ exe pos
+ return ''
+ endif
+ if match(getline(env_line), '^[^%]*\\begin{') == -1
+ " we found a \\end, so we keep searching
+ let i = i + 1
+ continue
+ else
+ " we found a \\begin which has not been \\end'ed. we are done.
+ if i == 0
+ let env = matchstr(getline(env_line), '\\begin{\zs.\{-}\ze}')
+ exe pos
+ return env
+ else
+ " this \\begin closes a \\end, continue searching.
+ let i = i - 1
+ continue
+ endif
+ endif
+ endwhile
+endfunction
+" }}}
+" Tex_InsertItem: insert \item into a list {{{
+" Description: Find last \begin line, extract env name, return to the start
+" position and insert proper \item, depending on env name.
+" Env names are stored in g: variables it can be used by
+" package files.
+
+TexLet g:Tex_ItemStyle_itemize = '\item '
+TexLet g:Tex_ItemStyle_enumerate = '\item '
+TexLet g:Tex_ItemStyle_theindex = '\item '
+TexLet g:Tex_ItemStyle_thebibliography = '\item[<+biblabel+>]{<+bibkey+>} <++>'
+TexLet g:Tex_ItemStyle_description = '\item[<+label+>] <++>'
+
+function! Tex_InsertItem()
+ " Get current enclosing environment
+ let env = Tex_GetCurrentEnv()
+
+ if exists('g:Tex_ItemStyle_'.env)
+ return IMAP_PutTextWithMovement(g:Tex_ItemStyle_{env})
+ else
+ return ''
+ endif
+endfunction
+" }}}
+" Tex_SetItemMaps: sets the \item inserting maps for current buffer {{{
+" Description:
+
+inoremap <script> <silent> <Plug>Tex_InsertItemOnThisLine <Esc>a<C-r>=Tex_InsertItem()<CR>
+inoremap <script> <silent> <Plug>Tex_InsertItemOnNextLine <ESC>o<C-R>=Tex_InsertItem()<CR>
+
+function! Tex_SetItemMaps()
+ if !hasmapto("<Plug>Tex_InsertItem", "i")
+ imap <buffer> <M-i> <Plug>Tex_InsertItemOnThisLine
+ endif
+ if !hasmapto("<Plug>Tex_InsertItemOnNextLine", "i")
+ imap <buffer> <C-CR> <Plug>Tex_InsertItemOnNextLine
+ endif
+endfunction " }}}
+
+" ==============================================================================
+" Implementation of Fast Environment commands for LaTeX commands
+" ==============================================================================
+" Define certain commonly used command definitions {{{
+
+TexLet g:Tex_Com_{'newtheorem'} = '\newtheorem{<+name+>}{<+caption+>}[<+within+>]'
+TexLet g:Tex_Com_{'frac'} = '\frac{<+n+>}{<+d+>}<++>'
+
+" }}}
+" PromptForCommand: prompts for a command {{{
+" Description:
+function! PromptForCommand(ask)
+ let common_com_prompt =
+ \ Tex_CreatePrompt(g:Tex_PromptedCommands, 2, ',') . "\n" .
+ \ "Enter number or command name :"
+
+ let inp = input(a:ask."\n".common_com_prompt)
+ if inp =~ '^[0-9]\+$'
+ let com = Tex_Strntok(g:Tex_PromptedCommands, ',', inp)
+ else
+ let com = inp
+ endif
+
+ return com
+endfunction " }}}
+" Tex_DoCommand: fast insertion of commands {{{
+" Description:
+"
+function! Tex_DoCommand(isvisual)
+ " If the current line is empty or if a visual selection has been made,
+ " prompt for a new environment.
+ if getline('.') == '' || a:isvisual == 'yes'
+ let com = PromptForCommand('Choose a command to insert: ')
+ if com != ''
+ return Tex_PutCommand(com, a:isvisual)
+ else
+ return ''
+ endif
+ else
+ " We want to find out the word under the cursor without issuing
+ " any movement commands.
+ let presline = getline('.')
+ let c = col('.')
+
+ let wordbef = matchstr(strpart(presline, 0, c-1), '\k\+\*\?$')
+ let wordaft = matchstr(strpart(presline, c-1), '^\k\+\*\?')
+
+ let word = wordbef . wordaft
+ call Tex_Debug("Tex_DoCommand: wordbef = [".wordbef."], wordaft = [".wordaft."], word = [".word."]", 'env')
+
+ " We use \<Del> instead of \<Bs> because \<Bs> does not work
+ " unless bs=2
+ if word != ''
+ return substitute(wordbef, '.', "\<Left>", 'g')
+ \ . substitute(word, '.', "\<Del>", 'g')
+ \ . Tex_PutCommand(word, a:isvisual)
+ else
+ let cmd = PromptForCommand('Choose a command to insert: ')
+ if cmd != ''
+ return Tex_PutCommand(cmd, a:isvisual)
+ else
+ return ''
+ endif
+ endif
+ endif
+endfunction " }}}
+" Tex_PutCommand: calls various specialized functions {{{
+" Description:
+" Based on input argument, it calls various specialized functions.
+function! Tex_PutCommand(com, isvisual)
+ if a:isvisual == "yes"
+ if a:com == '$'
+ return VEnclose('$', '$', '$', '$')
+ elseif a:com == '\\('
+ return VEnclose('\\(', '\\)', '\\(', '\\)')
+ else
+ return VEnclose("\\".a:com.'{', '}', "\\".a:com.'{', '}')
+ endif
+ else
+ if exists('b:Tex_Com_{"'.a:com.'"}')
+ return IMAP_PutTextWithMovement(b:Tex_Com_{a:com})
+ elseif exists('g:Tex_Com_{"'.a:com.'"}')
+ return IMAP_PutTextWithMovement(g:Tex_Com_{a:com})
+ elseif a:com == '$'
+ return IMAP_PutTextWithMovement('$<++>$')
+ else
+ return IMAP_PutTextWithMovement("\\".a:com.'{<++>}<++>')
+ endif
+ endif
+endfunction " }}}
+" Mapping the <F7> key to prompt/insert for command {{{
+" and <S-F7> to prompt/replace command
+"
+" g:Tex_PromptedCommands is a variable containing a comma seperated list
+" of commands.
+"
+" Leaving this empty is equivalent to disabling the feature.
+if g:Tex_PromptedCommands != ''
+
+ let b:DoubleDollars = 0
+
+ inoremap <silent> <Plug>Tex_FastCommandInsert <C-r>=Tex_DoCommand('no')<cr>
+ nnoremap <silent> <Plug>Tex_FastCommandInsert i<C-r>=Tex_DoCommand('no')<cr>
+ vnoremap <silent> <Plug>Tex_FastCommandInsert <C-\><C-N>:call Tex_DoCommand('yes')<CR>
+
+ inoremap <silent> <Plug>Tex_FastCommandChange <C-O>:call Tex_ChangeCommand('no')<CR>
+ nnoremap <silent> <Plug>Tex_FastCommandChange :call Tex_ChangeCommand('no')<CR>
+
+ " Tex_ChangeCommand: calls ChangeCommand() to change the environment {{{
+ " Description:
+ " Finds out which environment the cursor is positioned in and changes
+ " that to the chosen new environment. This function knows the changes
+ " which need to be made to change one env to another and calls
+ " ChangeCommand() with the info.
+ "
+ function! Tex_ChangeCommand(isvisual)
+
+ let pos_com = line('.').' | normal! '.virtcol('.').'|'
+
+ let com_line = searchpair('\\\k\{-}{', '', '}', 'b')
+
+ if com_line != 0
+ normal l
+ let com_name = expand('<cword>')
+ endif
+
+ if !exists('com_name')
+ echomsg "You are not inside command"
+ exe pos_com
+ return 0
+ endif
+
+ exe 'echomsg "You are within a '.com_name.' command."'
+ let change_com = PromptForCommand('Do you want to change it to (number or name)? ')
+
+ if change_com == ''
+ exe pos_com
+ return 0
+ else
+ call <SID>ChangeCommand(change_com)
+ exe pos_com
+ return 0
+ endif
+
+ endfunction
+
+ " }}}
+ " ChangeCommand: Changes current command according to prompt menu {{{
+ " Description:
+ "
+ function! s:ChangeCommand(newcom)
+
+ exe 'normal! ct{'.a:newcom."\<Esc>"
+
+ endfunction
+ " }}}
+
+endif
+
+" }}}
+" Tex_SetFastCommandMaps: function for setting up the <F7> keys {{{
+" Description: This function is made public so it can be called by the
+" SetTeXOptions() function in main.vim
+function! Tex_SetFastCommandMaps()
+ if g:Tex_PromptedCommands != ''
+ if !hasmapto('<Plug>Tex_FastCommandInsert', 'i')
+ imap <silent> <buffer> <F7> <Plug>Tex_FastCommandInsert
+ endif
+ if !hasmapto('<Plug>Tex_FastCommandInsert', 'n')
+ nmap <silent> <buffer> <F7> <Plug>Tex_FastCommandInsert
+ endif
+ if !hasmapto('<Plug>Tex_FastCommandChange', 'i')
+ imap <silent> <buffer> <S-F7> <Plug>Tex_FastCommandChange
+ endif
+ if !hasmapto('<Plug>Tex_FastCommandChange', 'n')
+ nmap <silent> <buffer> <S-F7> <Plug>Tex_FastCommandChange
+ endif
+ if !hasmapto('<Plug>Tex_FastCommandInsert', 'v')
+ vmap <silent> <buffer> <F7> <Plug>Tex_FastCommandInsert
+ endif
+ endif
+endfunction " }}}
+
+" SetEnvMacrosOptions: sets mappings for buffers {{{
+" " Description:
+function! <SID>SetEnvMacrosOptions()
+ if exists('b:doneTexEnvMaps')
+ return
+ endif
+ let b:doneTexEnvMaps = 1
+ if g:Tex_PromptedEnvironments != '' || g:Tex_HotKeyMappings != ''
+ call Tex_SetFastEnvironmentMaps()
+ endif
+ if g:Tex_PromptedCommands != ''
+ call Tex_SetFastCommandMaps()
+ endif
+ call Tex_SetItemMaps()
+endfunction " }}}
+" Catch the Filetype event so we set maps for each buffer {{{
+augroup LatexSuite
+ au LatexSuite User LatexSuiteFileType
+ \ call Tex_Debug('envmacros.vim: Catching LatexSuiteFileType event', 'env') |
+ \ call s:SetEnvMacrosOptions()
+augroup END
+" }}}
+
+" this statement has to be at the end.
+let s:doneOnce = 1
+
+" vim:fdm=marker:nowrap:noet:ff=unix
diff --git a/dot_vim/ftplugin/latex-suite/folding.vim b/dot_vim/ftplugin/latex-suite/folding.vim
new file mode 100644
index 0000000..dfaa450
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/folding.vim
@@ -0,0 +1,393 @@
+"=============================================================================
+" File: folding.vim
+" Author: Srinath Avadhanula
+" modifications/additions by Zhang Linbo
+" CVS: $Id: folding.vim 997 2006-03-20 09:45:45Z srinathava $
+" Created: Tue Apr 23 05:00 PM 2002 PST
+"
+" Description: functions to interact with Syntaxfolds.vim
+"=============================================================================
+
+nnoremap <unique> <Plug>Tex_RefreshFolds :call MakeTexFolds(1)<cr>
+
+augroup LatexSuite
+ au LatexSuite User LatexSuiteFileType
+ \ call Tex_Debug('folding.vim: catching LatexSuiteFileType', 'fold') |
+ \ call Tex_SetFoldOptions()
+augroup END
+
+" Tex_SetFoldOptions: sets maps for every buffer {{{
+" Description:
+function! Tex_SetFoldOptions()
+ if exists('b:doneSetFoldOptions')
+ return
+ endif
+ let b:doneSetFoldOptions = 1
+
+ setlocal foldtext=TexFoldTextFunction()
+
+ if g:Tex_Folding && g:Tex_AutoFolding
+ call MakeTexFolds(0)
+ endif
+
+ let s:ml = exists('g:mapleader') ? g:mapleader : "\\"
+
+ call Tex_MakeMap(s:ml."rf", "<Plug>Tex_RefreshFolds", 'n', '<silent> <buffer>')
+
+endfunction " }}}
+" Tex_FoldSections: creates section folds {{{
+" Author: Zhang Linbo
+" Description:
+" This function takes a comma seperated list of "sections" and creates fold
+" definitions for them. The first item is supposed to be the "shallowest" field
+" and the last is the "deepest". See g:Tex_FoldedSections for the default
+" definition of the lst input argument.
+"
+" **works recursively**
+function! Tex_FoldSections(lst, endpat)
+ let i = match(a:lst, ',')
+ if i > 0
+ let s = strpart(a:lst, 0, i)
+ else
+ let s = a:lst
+ endif
+ if s =~ '%%fakesection'
+ let s = '^\s*' . s
+ else
+ let s = '^\s*\\' . s . '\W'
+ endif
+ let endpat = s . '\|' . a:endpat
+ if i > 0
+ call Tex_FoldSections(strpart(a:lst,i+1), endpat)
+ endif
+ let endpat = '^\s*\\appendix\W\|' . endpat
+ call AddSyntaxFoldItem(s, endpat, 0, -1)
+endfunction
+" }}}
+" MakeTexFolds: function to create fold items for latex. {{{
+"
+" used in conjunction with MakeSyntaxFolds().
+" see ../plugin/syntaxFolds.vim for documentation
+function! MakeTexFolds(force)
+ if exists('g:Tex_Folding') && !g:Tex_Folding
+ return
+ endif
+ if &ft != 'tex'
+ return
+ end
+
+ " Setup folded items lists g:Tex_Foldedxxxx
+ " 1. Use default value if g:Tex_Foldedxxxxxx is not defined
+ " 2. prepend default value to g:Tex_Foldedxxxxxx if it starts with ','
+ " 3. append default value to g:Tex_Foldedxxxxxx if it ends with ','
+
+ " Folding items which are not caught in any of the standard commands,
+ " environments or sections.
+ let s = 'item,slide,preamble,<<<'
+ if !exists('g:Tex_FoldedMisc')
+ let g:Tex_FoldedMisc = s
+ elseif g:Tex_FoldedMisc[0] == ','
+ let g:Tex_FoldedMisc = s . g:Tex_FoldedMisc
+ elseif g:Tex_FoldedMisc =~ ',$'
+ let g:Tex_FoldedMisc = g:Tex_FoldedMisc . s
+ endif
+
+ " By default do not fold any commands. It looks like trying to fold
+ " commands is a difficult problem since commands can be arbitrarily nested
+ " and the end patterns are not unique unlike the case of environments.
+ " For this to work well, we need a regexp which will match a line only if
+ " a command begins on that line but does not end on that line. This
+ " requires a regexp which will match unbalanced curly braces and that is
+ " apparently not doable with regexps.
+ let s = ''
+ if !exists('g:Tex_FoldedCommands')
+ let g:Tex_FoldedCommands = s
+ elseif g:Tex_FoldedCommands[0] == ','
+ let g:Tex_FoldedCommands = s . g:Tex_FoldedCommands
+ elseif g:Tex_FoldedCommands =~ ',$'
+ let g:Tex_FoldedCommands = g:Tex_FoldedCommands . s
+ endif
+
+ let s = 'verbatim,comment,eq,gather,align,figure,table,thebibliography,'
+ \. 'keywords,abstract,titlepage'
+ if !exists('g:Tex_FoldedEnvironments')
+ let g:Tex_FoldedEnvironments = s
+ elseif g:Tex_FoldedEnvironments[0] == ','
+ let g:Tex_FoldedEnvironments = s . g:Tex_FoldedEnvironments
+ elseif g:Tex_FoldedEnvironments =~ ',$'
+ let g:Tex_FoldedEnvironments = g:Tex_FoldedEnvironments . s
+ endif
+
+ if !exists('g:Tex_FoldedSections')
+ let g:Tex_FoldedSections = 'part,chapter,section,%%fakesection,'
+ \. 'subsection,subsubsection,paragraph'
+ endif
+
+ " the order in which these calls are made decides the nestedness. in
+ " latex, a table environment will always be embedded in either an item or
+ " a section etc. not the other way around. so we first fold up all the
+ " tables. and then proceed with the other regions.
+
+ let b:numFoldItems = 0
+
+ " ========================================================================
+ " How to add new folding items {{{
+ " ========================================================================
+ "
+ " Each of the following function calls defines a syntax fold region. Each
+ " definition consists of a call to the AddSyntaxFoldItem() function.
+ "
+ " The order in which the folds are defined is important. Juggling the
+ " order of the function calls will create havoc with folding. The
+ " "deepest" folding item needs to be called first. For example, if
+ " the \begin{table} environment is a subset (or lies within) the \section
+ " environment, then add the definition for the \table first.
+ "
+ " The AddSyntaxFoldItem() function takes either 4 or 6 arguments. When it
+ " is called with 4 arguments, it is equivalent to calling it with 6
+ " arguments with the last two left blank (i.e as empty strings)
+ "
+ " The explanation for each argument is as follows:
+ " startpat: a line matching this pattern defines the beginning of a fold.
+ " endpat : a line matching this pattern defines the end of a fold.
+ " startoff: this is the offset from the starting line at which folding will
+ " actually start
+ " endoff : like startoff, but gives the offset of the actual fold end from
+ " the line satisfying endpat.
+ " startoff and endoff are necessary when the folding region does
+ " not have a specific end pattern corresponding to a start
+ " pattern. for example in latex,
+ " \begin{section}
+ " defines the beginning of a section, but its not necessary to
+ " have a corresponding
+ " \end{section}
+ " the section is assumed to end 1 line _before_ another section
+ " starts.
+ " startskip: a pattern which defines the beginning of a "skipped" region.
+ "
+ " For example, suppose we define a \itemize fold as follows:
+ " startpat = '^\s*\\item',
+ " endpat = '^\s*\\item\|^\s*\\end{\(enumerate\|itemize\|description\)}',
+ " startoff = 0,
+ " endoff = -1
+ "
+ " This defines a fold which starts with a line beginning with an
+ " \item and ending one line before a line beginning with an
+ " \item or \end{enumerate} etc.
+ "
+ " Then, as long as \item's are not nested things are fine.
+ " However, once items begin to nest, the fold started by one
+ " \item can end because of an \item in an \itemize
+ " environment within this \item. i.e, the following can happen:
+ "
+ " \begin{itemize}
+ " \item Some text <------- fold will start here
+ " This item will contain a nested item
+ " \begin{itemize} <----- fold will end here because next line contains \item...
+ " \item Hello
+ " \end{itemize} <----- ... instead of here.
+ " \item Next item of the parent itemize
+ " \end{itemize}
+ "
+ " Therefore, in order to completely define a folding item which
+ " allows nesting, we need to also define a "skip" pattern.
+ " startskip and end skip do that.
+ " Leave '' when there is no nesting.
+ " endskip: the pattern which defines the end of the "skip" pattern for
+ " nested folds.
+ "
+ " Example:
+ " 1. A syntax fold region for a latex section is
+ " startpat = "\\section{"
+ " endpat = "\\section{"
+ " startoff = 0
+ " endoff = -1
+ " startskip = ''
+ " endskip = ''
+ " Note that the start and end patterns are thus the same and endoff has a
+ " negative value to capture the effect of a section ending one line before
+ " the next starts.
+ " 2. A syntax fold region for the \itemize environment is:
+ " startpat = '^\s*\\item',
+ " endpat = '^\s*\\item\|^\s*\\end{\(enumerate\|itemize\|description\)}',
+ " startoff = 0,
+ " endoff = -1,
+ " startskip = '^\s*\\begin{\(enumerate\|itemize\|description\)}',
+ " endskip = '^\s*\\end{\(enumerate\|itemize\|description\)}'
+ " Note the use of startskip and endskip to allow nesting.
+ "
+ "
+ " }}}
+ " ========================================================================
+
+ " {{{ comment lines
+ if g:Tex_FoldedMisc =~ '\<comments\>'
+ call AddSyntaxFoldItem (
+ \ '^%\([^%]\|[^f]\|[^a]\|[^k]\|[^e]\)',
+ \ '^[^%]',
+ \ 0,
+ \ -1
+ \ )
+ endif
+ " }}}
+
+ " {{{ items
+ if g:Tex_FoldedMisc =~ '\<item\>'
+ call AddSyntaxFoldItem (
+ \ '^\s*\\item',
+ \ '^\s*\\item\|^\s*\\end{\(enumerate\|itemize\|description\)}',
+ \ 0,
+ \ -1,
+ \ '^\s*\\begin{\(enumerate\|itemize\|description\)}',
+ \ '^\s*\\end{\(enumerate\|itemize\|description\)}'
+ \ )
+ endif
+ " }}}
+
+ " {{{ title
+ if g:Tex_FoldedMisc =~ '\<title\>'
+ call AddSyntaxFoldItem (
+ \ '^\s*\\title\W',
+ \ '^\s*\\maketitle',
+ \ 0,
+ \ 0
+ \ )
+ endif
+ " }}}
+
+ " Commands and Environments {{{
+ " Fold the commands and environments in 2 passes.
+ let pass = 0
+ while pass < 2
+ if pass == 0
+ let lst = g:Tex_FoldedCommands
+ else
+ let lst = g:Tex_FoldedEnvironments
+ endif
+ while lst != ''
+ let i = match(lst, ',')
+ if i > 0
+ let s = strpart(lst, 0, i)
+ let lst = strpart(lst, i+1)
+ else
+ let s = lst
+ let lst = ''
+ endif
+ if s != ''
+ if pass == 0
+ " NOTE: This pattern ensures that a command which is
+ " terminated on the same line will not start a fold.
+ " However, it will also refuse to fold certain commands
+ " which have not terminated. eg:
+ " \commandname{something \bf{text} and
+ " will _not_ start a fold.
+ " In other words, the pattern is safe, but not exact.
+ call AddSyntaxFoldItem('^\s*\\'.s.'{[^{}]*$','^[^}]*}',0,0)
+ else
+ call AddSyntaxFoldItem('^\s*\\begin{'.s,'^\s*\\end{'.s,0,0)
+ endif
+ endif
+ endwhile
+ let pass = pass + 1
+ endwhile
+ " }}}
+
+ " Sections {{{
+ if g:Tex_FoldedSections != ''
+ call Tex_FoldSections(g:Tex_FoldedSections,
+ \ '^\s*\\frontmatter\|^\s*\\mainmatter\|^\s*\\backmatter\|'
+ \. '^\s*\\begin{thebibliography\|>>>\|^\s*\\endinput\|'
+ \. '^\s*\\begin{slide\|^\s*\\end{document')
+ endif
+ " }}}
+
+ " {{{ slide
+ if g:Tex_FoldedMisc =~ '\<slide\>'
+ call AddSyntaxFoldItem (
+ \ '^\s*\\begin{slide',
+ \ '^\s*\\appendix\W\|^\s*\\chapter\W\|^\s*\\end{slide\|^\s*\\end{document',
+ \ 0,
+ \ 0
+ \ )
+ endif
+ " }}}
+
+ " {{{ preamble
+ if g:Tex_FoldedMisc =~ '\<preamble\>'
+ call AddSyntaxFoldItem (
+ \ '^\s*\\document\(class\|style\).*{',
+ \ '^\s*\\begin{document}',
+ \ 0,
+ \ -1
+ \ )
+ endif
+ " }}}
+
+ " Manually folded regions {{{
+ if g:Tex_FoldedMisc =~ '\(^\|,\)<<<\(,\|$\)'
+ call AddSyntaxFoldItem (
+ \ '<<<',
+ \ '>>>',
+ \ 0,
+ \ 0
+ \ )
+ endif
+ " }}}
+
+ call MakeSyntaxFolds(a:force)
+ normal! zv
+endfunction
+
+" }}}
+" TexFoldTextFunction: create fold text for folds {{{
+function! TexFoldTextFunction()
+ let leadingSpace = matchstr(' ', ' \{,'.indent(v:foldstart).'}')
+ if getline(v:foldstart) =~ '^\s*\\begin{'
+ let header = matchstr(getline(v:foldstart),
+ \ '^\s*\\begin{\zs\([:alpha:]*\)[^}]*\ze}')
+ let caption = ''
+ let label = ''
+ let i = v:foldstart
+ while i <= v:foldend
+ if getline(i) =~ '\\caption'
+ " distinguish between
+ " \caption{fulldesc} - fulldesc will be displayed
+ " \caption[shortdesc]{fulldesc} - shortdesc will be displayed
+ if getline(i) =~ '\\caption\['
+ let caption = matchstr(getline(i), '\\caption\[\zs[^\]]*')
+ let caption = substitute(caption, '\zs\]{.*}[^}]*$', '', '')
+ else
+ let caption = matchstr(getline(i), '\\caption{\zs.*')
+ let caption = substitute(caption, '\zs}[^}]*$', '', '')
+ end
+ elseif getline(i) =~ '\\label'
+ let label = matchstr(getline(i), '\\label{\zs.*')
+ let label = substitute(label, '\zs}[^}]*$', '', '')
+ end
+
+ let i = i + 1
+ endwhile
+
+ let ftxto = foldtext()
+ " if no caption found, then use the second line.
+ if caption == ''
+ let caption = getline(v:foldstart + 1)
+ end
+
+ let retText = matchstr(ftxto, '^[^:]*').': '.header.
+ \ ' ('.label.') : '.caption
+ return leadingSpace.retText
+
+ elseif getline(v:foldstart) =~ '^%' && getline(v:foldstart) !~ '^%%fake'
+ let ftxto = foldtext()
+ return leadingSpace.substitute(ftxto, ':', ': % ', '')
+ elseif getline(v:foldstart) =~ '^\s*\\document\(class\|style\).*{'
+ let ftxto = leadingSpace.foldtext()
+ return substitute(ftxto, ':', ': Preamble: ', '')
+ else
+ return leadingSpace.foldtext()
+ end
+endfunction
+" }}}
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
diff --git a/dot_vim/ftplugin/latex-suite/macros/example b/dot_vim/ftplugin/latex-suite/macros/example
new file mode 100644
index 0000000..395311f
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/macros/example
@@ -0,0 +1,11 @@
+% my long complicated macro. This is an example of how to set up a
+% tex-macro for latex-suite. simply type in the lines as you would in
+% latex. Place holders are allowed.
+% NOTE: if you have filetype indentation turned on, then do not do
+% formatting here. the indentation will follow automatically...
+\begin{mycomplicatedenvironment}
+\mycommand1{<++>}
+\mycommand2{<+hint2+>}
+\mycommand3{<++>}
+\mycommand4{<++>}
+\end{mycomplicatedenvironment}<++>
diff --git a/dot_vim/ftplugin/latex-suite/main.vim b/dot_vim/ftplugin/latex-suite/main.vim
new file mode 100644
index 0000000..063c6f6
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/main.vim
@@ -0,0 +1,1024 @@
+" LaTeX filetype
+" Language: LaTeX (ft=tex)
+" Maintainer: Srinath Avadhanula
+" CVS: $Id: main.vim 999 2006-03-21 05:32:37Z srinathava $
+" URL:
+
+" line continuation used here.
+let s:save_cpo = &cpo
+set cpo&vim
+
+" avoiding re-inclusion {{{
+" the avoiding re-inclusion statement is not provided here because the files
+" which call this file should in the normal course of events handle the
+" re-inclusion stuff.
+
+" we definitely dont want to run through the entire file each and every time.
+" only once to define the functions. for successive latex files, just set up
+" the folding and mappings and quit.
+if exists('s:doneFunctionDefinitions') && !exists('b:forceRedoLocalTex')
+ call s:SetTeXOptions()
+ finish
+endif
+
+let s:doneFunctionDefinitions = 1
+
+" get the place where this plugin resides for setting cpt and dict options.
+" these lines need to be outside the function.
+let s:path = expand('<sfile>:p:h')
+" set up personal defaults.
+runtime ftplugin/tex/texrc
+" set up global defaults.
+exe "so ".s:path.'/texrc'
+
+" }}}
+
+nmap <silent> <script> <plug> i
+imap <silent> <script> <C-o><plug> <Nop>
+
+" ==============================================================================
+" mappings
+" ==============================================================================
+" {{{
+" calculate the mapleader character.
+let s:ml = exists('g:mapleader') ? g:mapleader : '\'
+
+if !exists('s:doneMappings')
+ let s:doneMappings = 1
+ " short forms for latex formatting and math elements. {{{
+ " taken from auctex.vim or miktexmacros.vim
+ call IMAP ('__', '_{<++>}<++>', "tex")
+ call IMAP ('()', '(<++>)<++>', "tex")
+ call IMAP ('[]', '[<++>]<++>', "tex")
+ call IMAP ('{}', '{<++>}<++>', "tex")
+ call IMAP ('^^', '^{<++>}<++>', "tex")
+ call IMAP ('$$', '$<++>$<++>', "tex")
+ call IMAP ('==', '&=& ', "tex")
+ call IMAP ('~~', '&\approx& ', "tex")
+ call IMAP ('=~', '\approx', "tex")
+ call IMAP ('::', '\dots', "tex")
+ call IMAP ('((', '\left( <++> \right)<++>', "tex")
+ call IMAP ('[[', '\left[ <++> \right]<++>', "tex")
+ call IMAP ('{{', '\left\{ <++> \right\}<++>', "tex")
+ call IMAP (g:Tex_Leader.'^', '\hat{<++>}<++>', "tex")
+ call IMAP (g:Tex_Leader.'_', '\bar{<++>}<++>', "tex")
+ call IMAP (g:Tex_Leader.'6', '\partial', "tex")
+ call IMAP (g:Tex_Leader.'8', '\infty', "tex")
+ call IMAP (g:Tex_Leader.'/', '\frac{<++>}{<++>}<++>', "tex")
+ call IMAP (g:Tex_Leader.'%', '\frac{<++>}{<++>}<++>', "tex")
+ call IMAP (g:Tex_Leader.'@', '\circ', "tex")
+ call IMAP (g:Tex_Leader.'0', '^\circ', "tex")
+ call IMAP (g:Tex_Leader.'=', '\equiv', "tex")
+ call IMAP (g:Tex_Leader."\\",'\setminus', "tex")
+ call IMAP (g:Tex_Leader.'.', '\cdot', "tex")
+ call IMAP (g:Tex_Leader.'*', '\times', "tex")
+ call IMAP (g:Tex_Leader.'&', '\wedge', "tex")
+ call IMAP (g:Tex_Leader.'-', '\bigcap', "tex")
+ call IMAP (g:Tex_Leader.'+', '\bigcup', "tex")
+ call IMAP (g:Tex_Leader.'M', '\sum_{<++>}^{<++>}<++>', 'tex')
+ call IMAP (g:Tex_Leader.'S', '\sum_{<++>}^{<++>}<++>', 'tex')
+ call IMAP (g:Tex_Leader.'(', '\subset', "tex")
+ call IMAP (g:Tex_Leader.')', '\supset', "tex")
+ call IMAP (g:Tex_Leader.'<', '\le', "tex")
+ call IMAP (g:Tex_Leader.'>', '\ge', "tex")
+ call IMAP (g:Tex_Leader.',', '\nonumber', "tex")
+ call IMAP (g:Tex_Leader.'~', '\tilde{<++>}<++>', "tex")
+ call IMAP (g:Tex_Leader.';', '\dot{<++>}<++>', "tex")
+ call IMAP (g:Tex_Leader.':', '\ddot{<++>}<++>', "tex")
+ call IMAP (g:Tex_Leader.'2', '\sqrt{<++>}<++>', "tex")
+ call IMAP (g:Tex_Leader.'|', '\Big|', "tex")
+ call IMAP (g:Tex_Leader.'I', "\\int_{<++>}^{<++>}<++>", 'tex')
+ " }}}
+ " Greek Letters {{{
+ call IMAP(g:Tex_Leader.'a', '\alpha', 'tex')
+ call IMAP(g:Tex_Leader.'b', '\beta', 'tex')
+ call IMAP(g:Tex_Leader.'c', '\chi', 'tex')
+ call IMAP(g:Tex_Leader.'d', '\delta', 'tex')
+ call IMAP(g:Tex_Leader.'e', '\varepsilon', 'tex')
+ call IMAP(g:Tex_Leader.'f', '\varphi', 'tex')
+ call IMAP(g:Tex_Leader.'g', '\gamma', 'tex')
+ call IMAP(g:Tex_Leader.'h', '\eta', 'tex')
+ call IMAP(g:Tex_Leader.'k', '\kappa', 'tex')
+ call IMAP(g:Tex_Leader.'l', '\lambda', 'tex')
+ call IMAP(g:Tex_Leader.'m', '\mu', 'tex')
+ call IMAP(g:Tex_Leader.'n', '\nu', 'tex')
+ call IMAP(g:Tex_Leader.'p', '\pi', 'tex')
+ call IMAP(g:Tex_Leader.'q', '\theta', 'tex')
+ call IMAP(g:Tex_Leader.'r', '\rho', 'tex')
+ call IMAP(g:Tex_Leader.'s', '\sigma', 'tex')
+ call IMAP(g:Tex_Leader.'t', '\tau', 'tex')
+ call IMAP(g:Tex_Leader.'u', '\upsilon', 'tex')
+ call IMAP(g:Tex_Leader.'v', '\varsigma', 'tex')
+ call IMAP(g:Tex_Leader.'w', '\omega', 'tex')
+ call IMAP(g:Tex_Leader.'w', '\wedge', 'tex') " AUCTEX style
+ call IMAP(g:Tex_Leader.'x', '\xi', 'tex')
+ call IMAP(g:Tex_Leader.'y', '\psi', 'tex')
+ call IMAP(g:Tex_Leader.'z', '\zeta', 'tex')
+ " not all capital greek letters exist in LaTeX!
+ " reference: http://www.giss.nasa.gov/latex/ltx-405.html
+ call IMAP(g:Tex_Leader.'D', '\Delta', 'tex')
+ call IMAP(g:Tex_Leader.'F', '\Phi', 'tex')
+ call IMAP(g:Tex_Leader.'G', '\Gamma', 'tex')
+ call IMAP(g:Tex_Leader.'Q', '\Theta', 'tex')
+ call IMAP(g:Tex_Leader.'L', '\Lambda', 'tex')
+ call IMAP(g:Tex_Leader.'X', '\Xi', 'tex')
+ call IMAP(g:Tex_Leader.'Y', '\Psi', 'tex')
+ call IMAP(g:Tex_Leader.'S', '\Sigma', 'tex')
+ call IMAP(g:Tex_Leader.'U', '\Upsilon', 'tex')
+ call IMAP(g:Tex_Leader.'W', '\Omega', 'tex')
+ " }}}
+ " ProtectLetters: sets up indentity maps for things like ``a {{{
+ " " Description: If we simply do
+ " call IMAP('`a', '\alpha', 'tex')
+ " then we will never be able to type 'a' after a tex-quotation. Since
+ " IMAP() always uses the longest map ending in the letter, this problem
+ " can be avoided by creating a fake map for ``a -> ``a.
+ " This function sets up fake maps of the following forms:
+ " ``[aA] -> ``[aA] (for writing in quotations)
+ " \`[aA] -> \`[aA] (for writing diacritics)
+ " "`[aA] -> "`[aA] (for writing german quotations)
+ " It does this for all printable lower ascii characters just to make sure
+ " we dont let anything slip by.
+ function! s:ProtectLetters(first, last)
+ let i = a:first
+ while i <= a:last
+ if nr2char(i) =~ '[[:print:]]'
+ call IMAP('``'.nr2char(i), '``'.nr2char(i), 'tex')
+ call IMAP('\`'.nr2char(i), '\`'.nr2char(i), 'tex')
+ call IMAP('"`'.nr2char(i), '"`'.nr2char(i), 'tex')
+ endif
+ let i = i + 1
+ endwhile
+ endfunction
+ call s:ProtectLetters(32, 127)
+ " }}}
+ " vmaps: enclose selected region in brackets, environments {{{
+ " The action changes depending on whether the selection is character-wise
+ " or line wise. for example, selecting linewise and pressing \v will
+ " result in the region being enclosed in \begin{verbatim}, \end{verbatim},
+ " whereas in characterise visual mode, the thingie is enclosed in \verb|
+ " and |.
+ exec 'vnoremap <silent> '.g:Tex_Leader."( \<C-\\>\<C-N>:call VEnclose('\\left( ', ' \\right)', '\\left(', '\\right)')\<CR>"
+ exec 'vnoremap <silent> '.g:Tex_Leader."[ \<C-\\>\<C-N>:call VEnclose('\\left[ ', ' \\right]', '\\left[', '\\right]')\<CR>"
+ exec 'vnoremap <silent> '.g:Tex_Leader."{ \<C-\\>\<C-N>:call VEnclose('\\left\\{ ', ' \\right\\}', '\\left\\{', '\\right\\}')\<CR>"
+ exec 'vnoremap <silent> '.g:Tex_Leader."$ \<C-\\>\<C-N>:call VEnclose('$', '$', '\\[', '\\]')\<CR>"
+ " }}}
+end
+
+" }}}
+
+" ==============================================================================
+" Helper functions for debugging
+" ==============================================================================
+" Tex_Debug: appends the argument into s:debugString {{{
+" Description:
+"
+" Do not want a memory leak! Set this to zero so that latex-suite always
+" starts out in a non-debugging mode.
+if !exists('g:Tex_Debug')
+ let g:Tex_Debug = 0
+endif
+function! Tex_Debug(str, ...)
+ if !g:Tex_Debug
+ return
+ endif
+ if a:0 > 0
+ let pattern = a:1
+ else
+ let pattern = ''
+ endif
+ if !exists('s:debugString_'.pattern)
+ let s:debugString_{pattern} = ''
+ endif
+ let s:debugString_{pattern} = s:debugString_{pattern}.a:str."\n"
+
+ let s:debugString_ = (exists('s:debugString_') ? s:debugString_ : '')
+ \ . pattern.' : '.a:str."\n"
+
+ if Tex_GetVarValue('Tex_DebugLog') != ''
+ exec 'redir! >> '.Tex_GetVarValue('Tex_DebugLog')
+ silent! echo pattern.' : '.a:str
+ redir END
+ endif
+endfunction " }}}
+" Tex_PrintDebug: prings s:debugString {{{
+" Description:
+"
+function! Tex_PrintDebug(...)
+ if a:0 > 0
+ let pattern = a:1
+ else
+ let pattern = ''
+ endif
+ if exists('s:debugString_'.pattern)
+ echo s:debugString_{pattern}
+ endif
+endfunction " }}}
+" Tex_ClearDebug: clears the s:debugString string {{{
+" Description:
+"
+function! Tex_ClearDebug(...)
+ if a:0 > 0
+ let pattern = a:1
+ else
+ let pattern = ''
+ endif
+ if exists('s:debugString_'.pattern)
+ let s:debugString_{pattern} = ''
+ endif
+endfunction " }}}
+" Tex_ShowVariableValue: debugging help {{{
+" provides a way to examine script local variables from outside the script.
+" very handy for debugging.
+function! Tex_ShowVariableValue(...)
+ let i = 1
+ while i <= a:0
+ exe 'let arg = a:'.i
+ if exists('s:'.arg) ||
+ \ exists('*s:'.arg)
+ exe 'let val = s:'.arg
+ echomsg 's:'.arg.' = '.val
+ end
+ let i = i + 1
+ endwhile
+endfunction
+
+" }}}
+
+" ==============================================================================
+" Helper functions for grepping
+" ==============================================================================
+" Tex_Grep: shorthand for :grep or :vimgrep {{{
+function! Tex_Grep(string, where)
+ if v:version >= 700
+ exec 'silent! vimgrep! /'.a:string.'/ '.a:where
+ else
+ exec 'silent! grep! '.Tex_EscapeForGrep(a:string).' '.a:where
+ endif
+endfunction
+
+" }}}
+" Tex_Grepadd: shorthand for :grepadd or :vimgrepadd {{{
+function! Tex_Grepadd(string, where)
+ if v:version >= 700
+ exec 'silent! vimgrepadd! /'.a:string.'/ '.a:where
+ else
+ exec "silent! grepadd! ".Tex_EscapeForGrep(a:string).' '.a:where
+ endif
+endfunction
+
+" }}}
+" Tex_EscapeForGrep: escapes back-slashes and doublequotes the correct number of times {{{
+" Description: This command escapes the backslash and double quotes in a
+" search pattern the correct number of times so it can be used in the ``:grep``
+" command. This command is meant to be used as::
+"
+" exec "silent! grep ".Tex_EscapeForGrep(pattern)." file"
+"
+" The input argument to this function should be the string which you want
+" the external command to finally see. For example, to search for a string
+" ``'\bibitem'``, the grep command needs to be passed a string like
+" ``'\\bibitem'``. Examples::
+"
+" Tex_EscapeForGrep('\\bibitem') " correct
+" Tex_EscapeForGrep('\bibitem') " wrong
+" Tex_EscapeForGrep("\\bibitem") " wrong
+" Tex_EscapeForGrep('\<word\>') " correct
+"
+function! Tex_EscapeForGrep(string)
+ let retVal = a:string
+
+ " The shell halves the backslashes.
+ if &shell =~ 'sh'
+ let retVal = escape(retVal, "\\")
+
+ " If shellxquote is set, then the backslashes are halved yet again.
+ if &shellxquote == '"'
+ let retVal = escape(retVal, "\"\\")
+ endif
+
+ endif
+ " escape special characters which bash/cmd.exe might interpret
+ let retVal = escape(retVal, "<>")
+
+ return retVal
+endfunction " }}}
+
+" ==============================================================================
+" Uncategorized helper functions
+" ==============================================================================
+" Tex_Strntok: extract the n^th token from a list {{{
+" example: Strntok('1,23,3', ',', 2) = 23
+fun! Tex_Strntok(s, tok, n)
+ return matchstr( a:s.a:tok[0], '\v(\zs([^'.a:tok.']*)\ze['.a:tok.']){'.a:n.'}')
+endfun
+
+" }}}
+" Tex_CreatePrompt: creates a prompt string {{{
+" Description:
+" Arguments:
+" promptList: This is a string of the form:
+" 'item1,item2,item3,item4'
+" cols: the number of columns in the resultant prompt
+" sep: the list seperator token
+"
+" Example:
+" Tex_CreatePrompt('item1,item2,item3,item4', 2, ',')
+" returns
+" "(1) item1\t(2)item2\n(3)item3\t(4)item4"
+"
+" This string can be used in the input() function.
+function! Tex_CreatePrompt(promptList, cols, sep)
+
+ let g:listSep = a:sep
+ let num_common = GetListCount(a:promptList)
+
+ let i = 1
+ let promptStr = ""
+
+ while i <= num_common
+
+ let j = 0
+ while j < a:cols && i + j <= num_common
+ let com = Tex_Strntok(a:promptList, a:sep, i+j)
+ let promptStr = promptStr.'('.(i+j).') '.
+ \ com."\t".( strlen(com) < 4 ? "\t" : '' )
+
+ let j = j + 1
+ endwhile
+
+ let promptStr = promptStr."\n"
+
+ let i = i + a:cols
+ endwhile
+ return promptStr
+endfunction
+
+" }}}
+" Tex_CleanSearchHistory: removes last search item from search history {{{
+" Description: This function needs to be globally visible because its
+" called from outside the script during expansion.
+function! Tex_CleanSearchHistory()
+ call histdel("/", -1)
+ let @/ = histget("/", -1)
+endfunction
+nmap <silent> <script> <plug>cleanHistory :call Tex_CleanSearchHistory()<CR>
+
+" }}}
+" Tex_GetVarValue: gets the value of the variable {{{
+" Description:
+" See if a window-local, buffer-local or global variable with the given name
+" exists and if so, returns the corresponding value. If none exist, return
+" an empty string.
+function! Tex_GetVarValue(varname, ...)
+ if exists('w:'.a:varname)
+ return w:{a:varname}
+ elseif exists('b:'.a:varname)
+ return b:{a:varname}
+ elseif exists('g:'.a:varname)
+ return g:{a:varname}
+ elseif a:0 > 0
+ return a:1
+ else
+ return ''
+ endif
+endfunction " }}}
+" Tex_GetMainFileName: gets the name of the main file being compiled. {{{
+" Description: returns the full path name of the main file.
+" This function checks for the existence of a .latexmain file
+" which might point to the location of a "main" latex file.
+" If .latexmain exists, then return the full path name of the
+" file being pointed to by it.
+"
+" Otherwise, return the full path name of the current buffer.
+"
+" You can supply an optional "modifier" argument to the
+" function, which will optionally modify the file name before
+" returning.
+" NOTE: From version 1.6 onwards, this function always trims
+" away the .latexmain part of the file name before applying the
+" modifier argument.
+function! Tex_GetMainFileName(...)
+ if a:0 > 0
+ let modifier = a:1
+ else
+ let modifier = ':p'
+ endif
+
+ " If the user wants to use his own way to specify the main file name, then
+ " use it straight away.
+ if Tex_GetVarValue('Tex_MainFileExpression') != ''
+ exec 'let retval = '.Tex_GetVarValue('Tex_MainFileExpression')
+ return retval
+ endif
+
+ let curd = getcwd()
+
+ let dirmodifier = '%:p:h'
+ let dirLast = expand(dirmodifier)
+ call Tex_CD(dirLast)
+
+ " move up the directory tree until we find a .latexmain file.
+ " TODO: Should we be doing this recursion by default, or should there be a
+ " setting?
+ while glob('*.latexmain') == ''
+ let dirmodifier = dirmodifier.':h'
+ " break from the loop if we cannot go up any further.
+ if expand(dirmodifier) == dirLast
+ break
+ endif
+ let dirLast = expand(dirmodifier)
+ call Tex_CD(dirLast)
+ endwhile
+
+ let lheadfile = glob('*.latexmain')
+ if lheadfile != ''
+ " Remove the trailing .latexmain part of the filename... We never want
+ " that.
+ let lheadfile = fnamemodify(substitute(lheadfile, '\.latexmain$', '', ''), modifier)
+ else
+ " If we cannot find any main file, just modify the filename of the
+ " current buffer.
+ let lheadfile = expand('%'.modifier)
+ endif
+
+ call Tex_CD(curd)
+
+ " NOTE: The caller of this function needs to escape spaces in the
+ " file name as appropriate. The reason its not done here is that
+ " escaping spaces is not safe if this file is to be used as part of
+ " an external command on certain platforms.
+ return lheadfile
+endfunction
+
+" }}}
+" Tex_ChooseFromPrompt: process a user input to a prompt string {{{
+" " Description:
+function! Tex_ChooseFromPrompt(dialog, list, sep)
+ let g:Tex_ASDF = a:dialog
+ let inp = input(a:dialog)
+ if inp =~ '\d\+'
+ return Tex_Strntok(a:list, a:sep, inp)
+ else
+ return inp
+ endif
+endfunction " }}}
+" Tex_ChooseFile: produces a file list and prompts for choice {{{
+" Description:
+function! Tex_ChooseFile(dialog)
+ let files = glob('*')
+ if files == ''
+ return ''
+ endif
+ let s:incnum = 0
+ echo a:dialog
+ let filenames = substitute(files, "\\v(^|\n)", "\\=submatch(0).Tex_IncrementNumber(1).' : '", 'g')
+ echo filenames
+ let choice = input('Enter Choice : ')
+ let g:choice = choice
+ if choice == ''
+ return ''
+ endif
+ if choice =~ '^\s*\d\+\s*$'
+ let retval = Tex_Strntok(files, "\n", choice)
+ else
+ let filescomma = substitute(files, "\n", ",", "g")
+ let retval = GetListMatchItem(filescomma, choice)
+ endif
+ if retval == ''
+ return ''
+ endif
+ return retval
+endfunction
+
+" }}}
+" Tex_IncrementNumber: returns an incremented number each time {{{
+" Description:
+let s:incnum = 0
+function! Tex_IncrementNumber(increm)
+ let s:incnum = s:incnum + a:increm
+ return s:incnum
+endfunction
+
+" }}}
+" Tex_ResetIncrementNumber: increments s:incnum to zero {{{
+" Description:
+function! Tex_ResetIncrementNumber(val)
+ let s:incnum = a:val
+endfunction " }}}
+" Tex_FindInRtp: check if file exists in &rtp {{{
+" Description: Checks if file exists in globpath(&rtp, ...) and cuts off the
+" rest of returned names. This guarantees that sourced file is
+" from $HOME.
+" If an optional argument is given, it specifies how to expand
+" each filename found. For example, '%:p' will return a list of
+" the complete paths to the files. By default returns trailing
+" path-names without extenions.
+" NOTE: This function is very slow when a large number of
+" matches are found because of a while loop which modifies
+" each filename found. Some speedup was acheived by using
+" a tokenizer approach rather than using Tex_Strntok which
+" would have been more obvious.
+function! Tex_FindInRtp(filename, directory, ...)
+ " how to expand each filename. ':p:t:r' modifies each filename to its
+ " trailing part without extension.
+ let expand = (a:0 > 0 ? a:1 : ':p:t:r')
+ " The pattern used... An empty filename should be regarded as '*'
+ let pattern = (a:filename != '' ? a:filename : '*')
+
+ let filelist = globpath(&rtp, 'ftplugin/latex-suite/'.a:directory.'/'.pattern)."\n"
+
+ if filelist == "\n"
+ return ''
+ endif
+
+ if a:filename != ''
+ return fnamemodify(Tex_Strntok(filelist, "\n", 1), expand)
+ endif
+
+ " Now cycle through the files modifying each filename in the desired
+ " manner.
+ let retfilelist = ''
+ let i = 1
+ while 1
+ " Extract the portion till the next newline. Then shorten the filelist
+ " by removing till the newline.
+ let nextnewline = stridx(filelist, "\n")
+ if nextnewline == -1
+ break
+ endif
+ let filename = strpart(filelist, 0, nextnewline)
+ let filelist = strpart(filelist, nextnewline+1)
+
+ " The actual modification.
+ if fnamemodify(filename, expand) != ''
+ let retfilelist = retfilelist.fnamemodify(filename, expand).","
+ endif
+ let i = i + 1
+ endwhile
+
+ return substitute(retfilelist, ',$', '', '')
+endfunction
+
+" }}}
+" Tex_GetErrorList: returns vim's clist {{{
+" Description: returns the contents of the error list available via the :clist
+" command.
+function! Tex_GetErrorList()
+ let _a = @a
+ redir @a | silent! clist | redir END
+ let errlist = @a
+ let @a = _a
+
+ if errlist =~ 'E42: '
+ let errlist = ''
+ endif
+
+ return errlist
+endfunction " }}}
+" Tex_GetTempName: get the name of a temporary file in specified directory {{{
+" Description: Unlike vim's native tempname(), this function returns the name
+" of a temporary file in the directory specified. This enables
+" us to create temporary files in a specified directory.
+function! Tex_GetTempName(dirname)
+ let prefix = 'latexSuiteTemp'
+ let slash = (a:dirname =~ '\\\|/$' ? '' : '/')
+ let i = 0
+ while filereadable(a:dirname.slash.prefix.i.'.tex') && i < 1000
+ let i = i + 1
+ endwhile
+ if filereadable(a:dirname.slash.prefix.i.'.tex')
+ echoerr "Temporary file could not be created in ".a:dirname
+ return ''
+ endif
+ return expand(a:dirname.slash.prefix.i.'.tex', ':p')
+endfunction
+" }}}
+" Tex_MakeMap: creates a mapping from lhs to rhs if rhs is not already mapped {{{
+" Description:
+function! Tex_MakeMap(lhs, rhs, mode, extraargs)
+ if !hasmapto(a:rhs, a:mode)
+ exec a:mode.'map '.a:extraargs.' '.a:lhs.' '.a:rhs
+ endif
+endfunction " }}}
+" Tex_CD: cds to given directory escaping spaces if necessary {{{
+" " Description:
+function! Tex_CD(dirname)
+ exec 'cd '.Tex_EscapeSpaces(a:dirname)
+endfunction " }}}
+" Tex_EscapeSpaces: escapes unescaped spaces from a path name {{{
+" Description:
+function! Tex_EscapeSpaces(path)
+ return substitute(a:path, '[^\\]\(\\\\\)*\zs ', '\\ ', 'g')
+endfunction " }}}
+" Tex_FindFile: finds a file in the vim's 'path' {{{
+" Description: finds a file in vim's 'path'
+function! Tex_FindFile(fname, path, suffixesadd)
+ if exists('*findfile')
+ let _suffixesadd = &suffixesadd
+ let &suffixesadd = a:suffixesadd
+ let retval = findfile(a:fname, a:path)
+ let &suffixesadd = _suffixesadd
+ else
+ " split a new window so we do not screw with the current buffer. We
+ " want to use the same filename each time so that multiple scratch
+ " buffers are not created.
+ let retval = ''
+ silent! split __HOPEFULLY_THIS_FILE_DOES_NOT_EXIST__
+ let _suffixesadd = &suffixesadd
+ let _path = &path
+ let &suffixesadd = a:suffixesadd
+ let &path = a:path
+ exec 'silent! find '.a:fname
+ if bufname('%') != '__HOPEFULLY_THIS_FILE_DOES_NOT_EXIST__'
+ let retval = expand('%:p')
+ end
+ silent! bdelete!
+ let &suffixesadd = _suffixesadd
+ let &path = _path
+ endif
+ return retval
+endfunction " }}}
+
+" ==============================================================================
+" Smart key-mappings
+" ==============================================================================
+" TexQuotes: inserts `` or '' instead of " {{{
+if g:Tex_SmartKeyQuote
+
+ " TexQuotes: inserts `` or '' instead of "
+ " Taken from texmacro.vim by Benji Fisher <benji@e-math.AMS.org>
+ " TODO: Deal with nested quotes.
+ " The :imap that calls this function should insert a ", move the cursor to
+ " the left of that character, then call this with <C-R>= .
+ function! s:TexQuotes()
+ let l = line(".")
+ let c = col(".")
+ let restore_cursor = l . "G" . virtcol(".") . "|"
+ normal! H
+ let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor
+ execute restore_cursor
+ " In math mode, or when preceded by a \, just move the cursor past the
+ " already-inserted " character.
+ if synIDattr(synID(l, c, 1), "name") =~ "^texMath"
+ \ || (c > 1 && getline(l)[c-2] == '\')
+ return "\<Right>"
+ endif
+ " Find the appropriate open-quote and close-quote strings.
+ if exists("b:Tex_SmartQuoteOpen")
+ let open = b:Tex_SmartQuoteOpen
+ elseif exists("g:Tex_SmartQuoteOpen")
+ let open = g:Tex_SmartQuoteOpen
+ else
+ let open = "``"
+ endif
+ if exists("b:Tex_SmartQuoteClose")
+ let close = b:Tex_SmartQuoteClose
+ elseif exists("g:Tex_SmartQuoteClose")
+ let close = g:Tex_SmartQuoteClose
+ else
+ let close = "''"
+ endif
+ let boundary = '\|'
+ " This code seems to be obsolete, since this script variable is never
+ " set. The idea is that some languages use ",," as an open- or
+ " close-quote string, and we want to avoid confusing ordinary ","
+ " with a quote boundary.
+ if exists("s:TeX_strictquote")
+ if( s:TeX_strictquote == "open" || s:TeX_strictquote == "both" )
+ let boundary = '\<' . boundary
+ endif
+ if( s:TeX_strictquote == "close" || s:TeX_strictquote == "both" )
+ let boundary = boundary . '\>'
+ endif
+ endif
+
+ " Eventually return q; set it to the default value now.
+ let q = open
+ let pattern =
+ \ escape(open, '\~') .
+ \ boundary .
+ \ escape(close, '\~') .
+ \ '\|^$\|"'
+
+ while 1 " Look for preceding quote (open or close), ignoring
+ " math mode and '\"' .
+ call search(pattern, "bw")
+ if synIDattr(synID(line("."), col("."), 1), "name") !~ "^texMath"
+ \ && strpart(getline('.'), col('.')-2, 2) != '\"'
+ break
+ endif
+ endwhile
+
+ " Now, test whether we actually found a _preceding_ quote; if so, is it
+ " an open quote?
+ if ( line(".") < l || line(".") == l && col(".") < c )
+ if strpart(getline("."), col(".")-1) =~ '\V\^' . escape(open, '\')
+ if line(".") == l && col(".") + strlen(open) == c
+ " Insert "<++>''<++>" instead of just "''".
+ let q = IMAP_PutTextWithMovement("<++>".close."<++>")
+ else
+ let q = close
+ endif
+ endif
+ endif
+
+ " Return to line l, column c:
+ execute restore_cursor
+ " Start with <Del> to remove the " put in by the :imap .
+ return "\<Del>" . q
+
+ endfunction
+
+endif
+" }}}
+" SmartBS: smart backspacing {{{
+if g:Tex_SmartKeyBS
+
+ " SmartBS: smart backspacing
+ " SmartBS lets you treat diacritic characters (those \'{a} thingies) as a
+ " single character. This is useful for example in the following situation:
+ "
+ " \v{s}\v{t}astn\'{y} ('happy' in Slovak language :-) )
+ " If you will delete this normally (without using smartBS() function), you
+ " must press <BS> about 19x. With function smartBS() you must press <BS> only
+ " 7x. Strings like "\v{s}", "\'{y}" are considered like one character and are
+ " deleted with one <BS>.
+ let s:smartBS_pat = Tex_GetVarValue('Tex_SmartBSPattern')
+
+ fun! s:SmartBS_pat()
+ return s:smartBS_pat
+ endfun
+
+ " This function comes from Benji Fisher <benji@e-math.AMS.org>
+ " http://vim.sourceforge.net/scripts/download.php?src_id=409
+ " (modified/patched by Lubomir Host 'rajo' <host8 AT keplerDOTfmphDOTuniba.sk>)
+ function! s:SmartBS(pat)
+ let init = strpart(getline("."), 0, col(".")-1)
+ let matchtxt = matchstr(init, a:pat)
+ if matchtxt != ''
+ let bstxt = substitute(matchtxt, '.', "\<bs>", 'g')
+ return bstxt
+ else
+ return "\<bs>"
+ endif
+ endfun
+
+endif " }}}
+" SmartDots: inserts \cdots instead of ... in math mode otherwise \ldots {{{
+" if amsmath package is detected then just use \dots and let amsmath take care
+" of it.
+if g:Tex_SmartKeyDot
+
+ function! <SID>SmartDots()
+ if strpart(getline('.'), col('.')-3, 2) == '..' &&
+ \ g:Tex_package_detected =~ '\<amsmath\>'
+ return "\<bs>\<bs>\\dots"
+ elseif synIDattr(synID(line('.'),col('.')-1,0),"name") =~ '^texMath'
+ \&& strpart(getline('.'), col('.')-3, 2) == '..'
+ return "\<bs>\<bs>\\cdots"
+ elseif strpart(getline('.'), col('.')-3, 2) == '..'
+ return "\<bs>\<bs>\\ldots"
+ else
+ return '.'
+ endif
+ endfunction
+
+endif
+" }}}
+
+" source texproject.vim before other files
+exe 'source '.s:path.'/texproject.vim'
+
+" source all the relevant files.
+exe 'source '.s:path.'/texmenuconf.vim'
+exe 'source '.s:path.'/envmacros.vim'
+exe 'source '.s:path.'/elementmacros.vim'
+
+" source utf-8 or plain math menus
+if exists("g:Tex_UseUtfMenus") && g:Tex_UseUtfMenus != 0 && has("gui_running")
+ exe 'source '.s:path.'/mathmacros-utf.vim'
+else
+ exe 'source '.s:path.'/mathmacros.vim'
+endif
+
+exe 'source '.s:path.'/multicompile.vim'
+exe 'source '.s:path.'/compiler.vim'
+exe 'source '.s:path.'/folding.vim'
+exe 'source '.s:path.'/templates.vim'
+exe 'source '.s:path.'/custommacros.vim'
+exe 'source '.s:path.'/bibtex.vim'
+
+" source advanced math functions
+if g:Tex_AdvancedMath == 1
+ exe 'source '.s:path.'/brackets.vim'
+ exe 'source '.s:path.'/smartspace.vim'
+endif
+
+if g:Tex_Diacritics != 0
+ exe 'source '.s:path.'/diacritics.vim'
+endif
+
+exe 'source '.s:path.'/texviewer.vim'
+exe 'source '.s:path.'/version.vim'
+
+" ==============================================================================
+" Finally set up the folding, options, mappings and quit.
+" ==============================================================================
+" SetTeXOptions: sets options/mappings for this file. {{{
+function! <SID>SetTeXOptions()
+ " Avoid reinclusion.
+ if exists('b:doneSetTeXOptions')
+ return
+ endif
+ let b:doneSetTeXOptions = 1
+
+ exe 'setlocal dict^='.s:path.'/dictionaries/dictionary'
+
+ call Tex_Debug('SetTeXOptions: sourcing maps', 'main')
+ " smart functions
+ if g:Tex_SmartKeyQuote
+ inoremap <buffer> <silent> " "<Left><C-R>=<SID>TexQuotes()<CR>
+ endif
+ if g:Tex_SmartKeyBS
+ inoremap <buffer> <silent> <BS> <C-R>=<SID>SmartBS(<SID>SmartBS_pat())<CR>
+ endif
+ if g:Tex_SmartKeyDot
+ inoremap <buffer> <silent> . <C-R>=<SID>SmartDots()<CR>
+ endif
+
+ " This line seems to be necessary to source our compiler/tex.vim file.
+ " The docs are unclear why this needs to be done even though this file is
+ " the first compiler plugin in 'runtimepath'.
+ runtime compiler/tex.vim
+
+endfunction
+
+augroup LatexSuite
+ au LatexSuite User LatexSuiteFileType
+ \ call Tex_Debug('main.vim: Catching LatexSuiteFileType event', 'main') |
+ \ call <SID>SetTeXOptions()
+augroup END
+
+" }}}
+
+" ==============================================================================
+" Settings for taglist.vim plugin
+" ==============================================================================
+" Sets Tlist_Ctags_Cmd for taglist.vim and regexps for ctags {{{
+if exists("g:Tex_TaglistSupport") && g:Tex_TaglistSupport == 1
+ if !exists("g:tlist_tex_settings")
+ let g:tlist_tex_settings = 'tex;s:section;c:chapter;l:label;r:ref'
+ endif
+
+ if exists("Tlist_Ctags_Cmd")
+ let s:tex_ctags = Tlist_Ctags_Cmd
+ else
+ let s:tex_ctags = 'ctags' " Configurable in texrc?
+ endif
+
+ if exists("g:Tex_InternalTagsDefinitions") && g:Tex_InternalTagsDefinitions == 1
+ let Tlist_Ctags_Cmd = s:tex_ctags ." --langdef=tex --langmap=tex:.tex.ltx.latex"
+ \.' --regex-tex="/\\\\begin{abstract}/Abstract/s,abstract/"'
+ \.' --regex-tex="/\\\\part[ \t]*\*?\{[ \t]*([^}]*)\}/\1/s,part/"'
+ \.' --regex-tex="/\\\\chapter[ \t]*\*?\{[ \t]*([^}]*)\}/\1/s,chapter/"'
+ \.' --regex-tex="/\\\\section[ \t]*\*?\{[ \t]*([^}]*)\}/\1/s,section/"'
+ \.' --regex-tex="/\\\\subsection[ \t]*\*?\{[ \t]*([^}]*)\}/+ \1/s,subsection/"'
+ \.' --regex-tex="/\\\\subsubsection[ \t]*\*?\{[ \t]*([^}]*)\}/+ \1/s,subsubsection/"'
+ \.' --regex-tex="/\\\\paragraph[ \t]*\*?\{[ \t]*([^}]*)\}/+ \1/s,paragraph/"'
+ \.' --regex-tex="/\\\\subparagraph[ \t]*\*?\{[ \t]*([^}]*)\}/+ \1/s,subparagraph/"'
+ \.' --regex-tex="/\\\\begin{thebibliography}/BIBLIOGRAPHY/s,thebibliography/"'
+ \.' --regex-tex="/\\\\tableofcontents/TABLE OF CONTENTS/s,tableofcontents/"'
+ \.' --regex-tex="/\\\\frontmatter/FRONTMATTER/s,frontmatter/"'
+ \.' --regex-tex="/\\\\mainmatter/MAINMATTER/s,mainmatter/"'
+ \.' --regex-tex="/\\\\backmatter/BACKMATTER/s,backmatter/"'
+ \.' --regex-tex="/\\\\appendix/APPENDIX/s,appendix/"'
+ \.' --regex-tex="/\\\\label[ \t]*\*?\{[ \t]*([^}]*)\}/\1/l,label/"'
+ \.' --regex-tex="/\\\\ref[ \t]*\*?\{[ \t]*([^}]*)\}/\1/r,ref/"'
+ endif
+endif
+
+" }}}
+
+" commands to completion
+let g:Tex_completion_explorer = ','
+
+" Mappings defined in package files will overwrite all other
+exe 'source '.s:path.'/packages.vim'
+
+" ==============================================================================
+" These functions are used to immitate certain operating system type functions
+" (like reading the contents of a file), which are not available in vim. For
+" example, in Vim, its not possible to read the contents of a file without
+" opening a buffer on it, which means that over time, lots of buffers can open
+" up needlessly.
+"
+" If python is available (and allowed), then these functions utilize python
+" library functions without making calls to external programs.
+" ==============================================================================
+" Tex_GotoTempFile: open a temp file. reuse from next time on {{{
+function! Tex_GotoTempFile()
+ if !exists('s:tempFileName')
+ let s:tempFileName = tempname()
+ endif
+ exec 'silent! split '.s:tempFileName
+endfunction " }}}
+" Tex_IsPresentInFile: finds if a string str, is present in filename {{{
+if has('python') && g:Tex_UsePython
+ function! Tex_IsPresentInFile(regexp, filename)
+ exec 'python isPresentInFile(r"'.a:regexp.'", r"'.a:filename.'")'
+
+ return retval
+ endfunction
+else
+ function! Tex_IsPresentInFile(regexp, filename)
+ call Tex_GotoTempFile()
+
+ silent! 1,$ d _
+ let _report = &report
+ let _sc = &sc
+ set report=9999999 nosc
+ exec 'silent! 0r! '.g:Tex_CatCmd.' '.a:filename
+ set nomod
+ let &report = _report
+ let &sc = _sc
+
+ if search(a:regexp, 'w')
+ let retval = 1
+ else
+ let retval = 0
+ endif
+ silent! bd
+ return retval
+ endfunction
+endif " }}}
+" Tex_CatFile: returns the contents of a file in a <NL> seperated string {{{
+if has('*readfile')
+ function! Tex_CatFile(filename)
+ return join(readfile(filename), "\n")
+ endfunction
+elseif has('python') && g:Tex_UsePython
+ function! Tex_CatFile(filename)
+ " catFile assigns a value to retval
+ exec 'python catFile("'.a:filename.'")'
+
+ return retval
+ endfunction
+else
+ function! Tex_CatFile(filename)
+ if glob(a:filename) == ''
+ return ''
+ endif
+
+ call Tex_GotoTempFile()
+
+ silent! 1,$ d _
+
+ let _report = &report
+ let _sc = &sc
+ set report=9999999 nosc
+ exec 'silent! 0r! '.g:Tex_CatCmd.' '.a:filename
+
+ set nomod
+ let _a = @a
+ silent! normal! ggVG"ay
+ let retval = @a
+ let @a = _a
+
+ silent! bd
+ let &report = _report
+ let &sc = _sc
+ return retval
+ endfunction
+endif
+" }}}
+" Tex_DeleteFile: removes a file if present {{{
+" Description:
+if has('python') && g:Tex_UsePython
+ function! Tex_DeleteFile(filename)
+ exec 'python deleteFile(r"'.a:filename.'")'
+
+ if exists('retval')
+ return retval
+ endif
+ endfunction
+else
+ function! Tex_DeleteFile(filename)
+ if filereadable(a:filename)
+ exec '! '.g:Tex_RmCmd.' '.a:filename
+ endif
+ endfunction
+endif
+" }}}
+
+
+let &cpo = s:save_cpo
+
+" Define the functions in python if available.
+if !has('python') || !g:Tex_UsePython
+ finish
+endif
+
+exec 'pyfile '.expand('<sfile>:p:h').'/pytools.py'
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4:nowrap
diff --git a/dot_vim/ftplugin/latex-suite/mathmacros-utf.vim b/dot_vim/ftplugin/latex-suite/mathmacros-utf.vim
new file mode 100644
index 0000000..f5b5b85
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/mathmacros-utf.vim
@@ -0,0 +1,729 @@
+"=============================================================================
+" File: mathmacros.vim
+" Author: Mikolaj Machowski
+" Created: Tue Apr 23 06:00 PM 2002 PST
+"
+" Description: macros for everything mathematical in latex.
+"=============================================================================
+
+if !(has('gui_running') && g:Tex_MathMenus && g:Tex_Menus)
+ finish
+endif
+
+let s:MathMenuName = g:Tex_MenuPrefix.'Ma&th.'
+
+function! Tex_MathMenuRemove()
+ exe 'silent! aunmenu '.s:MathMenuName
+endfunction
+
+let s:pA = 'amenu <silent> 85 '.s:MathMenuName
+
+" brackets and dollars {{{
+exe s:pA.'\\&[\ \\] <plug><C-r>=IMAP_PutTextWithMovement("\\[<++>\\]<++>")<cr>'
+exe s:pA.'\\&(\ \\) <plug><C-r>=IMAP_PutTextWithMovement("\\(<++>\\)<++>")<cr>'
+exe s:pA.'&$\ $ <plug>$$'
+exe s:pA.'-sepmath1- :'
+" }}}
+" MATH arrows {{{
+let s:pA1 = s:pA."&Arrows."
+exe s:pA1.'Leftarrow<Tab>⇠<plug>\Leftarrow '
+exe s:pA1.'leftarrow<Tab>↠<plug>\leftarrow'
+exe s:pA1.'longleftarrow<Tab>↠<plug>\longleftarrow '
+exe s:pA1.'Longleftarrow<Tab>⇠<plug>\Longleftarrow '
+exe s:pA1.'rightarrow<Tab>→ <plug>\rightarrow '
+exe s:pA1.'longrightarrow<Tab>→ <plug>\longrightarrow '
+exe s:pA1.'Rightarrow<Tab>⇒ <plug>\Rightarrow '
+exe s:pA1.'Longrightarrow<Tab>⇒ <plug>\Longrightarrow '
+exe s:pA1.'leftrightarrow<Tab>⇆ <plug>\leftrightarrow '
+exe s:pA1.'longleftrightarrow<Tab>↔ <plug>\longleftrightarrow '
+exe s:pA1.'Leftrightarrow<Tab>⇔ <plug>\Leftrightarrow '
+exe s:pA1.'Longleftrightarrow<Tab>⇔ <plug>\Longleftrightarrow '
+exe s:pA1.'uparrow<Tab>↑ <plug>\uparrow '
+exe s:pA1.'Uparrow<Tab>⇑ <plug>\Uparrow '
+exe s:pA1.'downarrow<Tab>↓ <plug>\downarrow '
+exe s:pA1.'Downarrow<Tab>⇓ <plug>\Downarrow '
+exe s:pA1.'updownarrow<Tab>↕ <plug>\updownarrow '
+exe s:pA1.'Updownarrow<Tab>⇕ <plug>\Updownarrow '
+exe s:pA1.'nearrow<Tab>↗ <plug>\nearrow '
+exe s:pA1.'searrow<Tab>↘ <plug>\searrow '
+exe s:pA1.'swarrow<Tab>↙ <plug>\swarrow '
+exe s:pA1.'nwarrow<Tab>↖ <plug>\nwarrow '
+exe s:pA1.'mapsto<Tab>↦ <plug>\mapsto '
+exe s:pA1.'leadsto<Tab>↠<plug>\leadsto '
+exe s:pA1.'longmapsto<Tab>⇖ <plug>\longmapsto '
+exe s:pA1.'hookleftarrow<Tab>↩ <plug>\hookleftarrow '
+exe s:pA1.'hookrightarrow<Tab>↪ <plug>\hookrightarrow '
+exe s:pA1.'leftharpoonup<Tab>↼ <plug>\leftharpoonup '
+exe s:pA1.'leftharpoondown<Tab>↽ <plug>\leftharpoondown '
+exe s:pA1.'rightharpoonup<Tab>⇀ <plug>\rightharpoonup '
+exe s:pA1.'rightharpoondown<Tab>⇠<plug>\rightharpoondown '
+exe s:pA1.'rightleftharpoons<Tab>⇌ <plug>\rightleftharpoons '
+exe s:pA1.'overleftarrow<Tab> <plug>\overleftarrow '
+exe s:pA1.'overrightarrow<Tab> <plug>\overrightarrow '
+exe s:pA1.'overleftrightarrow<Tab> <plug>\overleftrightarrow '
+exe s:pA1.'underleftarrow<Tab> <plug>\underleftarrow '
+exe s:pA1.'underrightarrow<Tab> <plug>\underrightarrow '
+exe s:pA1.'underleftrightarrow<Tab> <plug>\underleftrightarrow '
+exe s:pA1.'xleftarrow<Tab> <plug>\xleftarrow '
+exe s:pA1.'xrightarrow<Tab> <plug>\xrightarrow '
+" }}}
+" MATH Arrows2 {{{
+let s:pA1a = s:pA."Arrows2."
+exe s:pA1a.'dashleftarrow<Tab>⇠ <plug>\dashleftarrow '
+exe s:pA1a.'leftleftarrows<Tab>⇇ <plug>\leftleftarrows '
+exe s:pA1a.'leftrightarrows<Tab>⇆ <plug>\leftrightarrows '
+exe s:pA1a.'Lleftarrow<Tab>⇚ <plug>\Lleftarrow '
+exe s:pA1a.'twoheadleftarrow<Tab>↞ <plug>\twoheadleftarrow '
+exe s:pA1a.'leftarrowtail<Tab>↢ <plug>\leftarrowtail '
+exe s:pA1a.'leftrightharpoons<Tab>⇋ <plug>\leftrightharpoons '
+exe s:pA1a.'Lsh<Tab>↰ <plug>\Lsh '
+exe s:pA1a.'looparrowleft<Tab>↫ <plug>\looparrowleft '
+exe s:pA1a.'curvearrowleft<Tab>↶ <plug>\curvearrowleft '
+exe s:pA1a.'circlearrowleft<Tab>↺ <plug>\circlearrowleft '
+exe s:pA1a.'dashrightarrow<Tab>⇢ <plug>\dashrightarrow '
+exe s:pA1a.'rightrightarrows<Tab>⇉ <plug>\rightrightarrows '
+exe s:pA1a.'rightleftarrows<Tab>⇄ <plug>\rightleftarrows '
+exe s:pA1a.'Rrightarrow<Tab>⇛ <plug>\Rrightarrow '
+exe s:pA1a.'twoheadrightarrow<Tab>↠ <plug>\twoheadrightarrow '
+exe s:pA1a.'rightarrowtail<Tab>↣ <plug>\rightarrowtail '
+exe s:pA1a.'rightleftharpoons<Tab>⇌ <plug>\rightleftharpoons '
+exe s:pA1a.'Rsh<Tab>↱ <plug>\Rsh '
+exe s:pA1a.'looparrowright<Tab>↬ <plug>\looparrowright '
+exe s:pA1a.'curvearrowright<Tab>↷ <plug>\curvearrowright '
+exe s:pA1a.'circlearrowright<Tab>↻ <plug>\circlearrowright '
+exe s:pA1a.'multimap<Tab>⊸ <plug>\multimap '
+exe s:pA1a.'upuparrows<Tab>⇈ <plug>\upuparrows '
+exe s:pA1a.'downdownarrows<Tab>⇊ <plug>\downdownarrows '
+exe s:pA1a.'upharpoonleft<Tab>↿ <plug>\upharpoonleft '
+exe s:pA1a.'upharpoonright<Tab>↾ <plug>\upharpoonright '
+exe s:pA1a.'downharpoonleft<Tab>⇃ <plug>\downharpoonleft '
+exe s:pA1a.'downharpoonright<Tab>⇂ <plug>\downharpoonright '
+exe s:pA1a.'rightsquigarrow<Tab>⇠<plug>\rightsquigarrow '
+exe s:pA1a.'leftrightsquigarrow<Tab>↭ <plug>\leftrightsquigarrow '
+" }}}
+" MATH nArrows {{{
+let s:pA1b = s:pA."&nArrows."
+exe s:pA1b.'nleftarrow<Tab>↚ <plug>\nleftarrow '
+exe s:pA1b.'nLeftarrow<Tab>⇠<plug>\nLeftarrow '
+exe s:pA1b.'nleftrightarrow<Tab>↮ <plug>\nleftrightarrow '
+exe s:pA1b.'nLeftrightarrow<Tab>⇎ <plug>\nleftrightarrow '
+exe s:pA1b.'nrightarrow<Tab>↛ <plug>\nrightarrow '
+exe s:pA1b.'nRightarrow<Tab>⇠<plug>\nRightarrow '
+" }}}
+" MATH Fonts {{{
+let s:pA2a = s:pA."&MathFonts."
+" exe s:pA2a.'mathbf{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathbf{<++>}<++>")<cr>'
+exe s:pA2a.'mathrm{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathrm{<++>}<++>")<cr>'
+exe s:pA2a.'mathsf{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathsf{<++>}<++>")<cr>'
+exe s:pA2a.'mathtt{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathtt{<++>}<++>")<cr>'
+exe s:pA2a.'mathit{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathit{<++>}<++>")<cr>'
+exe s:pA2a.'mathfrak{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathfrak{<++>}<++>")<cr>'
+exe s:pA2a.'mathcal{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathcal{<++>}<++>")<cr>'
+exe s:pA2a.'mathscr{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathscr{<++>}<++>")<cr>'
+exe s:pA2a.'mathbb{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathbb{<++>}<++>")<cr>'
+" }}}
+" Greek Letters small {{{
+let s:pA2 = s:pA."&Greek.&Small."
+exe s:pA2.'alpha<Tab>`a\ \ α <plug>\alpha '
+exe s:pA2.'beta<Tab>`b\ \ β <plug>\beta '
+exe s:pA2.'gamma<Tab>`g\ \ γ <plug>\gamma '
+exe s:pA2.'delta<Tab>`d\ \ δ <plug>\delta '
+exe s:pA2.'epsilon<Tab>∊ <plug>\epsilon '
+exe s:pA2.'varepsilon<Tab>`e\ \ ε <plug>\varepsilon '
+exe s:pA2.'zeta<Tab>`z\ \ ζ <plug>\zeta '
+exe s:pA2.'eta<Tab>`h\ \ η <plug>\eta '
+exe s:pA2.'theta<Tab>`q\ \ θ <plug>\theta '
+exe s:pA2.'vartheta<Tab>Ï‘ <plug>\vartheta '
+exe s:pA2.'iota<Tab>`i\ \ ι <plug>\iota '
+exe s:pA2.'kappa<Tab>`k\ \ κ <plug>\kappa '
+exe s:pA2.'lambda<Tab>`l\ \ λ <plug>\lambda '
+exe s:pA2.'mu<Tab>`m\ \ μ <plug>\mu '
+exe s:pA2.'nu<Tab>`n\ \ ν <plug>\nu '
+exe s:pA2.'xi<Tab>`x\ \ ξ <plug>\xi '
+exe s:pA2.'pi<Tab>`p\ \ π <plug>\pi '
+exe s:pA2.'varpi<Tab>Ï– <plug>\varpi '
+exe s:pA2.'rho<Tab>`r\ \ Ï <plug>\rho '
+exe s:pA2.'varrho<Tab>ϱ <plug>\varrho '
+exe s:pA2.'sigma<Tab>`s\ \ σ <plug>\sigma '
+exe s:pA2.'varsigma<Tab>`v\ \ Ï‚ <plug>\varsigma '
+exe s:pA2.'tau<Tab>`t\ \ Ï„ <plug>\tau '
+exe s:pA2.'upsilon<Tab>`u\ \ Ï… <plug>\upsilon '
+exe s:pA2.'phi<Tab>φ <plug>\phi '
+exe s:pA2.'varphi<Tab>`f\ \ Ï• <plug>\varphi '
+exe s:pA2.'chi<Tab>`c\ \ χ <plug>\chi '
+exe s:pA2.'psi<Tab>`y\ \ ψ <plug>\psi '
+exe s:pA2.'omega<Tab>`w\ \ ω <plug>\omega '
+" }}}
+" Greek Letters big {{{
+let s:pA3 = s:pA.'&Greek.&Big.'
+exe s:pA3.'Alpha<Tab>`A\ \ A <plug>\Alpha '
+exe s:pA3.'Beta<Tab>`B\ \ B <plug>\Beta '
+exe s:pA3.'Gamma<Tab>`G\ \ Γ <plug>\Gamma '
+exe s:pA3.'Delta<Tab>`D\ \ Δ <plug>\Delta '
+exe s:pA3.'Epsilon<Tab>`E\ \ E <plug>\Epsilon '
+exe s:pA3.'Zeta<Tab>`Z\ \ Z <plug>\mathrm{Z} '
+exe s:pA3.'Eta<Tab>`H\ \ H <plug>\Eta '
+exe s:pA3.'Theta<Tab>Θ <plug>\Theta '
+exe s:pA3.'Iota<Tab>I <plug>\mathrm{I} '
+exe s:pA3.'Kappa<Tab>`K\ \ K <plug>\Kappa '
+exe s:pA3.'Lambda<Tab>`L\ \ Λ <plug>\Lambda '
+exe s:pA3.'Mu<Tab>`M\ \ M <plug>\Mu '
+exe s:pA3.'Nu<Tab>`N\ \ N <plug>\Nu '
+exe s:pA3.'Xi<Tab>`X\ \ Ξ <plug>\Xi '
+exe s:pA3.'Pi<Tab>`P\ \ Π <plug>\Pi '
+exe s:pA3.'Rho<Tab>`R\ \ P <plug>\Rho '
+exe s:pA3.'Sigma<Tab>`S\ \ Σ <plug>\Sigma '
+exe s:pA3.'Tau<Tab>`T\ \ T <plug>\Tau '
+exe s:pA3.'Upsilon<Tab>`U\ \ Y <plug>\Upsilon '
+exe s:pA3.'Phi<Tab>Φ <plug>\Phi '
+exe s:pA3.'Chi<Tab>`C\ \ X <plug>\Chi '
+exe s:pA3.'Psi<Tab>`Y\ \ Ψ <plug>\Psi '
+exe s:pA3.'Omega<Tab>`W\ \ Ω <plug>\Omega '
+" }}}
+" BinaryRel1 {{{
+let s:pA4 = s:pA."&BinaryRel1."
+exe s:pA4.'ll<Tab>≪ <plug>\ll '
+exe s:pA4.'lll<Tab>⋘ <plug>\lll '
+exe s:pA4.'leqslant<Tab>≤ <plug>\leqslant '
+exe s:pA4.'leq<Tab>≤ <plug>\leq '
+exe s:pA4.'leqq<Tab>≦ <plug>\leqq '
+exe s:pA4.'eqslantless<Tab>⋜ <plug>\eqslantless '
+exe s:pA4.'lessdot<Tab>â‹– <plug>\lessdot '
+exe s:pA4.'prec<Tab>≺ <plug>\prec '
+exe s:pA4.'preceq<Tab>≼ <plug>\preceq '
+exe s:pA4.'preccurlyeq<Tab>≼ <plug>\preccurlyeq '
+exe s:pA4.'curlyeqprec<Tab>â‹ž <plug>\curlyeqprec '
+exe s:pA4.'lesssim<Tab>≲ <plug>\lesssim '
+exe s:pA4.'lessapprox<Tab> <plug>\lessapprox '
+exe s:pA4.'precsim<Tab>≾ <plug>\precsim '
+exe s:pA4.'precapprox<Tab> <plug>\precapprox '
+exe s:pA4.'in<Tab>∈ <plug>\in '
+exe s:pA4.'subset<Tab>`(\ \ ⊂ <plug>\subset '
+exe s:pA4.'Subset<Tab>`)\ \ â‹ <plug>\Subset '
+exe s:pA4.'subseteq<Tab>⊆ <plug>\subseteq '
+exe s:pA4.'subseteqq<Tab> <plug>\subseteqq '
+exe s:pA4.'sqsubset<Tab>⊠<plug>\sqsubset '
+exe s:pA4.'sqsubseteq<Tab>⊑ <plug>\sqsubseteq '
+exe s:pA4.'smile<Tab>⌣ <plug>\smile '
+exe s:pA4.'smallsmile<Tab>⌣ <plug>\smallsmile '
+exe s:pA4.'parallel<Tab>∥ <plug>\parallel '
+exe s:pA4.'shortparallel<Tab>∥ <plug>\shortparallel '
+exe s:pA4.'dashv<Tab>⊣ <plug>\dashv '
+exe s:pA4.'vdash<Tab>⊢ <plug>\vdash '
+exe s:pA4.'vDash<Tab>⊨ <plug>\vDash '
+exe s:pA4.'models<Tab>⊨ <plug>\models '
+exe s:pA4.'therefore<Tab>∴ <plug>\therefore '
+exe s:pA4.'backepsilon<Tab>∠<plug>\backepsilon '
+" }}}
+" nBinaryRel1 {{{
+let s:pA4a = s:pA."&nBinaryRel1."
+exe s:pA4a.'nless<Tab>≮ <plug>\nless '
+exe s:pA4a.'nleqslant<Tab>≰ <plug>\nleqslant '
+exe s:pA4a.'nleq<Tab> <plug>\nleq '
+exe s:pA4a.'lneq<Tab> <plug>\lneq '
+exe s:pA4a.'nleqq<Tab> <plug>\nleqq '
+exe s:pA4a.'lneqq<Tab>≨ <plug>\lneqq '
+exe s:pA4a.'lvertneqq<Tab> <plug>\lvertneqq '
+exe s:pA4a.'nprec<Tab>⊀ <plug>\nprec '
+exe s:pA4a.'npreceq<Tab>â‹  <plug>\npreceq '
+exe s:pA4a.'precneqq<Tab> <plug>\precneqq '
+exe s:pA4a.'lnsim<Tab>⋦ <plug>\lnsim '
+exe s:pA4a.'lnapprox<Tab> <plug>\lnapprox '
+exe s:pA4a.'precnsim<Tab>⋨ <plug>\precnsim '
+exe s:pA4a.'precnapprox<Tab> <plug>\precnapprox '
+exe s:pA4a.'notin<Tab>∉ <plug>\notin '
+exe s:pA4a.'nsubseteq<Tab>⊈ <plug>\nsubseteq '
+exe s:pA4a.'varsubsetneq<Tab> <plug>\varsubsetneq '
+exe s:pA4a.'subsetneq<Tab>⊊ <plug>\subsetneq '
+exe s:pA4a.'nsubseteqq<Tab> <plug>\nsubseteqq '
+exe s:pA4a.'varsubsetneqq<Tab> <plug>\varsubsetneqq '
+exe s:pA4a.'subsetneqq<Tab>⊈ <plug>\subsetneqq '
+exe s:pA4a.'nparallel<Tab>∦ <plug>\nparallel '
+exe s:pA4a.'nshortparallel<Tab> <plug>\nshortparallel '
+exe s:pA4a.'nvdash<Tab>⊬ <plug>\nvdash '
+exe s:pA4a.'nvDash<Tab>⊭ <plug>\nvDash '
+" }}}
+" BinaryRel2 {{{
+let s:pA5 = s:pA."&BinaryRel2."
+exe s:pA5.'gg<Tab>≫ <plug>\gg '
+exe s:pA5.'ggg<Tab>â‹™ <plug>\ggg '
+exe s:pA5.'gggtr<Tab>â‹™ <plug>\gggtr '
+exe s:pA5.'geqslant<Tab> <plug>\geqslant '
+exe s:pA5.'geq<Tab>≥ <plug>\geq '
+exe s:pA5.'geqq<Tab>≧ <plug>\geqq '
+exe s:pA5.'eqslantgtr<Tab> <plug>\eqslantgtr '
+exe s:pA5.'gtrdot<Tab>â‹— <plug>\gtrdot '
+exe s:pA5.'succ<Tab>≻ <plug>\succ '
+exe s:pA5.'succeq<Tab>≽ <plug>\succeq '
+exe s:pA5.'succcurlyeq<Tab>≽ <plug>\succcurlyeq '
+exe s:pA5.'curlyeqsucc<Tab>â‹Ÿ <plug>\curlyeqsucc '
+exe s:pA5.'gtrsim<Tab>≳ <plug>\gtrsim '
+exe s:pA5.'gtrapprox<Tab> <plug>\gtrapprox '
+exe s:pA5.'succsim<Tab>≿ <plug>\succsim '
+exe s:pA5.'succapprox<Tab> <plug>\succapprox '
+exe s:pA5.'ni<Tab>∋ <plug>\ni '
+exe s:pA5.'owns<Tab> <plug>\owns '
+exe s:pA5.'supset<Tab>⊃ <plug>\supset '
+exe s:pA5.'Supset<Tab>â‹‘ <plug>\Supset '
+exe s:pA5.'supseteq<Tab>⊇ <plug>\supseteq '
+exe s:pA5.'supseteqq<Tab> <plug>\supseteqq '
+exe s:pA5.'sqsupset<Tab>⊠<plug>\sqsupset '
+exe s:pA5.'sqsupseteq<Tab>⊒ <plug>\sqsupseteq '
+exe s:pA5.'frown<Tab>⌢ <plug>\frown '
+exe s:pA5.'smallfrown<Tab>⌢ <plug>\smallfrown '
+exe s:pA5.'mid<Tab>∣ <plug>\mid '
+exe s:pA5.'shortmid<Tab> <plug>\shortmid '
+exe s:pA5.'between<Tab>≬ <plug>\between '
+exe s:pA5.'Vdash<Tab>⊩ <plug>\Vdash '
+exe s:pA5.'bowtie<Tab>⋈ <plug>\bowtie '
+exe s:pA5.'Join<Tab>⋈ <plug>\Join '
+exe s:pA5.'pitchfork<Tab>â‹” <plug>\pitchfork '
+" }}}
+" {{{ nBinaryRel2
+let s:pA5a = s:pA."n&BinaryRel2." "TODO: dorobiæ logarytmy
+exe s:pA5a.'ngtr<Tab>≯ <plug>\ngtr '
+exe s:pA5a.'ngeqslant<Tab>≱ <plug>\ngeqslant '
+exe s:pA5a.'ngeq<Tab> <plug>\ngeq '
+exe s:pA5a.'gneq<Tab> <plug>\gneq '
+exe s:pA5a.'ngeqq<Tab> <plug>\ngeqq '
+exe s:pA5a.'gneqq<Tab>≩ <plug>\gneqq '
+exe s:pA5a.'nsucc<Tab>⊠<plug>\nsucc '
+exe s:pA5a.'nsucceq<Tab>â‹¡ <plug>\nsucceq '
+exe s:pA5a.'succneqq<Tab> <plug>\succneqq '
+exe s:pA5a.'gnsim<Tab>⋧ <plug>\gnsim '
+exe s:pA5a.'gnapprox<Tab> <plug>\gnapprox '
+exe s:pA5a.'succnsim<Tab>â‹© <plug>\succnsim '
+exe s:pA5a.'succnapprox<Tab> <plug>\succnapprox '
+exe s:pA5a.'nsupseteq<Tab>⊉ <plug>\nsupseteq '
+exe s:pA5a.'varsupsetneq<Tab> <plug>\varsupsetneq '
+exe s:pA5a.'supsetneq<Tab>⊋ <plug>\supsetneq '
+exe s:pA5a.'nsupseteqq<Tab> <plug>\nsupseteqq '
+exe s:pA5a.'varsupsetneqq<Tab> <plug>\varsupsetneqq '
+exe s:pA5a.'supsetneqq<Tab> <plug>\supsetneqq '
+exe s:pA5a.'nmid<Tab>∤ <plug>\nmid '
+exe s:pA5a.'nshortmid<Tab> <plug>\nshortmid '
+exe s:pA5a.'nVdash<Tab>⊮ <plug>\nVdash '
+" }}}
+" {{{ BinaryRel3
+let s:pA6 = s:pA."&BinaryRel3."
+exe s:pA6.'doteq<Tab>≠<plug>\doteq '
+exe s:pA6.'circeq<Tab>≗ <plug>\circeq '
+exe s:pA6.'eqcirc<Tab>≖ <plug>\eqcirc '
+exe s:pA6.'risingdotseq<Tab>≓ <plug>\risingdotseq '
+exe s:pA6.'doteqdot<Tab>≑ <plug>\doteqdot '
+exe s:pA6.'Doteq<Tab>≑ <plug>\Doteq '
+exe s:pA6.'fallingdotseq<Tab>≒ <plug>\fallingdotseq '
+exe s:pA6.'triangleq<Tab>≜ <plug>\triangleq '
+exe s:pA6.'bumpeq<Tab>≠<plug>\bumpeq '
+exe s:pA6.'Bumpeq<Tab>≎ <plug>\Bumpeq '
+exe s:pA6.'equiv<Tab>`=\ \ ≡ <plug>\equiv '
+exe s:pA6.'sim<Tab>∼ <plug>\sim '
+exe s:pA6.'thicksim<Tab>∼ <plug>\thicksim '
+exe s:pA6.'backsim<Tab>∽ <plug>\backsim '
+exe s:pA6.'simeq<Tab>≃ <plug>\simeq '
+exe s:pA6.'backsimeq<Tab>â‹ <plug>\backsimeq '
+exe s:pA6.'cong<Tab>≅ <plug>\cong '
+exe s:pA6.'approx<tab>=~\ \ ≈ <plug>\approx '
+exe s:pA6.'thickapprox<Tab>≈ <plug>\thickapprox '
+exe s:pA6.'approxeq<Tab>≊ <plug>\approxeq '
+exe s:pA6.'blacktriangleleft<Tab>â—€ <plug>\blacktriangleleft '
+exe s:pA6.'vartriangleleft<Tab>⊲ <plug>\vartriangleleft '
+exe s:pA6.'trianglelefteq<Tab>⊴ <plug>\trianglelefteq '
+exe s:pA6.'blacktriangleright<Tab>â–¶ <plug>\blacktriangleright '
+exe s:pA6.'vartriangleright<Tab>⊳ <plug>\vartriangleright '
+exe s:pA6.'trianglerighteq<Tab>⊵ <plug>\trianglerighteq '
+exe s:pA6.'perp<Tab>⊥ <plug>\perp '
+exe s:pA6.'asymp<Tab>≠<plug>\asymp '
+exe s:pA6.'Vvdash<Tab>⊪ <plug>\Vvdash '
+exe s:pA6.'propto<Tab>∠<plug>\propto '
+exe s:pA6.'varpropto<Tab>∠<plug>\varpropto '
+exe s:pA6.'because<Tab>∵ <plug>\because '
+" }}}
+" {{{ nBinaryRel3
+let s:pA6a = s:pA."&nBinaryRel3."
+exe s:pA6a.'neq<Tab>≠ <plug>\neq '
+exe s:pA6a.'nsim<Tab>≠<plug>\nsim '
+exe s:pA6a.'ncong<Tab>≆ <plug>\ncong '
+exe s:pA6a.'ntriangleleft<Tab>⋪ <plug>\ntriangleleft '
+exe s:pA6a.'ntrianglelefteq<Tab>⋬ <plug>\ntrianglelefteq '
+exe s:pA6a.'ntriangleright<Tab>â‹« <plug>\ntriangleright '
+exe s:pA6a.'ntrianglerighteq<Tab>â‹­ <plug>\ntrianglerighteq '
+" }}}
+" {{{ BinaryRel4
+let s:pA7 = s:pA."&BinaryRel4."
+exe s:pA7.'lessgtr<Tab>≶ <plug>\lessgtr '
+exe s:pA7.'gtrless<Tab>≷ <plug>\gtrless '
+exe s:pA7.'lesseqgtr<Tab>â‹š <plug>\lesseqgtr '
+exe s:pA7.'gtreqless<Tab>â‹› <plug>\gtreqless '
+exe s:pA7.'lesseqqgtr<Tab> <plug>\lesseqqgtr '
+exe s:pA7.'gtreqqless<Tab> <plug>\gtreqqless '
+" }}}
+" {{{ BigOp
+let s:pA8a = s:pA."&BigOp."
+exe s:pA8a.'limits<Tab> <plug>\limits'
+exe s:pA8a.'nolimits<Tab> <plug>\nolimits'
+exe s:pA8a.'displaylimits<Tab> <plug>\displaylimits'
+exe s:pA8a.'-seplimits- :'
+exe s:pA8a.'bigcap<Tab>`-\ \ â‹‚ <plug>\bigcap'
+exe s:pA8a.'bigcup<Tab>`+\ \ ⋃ <plug>\bigcup'
+exe s:pA8a.'bigodot<Tab>⊙ <plug>\bigodot'
+exe s:pA8a.'bigoplus<Tab>⊕ <plug>\bigoplus'
+exe s:pA8a.'bigotimes<Tab>⊗ <plug>\bigotimes'
+exe s:pA8a.'bigsqcup<Tab>⊔ <plug>\bigsqcup'
+exe s:pA8a.'biguplus<Tab>⊎ <plug>\biguplus'
+exe s:pA8a.'bigvee<Tab>â‹ <plug>\bigvee'
+exe s:pA8a.'bigwedge<Tab>â‹€ <plug>\bigwedge'
+exe s:pA8a.'coprod<Tab>∠<plug>\coprod'
+exe s:pA8a.'int<Tab>∫ <plug>\int'
+exe s:pA8a.'iint<Tab>∬ <plug>\int'
+exe s:pA8a.'iiint<Tab>∭ <plug>\int'
+exe s:pA8a.'oint<Tab>∮ <plug>\oint'
+exe s:pA8a.'prod<Tab>∠<plug>\prod'
+exe s:pA8a.'sum<Tab>∑ <plug>\sum'
+" }}}
+" {{{ BinaryOp
+let s:pA8 = s:pA."&BinaryOp."
+exe s:pA8.'pm<Tab>± <plug>\pm '
+exe s:pA8.'mp<Tab>∓ <plug>\mp '
+exe s:pA8.'dotplus<Tab>∔ <plug>\dotplus '
+exe s:pA8.'cdot<Tab>`.\ \ â‹… <plug>\cdot '
+exe s:pA8.'centerdot<Tab>â‹… <plug>\centerdot '
+exe s:pA8.'times<Tab>`*\ \ × <plug>\times '
+exe s:pA8.'ltimes<Tab>⋉ <plug>\ltimes '
+exe s:pA8.'rtimes<Tab>â‹Š <plug>\rtimes '
+exe s:pA8.'leftthreetimes<Tab>â‹‹ <plug>\leftthreetimes '
+exe s:pA8.'rightthreetimes<Tab>⋌ <plug>\rightthreetimes '
+exe s:pA8.'div<Tab>÷ <plug>\div '
+exe s:pA8.'divideontimes<Tab>⋇ <plug>\divideontimes '
+exe s:pA8.'bmod<Tab> <plug>\bmod '
+exe s:pA8.'ast<Tab>∗ <plug>\ast '
+exe s:pA8.'star<Tab>⋆ <plug>\star '
+exe s:pA8.'setminus<Tab>`\\\ \ ∖ <plug>\setminus '
+exe s:pA8.'smallsetminus<Tab>∖ <plug>\smallsetminus '
+exe s:pA8.'diamond<Tab>â‹„ <plug>\diamond '
+exe s:pA8.'wr<Tab>≀ <plug>\wr '
+exe s:pA8.'intercal<Tab>⊺ <plug>\intercal '
+exe s:pA8.'circ<Tab>`@\ \ ∘ <plug>\circ '
+exe s:pA8.'bigcirc<Tab>â—‹ <plug>\bigcirc '
+exe s:pA8.'bullet<Tab>∙ <plug>\bullet '
+exe s:pA8.'cap<Tab>∩ <plug>\cap '
+exe s:pA8.'Cap<Tab>â‹’ <plug>\Cap '
+exe s:pA8.'cup<Tab>∪ <plug>\cup '
+exe s:pA8.'Cup<Tab>â‹“ <plug>\Cup '
+exe s:pA8.'sqcap<Tab>⊓ <plug>\sqcap '
+exe s:pA8.'sqcup<Tab>⊔ <plug>\sqcup'
+exe s:pA8.'amalg<Tab> <plug>\amalg '
+exe s:pA8.'uplus<Tab>⊎ <plug>\uplus '
+exe s:pA8.'triangleleft<Tab>â— <plug>\triangleleft '
+exe s:pA8.'triangleright<Tab>â–· <plug>\triangleright '
+exe s:pA8.'bigtriangleup<Tab>â–³ <plug>\bigtriangleup '
+exe s:pA8.'bigtriangledown<Tab>â–½ <plug>\bigtriangledown '
+exe s:pA8.'vee<Tab>∨ <plug>\vee '
+exe s:pA8.'veebar<Tab>⊻ <plug>\veebar '
+exe s:pA8.'curlyvee<Tab>â‹Ž <plug>\curlyvee '
+exe s:pA8.'wedge<Tab>`&\ \ ∧ <plug>\wedge '
+exe s:pA8.'barwedge<Tab>⊼ <plug>\barwedge '
+exe s:pA8.'doublebarwedge<Tab>⌆ <plug>\doublebarwedge '
+exe s:pA8.'curlywedge<Tab>â‹ <plug>\curlywedge '
+exe s:pA8.'oplus<Tab>⊕ <plug>\oplus '
+exe s:pA8.'ominus<Tab>⊖ <plug>\ominus '
+exe s:pA8.'otimes<Tab>⊗ <plug>\otimes '
+exe s:pA8.'oslash<Tab>⊘ <plug>\oslash '
+exe s:pA8.'boxplus<Tab>⊞ <plug>\boxplus '
+exe s:pA8.'boxminus<Tab>⊟ <plug>\boxminus '
+exe s:pA8.'boxtimes<Tab>⊠ <plug>\boxtimes '
+exe s:pA8.'boxdot<Tab>⊡ <plug>\boxdot '
+exe s:pA8.'odot<Tab>⊙ <plug>\odot '
+exe s:pA8.'circledast<Tab>⊛ <plug>\circledast '
+exe s:pA8.'circleddash<Tab>⊠<plug>\circleddash '
+exe s:pA8.'circledcirc<Tab>⊚ <plug>\circledcirc '
+exe s:pA8.'dagger<Tab>† <plug>\dagger '
+exe s:pA8.'ddagger<Tab>‡ <plug>\ddagger '
+exe s:pA8.'lhd<Tab>⊲ <plug>\lhd '
+exe s:pA8.'unlhd<Tab>⊴ <plug>\unlhd '
+exe s:pA8.'rhd<Tab>⊳ <plug>\rhd '
+exe s:pA8.'unrhd<Tab>⊵ <plug>\unrhd '
+" }}}
+" {{{ Other1
+let s:pA9 = s:pA."&Other1."
+" exe s:pA9.'hat<Tab>â <plug>\hat '
+exe s:pA9.'check<Tab>ÇŽ <plug>\check '
+exe s:pA9.'grave<Tab>à <plug>\grave '
+exe s:pA9.'acute<Tab>á <plug>\acute '
+exe s:pA9.'dot<Tab>ȧ <plug>\dot '
+exe s:pA9.'ddot<Tab>ä <plug>\ddot '
+exe s:pA9.'tilde<Tab>`,\ \ ã <plug>\tilde '
+exe s:pA9.'breve<Tab>ă <plug>\breve '
+exe s:pA9.'bar<Tab>Ä <plug>\bar '
+exe s:pA9.'vec<Tab>a⃗ <plug>\vec '
+exe s:pA9.'aleph<Tab>× <plug>\aleph '
+exe s:pA9.'hbar<Tab>â„ <plug>\hbar '
+exe s:pA9.'imath<Tab> <plug>\imath '
+exe s:pA9.'jmath<Tab> <plug>\jmath '
+exe s:pA9.'ell<Tab>â„“ <plug>\ell '
+exe s:pA9.'wp<Tab>℘ <plug>\wp '
+exe s:pA9.'Re<Tab>ℜ <plug>\Re '
+exe s:pA9.'Im<Tab>â„‘ <plug>\Im '
+exe s:pA9.'partial<Tab>∂ <plug>\partial '
+exe s:pA9.'infty<Tab>`8\ \ ∞ <plug>\infty '
+exe s:pA9.'prime<Tab>′ <plug>\prime '
+exe s:pA9.'emptyset<Tab>∅ <plug>\emptyset '
+exe s:pA9.'nabla<Tab>∇ <plug>\nabla '
+exe s:pA9.'surd<Tab>√ <plug>\surd '
+exe s:pA9.'top<Tab>⊤ <plug>\top '
+exe s:pA9.'bot<Tab>⊥ <plug>\bot '
+exe s:pA9.'angle<Tab>∠ <plug>\angle '
+exe s:pA9.'triangle<Tab>â–³ <plug>\triangle '
+exe s:pA9.'backslash<Tab>\\ <plug>\backslash '
+exe s:pA9.'forall<Tab>∀ <plug>\forall '
+exe s:pA9.'exists<Tab>∃ <plug>\exists '
+exe s:pA9.'neg<Tab>¬ <plug>\neg '
+exe s:pA9.'flat<Tab>â™­ <plug>\flat '
+exe s:pA9.'natural<Tab>â™® <plug>\natural '
+exe s:pA9.'sharp<Tab>♯ <plug>\sharp '
+exe s:pA9.'clubsuit<Tab>♣ <plug>\clubsuit '
+exe s:pA9.'diamondsuit<Tab>♢ <plug>\diamondsuit '
+exe s:pA9.'heartsuit<Tab>♡ <plug>\heartsuit '
+exe s:pA9.'spadesuit<Tab>â™  <plug>\spadesuit '
+exe s:pA9.'S<Tab>§ <plug>\S '
+exe s:pA9.'P<Tab>¶ <plug>\P'
+" }}}
+" {{{ MathCreating
+let s:pA10 = s:pA."&MathCreating."
+exe s:pA10.'not<Tab> <plug>\not'
+exe s:pA10.'mkern<Tab> <plug>\mkern'
+exe s:pA10.'mathbin<Tab> <plug>\mathbin'
+exe s:pA10.'mathrel<Tab> <plug>\mathrel'
+exe s:pA10.'stackrel<Tab> <plug>\stackrel'
+exe s:pA10.'mathord<Tab> <plug>\mathord'
+" }}}
+" {{{ Styles
+let s:pA11 = s:pA."&Styles."
+exe s:pA11.'displaystyle<Tab> <plug>\displaystyle'
+exe s:pA11.'textstyle<Tab> <plug>\textstyle'
+exe s:pA11.'scritpstyle<Tab> <plug>\scritpstyle'
+exe s:pA11.'scriptscriptstyle<Tab> <plug>\scriptscriptstyle'
+" }}}
+" {{{ MathDiacritics
+let s:pA12 = s:pA."&MathDiacritics."
+exe s:pA12.'acute{}<Tab>á <plug><C-r>=IMAP_PutTextWithMovement("\\acute{<++>}<++>")<cr>'
+exe s:pA12.'bar{}<Tab>`_\ \ Ä <plug><C-r>=IMAP_PutTextWithMovement("\\bar{<++>}<++>")<cr>'
+exe s:pA12.'breve{}<Tab>ă <plug><C-r>=IMAP_PutTextWithMovement("\\breve{<++>}<++>")<cr>'
+exe s:pA12.'check{}<Tab>ÇŽ <plug><C-r>=IMAP_PutTextWithMovement("\\check{<++>}<++>")<cr>'
+exe s:pA12.'ddot{}<Tab>`:\ \ ä <plug><C-r>=IMAP_PutTextWithMovement("\\ddot{<++>}<++>")<cr>'
+exe s:pA12.'dot{}<Tab>`;\ \ ȧ <plug><C-r>=IMAP_PutTextWithMovement("\\dot{<++>}<++>")<cr>'
+exe s:pA12.'grave{}<Tab>à <plug><C-r>=IMAP_PutTextWithMovement("\\grave{<++>}<++>")<cr>'
+" exe s:pA12.'hat{}<Tab>`^\ \ â <plug><C-r>=IMAP_PutTextWithMovement("\\hat{<++>}<++>")<cr>'
+exe s:pA12.'tilde{}<tab>`~\ \ ã <plug><C-r>=IMAP_PutTextWithMovement("\\tilde{<++>}<++>")<cr>'
+exe s:pA12.'vec{}<Tab>a⃗ <plug><C-r>=IMAP_PutTextWithMovement("\\vec{<++>}<++>")<cr>'
+exe s:pA12.'widehat{}<Tab> <plug><C-r>=IMAP_PutTextWithMovement("\\widehat{<++>}<++>")<cr>'
+exe s:pA12.'widetilde{}<Tab> <plug><C-r>=IMAP_PutTextWithMovement("\\widetilde{<++>}<++>")<cr>'
+exe s:pA12.'imath<Tab> <plug><C-r>=IMAP_PutTextWithMovement("\\imath")<cr>'
+exe s:pA12.'jmath<Tab> <plug><C-r>=IMAP_PutTextWithMovement("\\jmath")<cr>'
+" }}}
+" {{{ OverlineAndCo
+let s:pA13 = s:pA."&OverlineAndCo."
+exe s:pA13.'overline{} <plug><C-r>=IMAP_PutTextWithMovement("\\overline{}")<cr>'
+exe s:pA13.'underline{} <plug><C-r>=IMAP_PutTextWithMovement("\\underline{}")<cr>'
+exe s:pA13.'overrightarrow{} <plug><C-r>=IMAP_PutTextWithMovement("\\overrightarrow{}")<cr>'
+exe s:pA13.'overleftarrow{} <plug><C-r>=IMAP_PutTextWithMovement("\\overleftarrow{}")<cr>'
+exe s:pA13.'overbrace{} <plug><C-r>=IMAP_PutTextWithMovement("\\overbrace{}")<cr>'
+exe s:pA13.'underbrace{} <plug><C-r>=IMAP_PutTextWithMovement("\\underbrace{}")<cr>'
+" }}}
+" {{{ Symbols1
+let s:pA14a = s:pA."&Symbols1."
+exe s:pA14a.'forall<Tab>∀ <plug>\forall '
+exe s:pA14a.'exists<Tab>∃ <plug>\exists '
+exe s:pA14a.'nexists<Tab>∄ <plug>\nexists '
+exe s:pA14a.'neg<Tab>¬ <plug>\neg '
+exe s:pA14a.'top<Tab>⊤ <plug>\top '
+exe s:pA14a.'bot<Tab>⊥ <plug>\bot '
+exe s:pA14a.'emptyset<Tab>∅ <plug>\emptyset '
+exe s:pA14a.'varnothing<Tab>⌀ <plug>\varnothing '
+exe s:pA14a.'infty<Tab>∞ <plug>\infty '
+exe s:pA14a.'aleph<Tab>× <plug>\aleph '
+exe s:pA14a.'beth<Tab>ב <plug>\beth '
+exe s:pA14a.'gimel<Tab>×’ <plug>\gimel '
+exe s:pA14a.'daleth<Tab>ד <plug>\daleth '
+exe s:pA14a.'hbar<Tab> <plug>\hbar '
+exe s:pA14a.'hslash<Tab>â„ <plug>\hslash '
+exe s:pA14a.'diagup<Tab>â„ <plug>\diagup '
+exe s:pA14a.'vert<Tab>\| <plug>\vert '
+exe s:pA14a.'Vert<Tab>∥ <plug>\Vert '
+exe s:pA14a.'backslash<Tab>\\ <plug>\backslash '
+exe s:pA14a.'diagdown<Tab> <plug>\diagdown '
+exe s:pA14a.'Bbbk<Tab>ᵕ <plug>\Bbbk '
+exe s:pA14a.'P<Tab>¶ <plug>\P '
+exe s:pA14a.'S<Tab>§ <plug>\S '
+" }}}
+" {{{ Symbols2
+let s:pA14b = s:pA."&Symbols2."
+exe s:pA14b.'# <plug>\# '
+exe s:pA14b.'% <plug>\% '
+exe s:pA14b.'_<Tab> <plug>\_ '
+exe s:pA14b.'$ <plug>\$ '
+exe s:pA14b.'& <plug>\& '
+exe s:pA14b.'imath<Tab> <plug>\imath '
+exe s:pA14b.'jmath<Tab> <plug>\jmath '
+exe s:pA14b.'ell<Tab>â„“ <plug>\ell '
+exe s:pA14b.'wp<Tab>℘ <plug>\wp '
+exe s:pA14b.'Re<Tab>ℜ <plug>\Re '
+exe s:pA14b.'Im<Tab>â„‘ <plug>\Im '
+exe s:pA14b.'prime<Tab>′ <plug>\prime '
+exe s:pA14b.'backprime<Tab>‵ <plug>\backprime '
+exe s:pA14b.'nabla<Tab>∇ <plug>\nabla '
+exe s:pA14b.'surd<Tab>√ <plug>\surd '
+exe s:pA14b.'flat<Tab>â™­ <plug>\flat '
+exe s:pA14b.'sharp<Tab>♯ <plug>\sharp '
+exe s:pA14b.'natural<Tab>â™® <plug>\natural '
+exe s:pA14b.'eth<Tab>ð <plug>\eth '
+exe s:pA14b.'bigstar<Tab>★ <plug>\bigstar '
+exe s:pA14b.'circledS<Tab>Ⓢ <plug>\circledS '
+exe s:pA14b.'Finv<Tab>Ⅎ <plug>\Finv '
+exe s:pA14b.'dag<Tab>† <plug>\dag '
+exe s:pA14b.'ddag<Tab>‡ <plug>\ddag '
+" }}}
+" {{{ Symbols3
+let s:pA14c = s:pA."&Symbols3."
+exe s:pA14c.'angle<Tab>∠ <plug>\angle '
+exe s:pA14c.'measuredangle<Tab>∡ <plug>\measuredangle '
+exe s:pA14c.'sphericalangle<Tab>∢ <plug>\sphericalangle '
+exe s:pA14c.'spadesuit<Tab>â™  <plug>\spadesuit '
+exe s:pA14c.'heartsuit<Tab>♡ <plug>\heartsuit '
+exe s:pA14c.'diamondsuit<Tab>♢ <plug>\diamondsuit '
+exe s:pA14c.'clubsuit<Tab>♣ <plug>\clubsuit '
+exe s:pA14c.'lozenge<Tab>â—Š <plug>\lozenge '
+exe s:pA14c.'blacklozenge<Tab>â—† <plug>\blacklozenge '
+exe s:pA14c.'Diamond<Tab>â—‡ <plug>\Diamond '
+exe s:pA14c.'triangle<Tab>â–³ <plug>\triangle '
+exe s:pA14c.'vartriangle<Tab>â–³ <plug>\vartriangle '
+exe s:pA14c.'blacktriangle<Tab>â–² <plug>\blacktriangle '
+exe s:pA14c.'triangledown<Tab>â–½ <plug>\triangledown '
+exe s:pA14c.'blacktriangledown<Tab>â–¼ <plug>\blacktriangledown '
+exe s:pA14c.'Box<Tab>â–¡ <plug>\Box '
+exe s:pA14c.'square<Tab>â–¡ <plug>\square '
+exe s:pA14c.'blacksquare<Tab>â–  <plug>\blacksquare '
+exe s:pA14c.'complement<Tab>∠<plug>\complement '
+exe s:pA14c.'mho<Tab>℧ <plug>\mho '
+exe s:pA14c.'Game<Tab>â… <plug>\Game '
+exe s:pA14c.'partial<Tab>`6\ \ ∂ <plug>\partial '
+exe s:pA14c.'smallint<Tab>∫ <plug>\smallint '
+" }}}
+" {{{ Logic
+let s:pA15 = s:pA."&Logic."
+exe s:pA15.'lnot<Tab>¬ <plug>\lnot '
+exe s:pA15.'lor<Tab>∨ <plug>\lor '
+exe s:pA15.'land<Tab>∧ <plug>\land '
+" }}}
+" {{{ Limits1
+let s:pA16 = s:pA."&Limits1."
+exe s:pA16.'left<Tab>( <plug>\left'
+exe s:pA16.'right<Tab>) <plug>\right'
+exe s:pA16.'-sepbigl- :'
+exe s:pA16.'bigl<Tab> <plug>\bigl'
+exe s:pA16.'Bigl<Tab> <plug>\Bigl'
+exe s:pA16.'biggl<Tab> <plug>\biggl'
+exe s:pA16.'Biggl<Tab> <plug>\Biggl'
+exe s:pA16.'-sepbigr- :'
+exe s:pA16.'bigr<Tab> <plug>\bigr'
+exe s:pA16.'Bigr<Tab> <plug>\Bigr'
+exe s:pA16.'biggr<Tab> <plug>\biggr'
+exe s:pA16.'Biggr<Tab> <plug>\Biggr'
+exe s:pA16.'-sepbig- :'
+exe s:pA16.'big<Tab> <plug>\big'
+exe s:pA16.'bigm<Tab> <plug>\bigm'
+exe s:pA16.'-sepfloor- :'
+exe s:pA16.'lfloor<Tab>⌊ <plug>\lfloor '
+exe s:pA16.'lceil<Tab>⌈ <plug>\lceil '
+exe s:pA16.'rfloor<Tab>⌋ <plug>\rfloor '
+exe s:pA16.'rceil<Tab>⌉ <plug>\rceil '
+exe s:pA16.'-sepangle- :'
+exe s:pA16.'langle<Tab>〈 <plug>\langle '
+exe s:pA16.'rangle<Tab>〉 <plug>\rangle '
+" }}}
+" {{{ Limits2
+let s:pA16a = s:pA."&Limits2."
+exe s:pA16a.'ulcorner<Tab>⌜ <plug>\ulcorner '
+exe s:pA16a.'urcorner<Tab>⌠<plug>\urcorner '
+exe s:pA16a.'llcorner<Tab>⌞ <plug>\llcorner '
+exe s:pA16a.'rlcorner<Tab>⌟ <plug>\rlcorner '
+exe s:pA16a.'-sepcorner- :'
+exe s:pA16a.'vert<Tab>\| <plug>\vert '
+exe s:pA16a.'Vert<Tab>∥ <plug>\Vert '
+exe s:pA16a.'lvert<Tab> <plug>\lvert '
+exe s:pA16a.'lVert<Tab> <plug>\lVert '
+exe s:pA16a.'rvert<Tab> <plug>\rvert '
+exe s:pA16a.'rVert<Tab> <plug>\rVert '
+exe s:pA16a.'uparrow<Tab>↑ <plug>\uparrow '
+exe s:pA16a.'Uparrow<Tab>⇑ <plug>\Uparrow '
+exe s:pA16a.'downarrow<Tab>↓ <plug>\downarrow '
+exe s:pA16a.'Downarrow<Tab>⇓ <plug>\Downarrow '
+exe s:pA16a.'updownarrow<Tab>↕ <plug>\updownarrow '
+exe s:pA16a.'Updownarrow<Tab>⇕ <plug>\Updownarrow '
+exe s:pA16a.'lgroup<Tab> <plug>\lgroup '
+exe s:pA16a.'rgroup<Tab> <plug>\rgroup '
+exe s:pA16a.'lmoustache<Tab>∫ <plug>\lmoustache '
+exe s:pA16a.'rmoustache<Tab> <plug>\rmoustache '
+exe s:pA16a.'arrowvert<Tab> <plug>\arrowvert '
+exe s:pA16a.'Arrowvert<Tab> <plug>\Arrowvert '
+exe s:pA16a.'bracevert<Tab> <plug>\bracevert '
+" }}}
+" {{{ Log-likes
+let s:pA17 = s:pA."Lo&g-likes."
+exe s:pA17.'arccos<Tab> <plug>\arccos '
+exe s:pA17.'arcsin<Tab> <plug>\arcsin '
+exe s:pA17.'arctan<Tab> <plug>\arctan '
+exe s:pA17.'arg<Tab> <plug>\arg '
+exe s:pA17.'cos<Tab> <plug>\cos '
+exe s:pA17.'cosh<Tab> <plug>\cosh '
+exe s:pA17.'cot<Tab> <plug>\cot '
+exe s:pA17.'coth<Tab> <plug>\coth '
+exe s:pA17.'csc<Tab> <plug>\csc '
+exe s:pA17.'deg<Tab> <plug>\deg '
+exe s:pA17.'det<Tab> <plug>\det '
+exe s:pA17.'dim<Tab> <plug>\dim '
+exe s:pA17.'exp<Tab> <plug>\exp '
+exe s:pA17.'gcd<Tab> <plug>\gcd '
+exe s:pA17.'hom<Tab> <plug>\hom '
+exe s:pA17.'inf<Tab> <plug>\inf '
+exe s:pA17.'injlim<Tab> <plug>\injlim '
+exe s:pA17.'ker<Tab> <plug>\ker '
+exe s:pA17.'lg<Tab> <plug>\lg '
+exe s:pA17.'lim<Tab> <plug>\lim '
+exe s:pA17.'liminf<Tab> <plug>\liminf '
+exe s:pA17.'limsup<Tab> <plug>\limsup '
+exe s:pA17.'ln<Tab> <plug>\ln '
+exe s:pA17.'log<Tab> <plug>\log '
+exe s:pA17.'max<Tab> <plug>\max '
+exe s:pA17.'min<Tab> <plug>\min '
+exe s:pA17.'Pr<Tab> <plug>\Pr '
+exe s:pA17.'projlim<Tab> <plug>\projlim '
+exe s:pA17.'sec<Tab> <plug>\sec '
+exe s:pA17.'sin<Tab> <plug>\sin '
+exe s:pA17.'sinh<Tab> <plug>\sinh '
+exe s:pA17.'sup<Tab> <plug>\sup '
+exe s:pA17.'tan<Tab> <plug>\tan '
+exe s:pA17.'tanh<Tab> <plug>\tanh '
+exe s:pA17.'varlimsup<Tab> <plug>\varlimsup '
+exe s:pA17.'varliminf<Tab> <plug>\varliminf '
+exe s:pA17.'varinjlim<Tab> <plug>\varinjlim '
+exe s:pA17.'varprojlim<Tab> <plug>\varprojlim '
+" }}}
+" {{{ MathSpacing
+let s:pA18 = s:pA."MathSpacing."
+exe s:pA18.', <plug>\, '
+exe s:pA18.': <plug>\: '
+exe s:pA18.'; <plug>\; '
+exe s:pA18.'[space] <plug>\ '
+exe s:pA18.'quad<Tab> <plug>\quad '
+exe s:pA18.'qquad<Tab> <plug>\qquad '
+exe s:pA18.'! <plug>\! '
+exe s:pA18.'thinspace<Tab> <plug>\thinspace '
+exe s:pA18.'medspace<Tab> <plug>\medspace '
+exe s:pA18.'thickspace<Tab> <plug>\thickspace '
+exe s:pA18.'negthinspace<Tab> <plug>\negthinspace '
+exe s:pA18.'negmedspace<Tab> <plug>\negmedspace '
+exe s:pA18.'negthickspace<Tab> <plug>\negthickspace '
+" 1}}}
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4:fenc=utf-8
diff --git a/dot_vim/ftplugin/latex-suite/mathmacros.vim b/dot_vim/ftplugin/latex-suite/mathmacros.vim
new file mode 100644
index 0000000..f160db5
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/mathmacros.vim
@@ -0,0 +1,730 @@
+"=============================================================================
+" File: mathmacros.vim
+" Author: Mikolaj Machowski
+" Created: Tue Apr 23 06:00 PM 2002 PST
+"
+" Description: macros for everything mathematical in latex.
+"=============================================================================
+
+if !(has('gui_running') && g:Tex_MathMenus && g:Tex_Menus)
+ finish
+endif
+
+let s:MathMenuName = g:Tex_MenuPrefix.'&Math.'
+
+function! Tex_MathMenuRemove()
+ exe 'silent! aunmenu '.s:MathMenuName
+endfunction
+
+let s:pA = 'amenu <silent> '.g:Tex_NextMenuLocation.' '.s:MathMenuName
+let g:Tex_NextMenuLocation = g:Tex_NextMenuLocation + 1
+
+" brackets and dollars {{{
+exe s:pA.'\\&[\ \\] <plug><C-r>=IMAP_PutTextWithMovement("\\[<++>\\]<++>")<cr>'
+exe s:pA.'\\&(\ \\) <plug><C-r>=IMAP_PutTextWithMovement("\\(<++>\\)<++>")<cr>'
+exe s:pA.'&$\ $ <plug>$$'
+exe s:pA.'-sepmath1- :'
+" }}}
+" MATH arrows {{{
+let s:pA1 = s:pA."&Arrows."
+exe s:pA1.'Leftarrow <plug>\leftarrow '
+exe s:pA1.'leftarrow <plug>\leftarrow'
+exe s:pA1.'longleftarrow <plug>\longleftarrow '
+exe s:pA1.'Leftarrow <plug>\Leftarrow '
+exe s:pA1.'Longleftarrow <plug>\Longleftarrow '
+exe s:pA1.'rightarrow <plug>\rightarrow '
+exe s:pA1.'longrightarrow <plug>\longrightarrow '
+exe s:pA1.'Rightarrow <plug>\Rightarrow '
+exe s:pA1.'Longrightarrow <plug>\Longrightarrow '
+exe s:pA1.'leftrightarrow <plug>\leftrightarrow '
+exe s:pA1.'longleftrightarrow <plug>\longleftrightarrow '
+exe s:pA1.'Leftrightarrow <plug>\Leftrightarrow '
+exe s:pA1.'Longleftrightarrow <plug>\Longleftrightarrow '
+exe s:pA1.'uparrow <plug>\uparrow '
+exe s:pA1.'Uparrow <plug>\Uparrow '
+exe s:pA1.'downarrow <plug>\downarrow '
+exe s:pA1.'Downarrow <plug>\Downarrow '
+exe s:pA1.'updownarrow <plug>\updownarrow '
+exe s:pA1.'Updownarrow <plug>\Updownarrow '
+exe s:pA1.'nearrow <plug>\nearrow '
+exe s:pA1.'searrow <plug>\searrow '
+exe s:pA1.'swarrow <plug>\swarrow '
+exe s:pA1.'nwarrow <plug>\nwarrow '
+exe s:pA1.'mapsto <plug>\mapsto '
+exe s:pA1.'leadsto <plug>\leadsto '
+exe s:pA1.'longmapsto <plug>\longmapsto '
+exe s:pA1.'hookleftarrow <plug>\hookleftarrow '
+exe s:pA1.'hookrightarrow <plug>\hookrightarrow '
+exe s:pA1.'leftharpoonup <plug>\leftharpoonup '
+exe s:pA1.'leftharpoondown <plug>\leftharpoondown '
+exe s:pA1.'rightharpoonup <plug>\rightharpoonup '
+exe s:pA1.'rightharpoondown <plug>\rightharpoondown '
+exe s:pA1.'rightleftharpoons <plug>\rightleftharpoons '
+exe s:pA1.'overleftarrow <plug>\overleftarrow '
+exe s:pA1.'overrightarrow <plug>\overrightarrow '
+exe s:pA1.'overleftrightarrow <plug>\overleftrightarrow '
+exe s:pA1.'underleftarrow <plug>\underleftarrow '
+exe s:pA1.'underrightarrow <plug>\underrightarrow '
+exe s:pA1.'underleftrightarrow <plug>\underleftrightarrow '
+exe s:pA1.'xleftarrow <plug>\xleftarrow '
+exe s:pA1.'xrightarrow <plug>\xrightarrow '
+" }}}
+
+
+" MATH nArrows {{{
+let s:pA1a = s:pA."&nArrows."
+exe s:pA1a.'nleftarrow <plug>\nleftarrow '
+exe s:pA1a.'nLeftarrow <plug>\nLeftarrow '
+exe s:pA1a.'nleftrightarrow <plug>\nleftrightarrow '
+exe s:pA1a.'nrightarrow <plug>\nrightarrow '
+exe s:pA1a.'nRightarrow <plug>\nRightarrow '
+" }}}
+" MATH Arrows2 {{{
+let s:pA1a = s:pA."Arrows2."
+exe s:pA1a.'dashleftarrow <plug>\dashleftarrow '
+exe s:pA1a.'leftleftarrows <plug>\leftleftarrows '
+exe s:pA1a.'leftrightarrows <plug>\leftrightarrows '
+exe s:pA1a.'Lleftarrow <plug>\Lleftarrow '
+exe s:pA1a.'twoheadleftarrow <plug>\twoheadleftarrow '
+exe s:pA1a.'leftarrowtail <plug>\leftarrowtail '
+exe s:pA1a.'leftrightharpoons <plug>\leftrightharpoons '
+exe s:pA1a.'Lsh <plug>\Lsh '
+exe s:pA1a.'looparrowleft <plug>\looparrowleft '
+exe s:pA1a.'curvearrowleft <plug>\curvearrowleft '
+exe s:pA1a.'circlearrowleft <plug>\circlearrowleft '
+exe s:pA1a.'dashrightarrow <plug>\dashrightarrow '
+exe s:pA1a.'rightrightarrows <plug>\rightrightarrows '
+exe s:pA1a.'rightleftarrows <plug>\rightleftarrows '
+exe s:pA1a.'Rrightarrow <plug>\Rrightarrow '
+exe s:pA1a.'twoheadrightarrow <plug>\twoheadrightarrow '
+exe s:pA1a.'rightarrowtail <plug>\rightarrowtail '
+exe s:pA1a.'rightleftharpoons <plug>\rightleftharpoons '
+exe s:pA1a.'Rsh <plug>\Rsh '
+exe s:pA1a.'looparrowright <plug>\looparrowright '
+exe s:pA1a.'curvearrowright <plug>\curvearrowright '
+exe s:pA1a.'circlearrowright <plug>\circlearrowright '
+exe s:pA1a.'multimap <plug>\multimap '
+exe s:pA1a.'upuparrows <plug>\upuparrows '
+exe s:pA1a.'downdownarrows <plug>\downdownarrows '
+exe s:pA1a.'upharpoonleft <plug>\upharpoonleft '
+exe s:pA1a.'upharpoonright <plug>\upharpoonright '
+exe s:pA1a.'downharpoonleft <plug>\downharpoonleft '
+exe s:pA1a.'downharpoonright <plug>\downharpoonright '
+exe s:pA1a.'rightsquigarrow <plug>\rightsquigarrow '
+exe s:pA1a.'leftrightsquigarrow <plug>\leftrightsquigarrow '
+" }}}
+" MATH Fonts {{{
+let s:pA2a = s:pA."&MathFonts."
+" exe s:pA2a.'mathbf{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathbf{<++>}<++>")<cr>'
+exe s:pA2a.'mathrm{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathrm{<++>}<++>")<cr>'
+exe s:pA2a.'mathsf{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathsf{<++>}<++>")<cr>'
+exe s:pA2a.'mathtt{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathtt{<++>}<++>")<cr>'
+exe s:pA2a.'mathit{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathit{<++>}<++>")<cr>'
+exe s:pA2a.'mathfrak{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathfrak{<++>}<++>")<cr>'
+exe s:pA2a.'mathcal{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathcal{<++>}<++>")<cr>'
+exe s:pA2a.'mathscr{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathscr{<++>}<++>")<cr>'
+exe s:pA2a.'mathbb{} <plug><C-r>=IMAP_PutTextWithMovement("\\mathbb{<++>}<++>")<cr>'
+" }}}
+" Greek Letters small {{{
+let s:pA2 = s:pA."&Greek.&Small."
+exe s:pA2.'alpha<Tab>`a <plug>\alpha '
+exe s:pA2.'beta<Tab>`b <plug>\beta '
+exe s:pA2.'gamma<Tab>`g <plug>\gamma '
+exe s:pA2.'delta<Tab>`d <plug>\delta '
+exe s:pA2.'epsilon <plug>\epsilon '
+exe s:pA2.'varepsilon<Tab>`e <plug>\varepsilon '
+exe s:pA2.'zeta<Tab>`z <plug>\zeta '
+exe s:pA2.'eta<Tab>`h <plug>\eta '
+exe s:pA2.'theta<Tab>`q <plug>\theta '
+exe s:pA2.'vartheta <plug>\vartheta '
+exe s:pA2.'iota<Tab>`i <plug>\iota '
+exe s:pA2.'kappa<Tab>`k <plug>\kappa '
+exe s:pA2.'lambda<Tab>`l <plug>\lambda '
+exe s:pA2.'mu<Tab>`m <plug>\mu '
+exe s:pA2.'nu<Tab>`n <plug>\nu '
+exe s:pA2.'xi<Tab>`x <plug>\xi '
+exe s:pA2.'pi<Tab>`p <plug>\pi '
+exe s:pA2.'varpi <plug>\varpi '
+exe s:pA2.'rho<Tab>`r <plug>\rho '
+exe s:pA2.'varrho <plug>\varrho '
+exe s:pA2.'sigma<Tab>`s <plug>\sigma '
+exe s:pA2.'varsigma<Tab>`v <plug>\varsigma '
+exe s:pA2.'tau<Tab>`t <plug>\tau '
+exe s:pA2.'upsilon<Tab>`u <plug>\upsilon '
+exe s:pA2.'phi <plug>\phi '
+exe s:pA2.'varphi<Tab>`f <plug>\varphi '
+exe s:pA2.'chi<Tab>`c <plug>\chi '
+exe s:pA2.'psi<Tab>`y <plug>\psi '
+exe s:pA2.'omega<Tab>`w <plug>\omega '
+" }}}
+" Greek Letters big {{{
+let s:pA3 = s:pA.'&Greek.&Big.'
+exe s:pA3.'Alpha<Tab>`A <plug>\Alpha '
+exe s:pA3.'Beta<Tab>`B <plug>\Beta '
+exe s:pA3.'Gamma<Tab>`G <plug>\Gamma '
+exe s:pA3.'Delta<Tab>`D <plug>\Delta '
+exe s:pA3.'Epsilon<Tab>`E <plug>\Epsilon '
+exe s:pA3.'Zeta<Tab>`Z <plug>\mathrm{Z} '
+exe s:pA3.'Eta<Tab>`H <plug>\Eta '
+exe s:pA3.'Theta <plug>\Theta '
+exe s:pA3.'Iota <plug>\mathrm{I} '
+exe s:pA3.'Kappa<Tab>`K <plug>\Kappa '
+exe s:pA3.'Lambda<Tab>`L <plug>\Lambda '
+exe s:pA3.'Mu<Tab>`M <plug>\Mu '
+exe s:pA3.'Nu<Tab>`N <plug>\Nu '
+exe s:pA3.'Xi<Tab>`X <plug>\Xi '
+exe s:pA3.'Pi<Tab>`P <plug>\Pi '
+exe s:pA3.'Rho<Tab>`R <plug>\Rho '
+exe s:pA3.'Sigma<Tab>`S <plug>\Sigma '
+exe s:pA3.'Tau<Tab>`T <plug>\Tau '
+exe s:pA3.'Upsilon<Tab>`U <plug>\Upsilon '
+exe s:pA3.'Phi <plug>\Phi '
+exe s:pA3.'Chi<Tab>`C <plug>\Chi '
+exe s:pA3.'Psi<Tab>`Y <plug>\Psi '
+exe s:pA3.'Omega<Tab>`W <plug>\Omega '
+" }}}
+" BinaryRel1 {{{
+let s:pA4 = s:pA."&BinaryRel1."
+exe s:pA4.'ll <plug>\ll '
+exe s:pA4.'lll <plug>\lll '
+exe s:pA4.'leqslant <plug>\leqslant '
+exe s:pA4.'leq <plug>\leq '
+exe s:pA4.'leqq <plug>\leqq '
+exe s:pA4.'eqslantless <plug>\eqslantless '
+exe s:pA4.'lessdot <plug>\lessdot '
+exe s:pA4.'prec <plug>\prec '
+exe s:pA4.'preceq <plug>\preceq '
+exe s:pA4.'preccurlyeq <plug>\preccurlyeq '
+exe s:pA4.'curlyeqprec <plug>\curlyeqprec '
+exe s:pA4.'lesssim <plug>\lesssim '
+exe s:pA4.'lessapprox <plug>\lessapprox '
+exe s:pA4.'precsim <plug>\precsim '
+exe s:pA4.'precapprox <plug>\precapprox '
+exe s:pA4.'in <plug>\in '
+exe s:pA4.'subset<Tab>`( <plug>\subset '
+exe s:pA4.'Subset<Tab>`) <plug>\Subset '
+exe s:pA4.'subseteq <plug>\subseteq '
+exe s:pA4.'subseteqq <plug>\subseteqq '
+exe s:pA4.'sqsubset <plug>\sqsubset '
+exe s:pA4.'sqsubseteq <plug>\sqsubseteq '
+exe s:pA4.'smile <plug>\smile '
+exe s:pA4.'smallsmile <plug>\smallsmile '
+exe s:pA4.'parallel <plug>\parallel '
+exe s:pA4.'shortparallel <plug>\shortparallel '
+exe s:pA4.'dashv <plug>\dashv '
+exe s:pA4.'vdash <plug>\vdash '
+exe s:pA4.'vDash <plug>\vDash '
+exe s:pA4.'models <plug>\models '
+exe s:pA4.'therefore <plug>\therefore '
+exe s:pA4.'backepsilon <plug>\backepsilon '
+" }}}
+" nBinaryRel1 {{{
+let s:pA4a = s:pA."&nBinaryRel1."
+exe s:pA4a.'nless <plug>\nless '
+exe s:pA4a.'nleqslant <plug>\nleqslant '
+exe s:pA4a.'nleq <plug>\nleq '
+exe s:pA4a.'lneq <plug>\lneq '
+exe s:pA4a.'nleqq <plug>\nleqq '
+exe s:pA4a.'lneqq <plug>\lneqq '
+exe s:pA4a.'lvertneqq <plug>\lvertneqq '
+exe s:pA4a.'nprec <plug>\nprec '
+exe s:pA4a.'npreceq <plug>\npreceq '
+exe s:pA4a.'precneqq <plug>\precneqq '
+exe s:pA4a.'lnsim <plug>\lnsim '
+exe s:pA4a.'lnapprox <plug>\lnapprox '
+exe s:pA4a.'precnsim <plug>\precnsim '
+exe s:pA4a.'precnapprox <plug>\precnapprox '
+exe s:pA4a.'notin <plug>\notin '
+exe s:pA4a.'nsubseteq <plug>\nsubseteq '
+exe s:pA4a.'varsubsetneq <plug>\varsubsetneq '
+exe s:pA4a.'subsetneq <plug>\subsetneq '
+exe s:pA4a.'nsubseteqq <plug>\nsubseteqq '
+exe s:pA4a.'varsubsetneqq <plug>\varsubsetneqq '
+exe s:pA4a.'subsetneqq <plug>\subsetneqq '
+exe s:pA4a.'nparallel <plug>\nparallel '
+exe s:pA4a.'nshortparallel <plug>\nshortparallel '
+exe s:pA4a.'nvdash <plug>\nvdash '
+exe s:pA4a.'nvDash <plug>\nvDash '
+" }}}
+" BinaryRel2 {{{
+let s:pA5 = s:pA."&BinaryRel2."
+exe s:pA5.'gg <plug>\gg '
+exe s:pA5.'ggg <plug>\ggg '
+exe s:pA5.'gggtr <plug>\gggtr '
+exe s:pA5.'geqslant <plug>\geqslant '
+exe s:pA5.'geq <plug>\geq '
+exe s:pA5.'geqq <plug>\geqq '
+exe s:pA5.'eqslantgtr <plug>\eqslantgtr '
+exe s:pA5.'gtrdot <plug>\gtrdot '
+exe s:pA5.'succ <plug>\succ '
+exe s:pA5.'succeq <plug>\succeq '
+exe s:pA5.'succcurlyeq <plug>\succcurlyeq '
+exe s:pA5.'curlyeqsucc <plug>\curlyeqsucc '
+exe s:pA5.'gtrsim <plug>\gtrsim '
+exe s:pA5.'gtrapprox <plug>\gtrapprox '
+exe s:pA5.'succsim <plug>\succsim '
+exe s:pA5.'succapprox <plug>\succapprox '
+exe s:pA5.'ni <plug>\ni '
+exe s:pA5.'owns <plug>\owns '
+exe s:pA5.'supset <plug>\supset '
+exe s:pA5.'Supset <plug>\Supset '
+exe s:pA5.'supseteq <plug>\supseteq '
+exe s:pA5.'supseteqq <plug>\supseteqq '
+exe s:pA5.'sqsupset <plug>\sqsupset '
+exe s:pA5.'sqsupseteq <plug>\sqsupseteq '
+exe s:pA5.'frown <plug>\frown '
+exe s:pA5.'smallfrown <plug>\smallfrown '
+exe s:pA5.'mid <plug>\mid '
+exe s:pA5.'shortmid <plug>\shortmid '
+exe s:pA5.'between <plug>\between '
+exe s:pA5.'Vdash <plug>\Vdash '
+exe s:pA5.'bowtie <plug>\bowtie '
+exe s:pA5.'Join <plug>\Join '
+exe s:pA5.'pitchfork <plug>\pitchfork '
+" }}}
+" {{{ nBinaryRel2
+let s:pA5a = s:pA."n&BinaryRel2." "TODO: dorobiæ logarytmy
+exe s:pA5a.'ngtr <plug>\ngtr '
+exe s:pA5a.'ngeqslant <plug>\ngeqslant '
+exe s:pA5a.'ngeq <plug>\ngeq '
+exe s:pA5a.'gneq <plug>\gneq '
+exe s:pA5a.'ngeqq <plug>\ngeqq '
+exe s:pA5a.'gneqq <plug>\gneqq '
+exe s:pA5a.'nsucc <plug>\nsucc '
+exe s:pA5a.'nsucceq <plug>\nsucceq '
+exe s:pA5a.'succneqq <plug>\succneqq '
+exe s:pA5a.'gnsim <plug>\gnsim '
+exe s:pA5a.'gnapprox <plug>\gnapprox '
+exe s:pA5a.'succnsim <plug>\succnsim '
+exe s:pA5a.'succnapprox <plug>\succnapprox '
+exe s:pA5a.'nsupseteq <plug>\nsupseteq '
+exe s:pA5a.'varsupsetneq <plug>\varsupsetneq '
+exe s:pA5a.'supsetneq <plug>\supsetneq '
+exe s:pA5a.'nsupseteqq <plug>\nsupseteqq '
+exe s:pA5a.'varsupsetneqq <plug>\varsupsetneqq '
+exe s:pA5a.'supsetneqq <plug>\supsetneqq '
+exe s:pA5a.'nmid <plug>\nmid '
+exe s:pA5a.'nshortmid <plug>\nshortmid '
+exe s:pA5a.'nVdash <plug>\nVdash '
+" }}}
+" {{{ BinaryRel3
+let s:pA6 = s:pA."&BinaryRel3."
+exe s:pA6.'doteq <plug>\doteq '
+exe s:pA6.'circeq <plug>\circeq '
+exe s:pA6.'eqcirc <plug>\eqcirc '
+exe s:pA6.'risingdotseq <plug>\risingdotseq '
+exe s:pA6.'doteqdot <plug>\doteqdot '
+exe s:pA6.'Doteq <plug>\Doteq '
+exe s:pA6.'fallingdotseq <plug>\fallingdotseq '
+exe s:pA6.'triangleq <plug>\triangleq '
+exe s:pA6.'bumpeq <plug>\bumpeq '
+exe s:pA6.'Bumpeq <plug>\Bumpeq '
+exe s:pA6.'equiv<Tab>`= <plug>\equiv '
+exe s:pA6.'sim <plug>\sim '
+exe s:pA6.'thicksim <plug>\thicksim '
+exe s:pA6.'backsim <plug>\backsim '
+exe s:pA6.'simeq <plug>\simeq '
+exe s:pA6.'backsimeq <plug>\backsimeq '
+exe s:pA6.'cong <plug>\cong '
+exe s:pA6.'approx<tab>=~ <plug>\approx '
+exe s:pA6.'thickapprox <plug>\thickapprox '
+exe s:pA6.'approxeq <plug>\approxeq '
+exe s:pA6.'blacktriangleleft <plug>\blacktriangleleft '
+exe s:pA6.'vartriangleleft <plug>\vartriangleleft '
+exe s:pA6.'trianglelefteq <plug>\trianglelefteq '
+exe s:pA6.'blacktriangleright <plug>\blacktriangleright '
+exe s:pA6.'vartriangleright <plug>\vartriangleright '
+exe s:pA6.'trianglerighteq <plug>\trianglerighteq '
+exe s:pA6.'perp <plug>\perp '
+exe s:pA6.'asymp <plug>\asymp '
+exe s:pA6.'Vvdash <plug>\Vvdash '
+exe s:pA6.'propto <plug>\propto '
+exe s:pA6.'varpropto <plug>\varpropto '
+exe s:pA6.'because <plug>\because '
+" }}}
+" {{{ nBinaryRel3
+let s:pA6a = s:pA."&nBinaryRel3."
+exe s:pA6a.'neq <plug>\neq '
+exe s:pA6a.'nsim <plug>\nsim '
+exe s:pA6a.'ncong <plug>\ncong '
+exe s:pA6a.'ntriangleleft <plug>\ntriangleleft '
+exe s:pA6a.'ntrianglelefteq <plug>\ntrianglelefteq '
+exe s:pA6a.'ntriangleright <plug>\ntriangleright '
+exe s:pA6a.'ntrianglerighteq <plug>\ntrianglerighteq '
+" }}}
+" {{{ BinaryRel4
+let s:pA7 = s:pA."&BinaryRel4."
+exe s:pA7.'lessgtr <plug>\lessgtr '
+exe s:pA7.'gtrless <plug>\gtrless '
+exe s:pA7.'lesseqgtr <plug>\lesseqgtr '
+exe s:pA7.'gtreqless <plug>\gtreqless '
+exe s:pA7.'lesseqqgtr <plug>\lesseqqgtr '
+exe s:pA7.'gtreqqless <plug>\gtreqqless '
+" }}}
+" {{{ BigOp
+let s:pA8a = s:pA."&BigOp."
+exe s:pA8a.'limits <plug>\limits'
+exe s:pA8a.'nolimits <plug>\nolimits'
+exe s:pA8a.'displaylimits <plug>\displaylimits'
+exe s:pA8a.'-seplimits- :'
+exe s:pA8a.'bigcap<Tab>`- <plug>\bigcap'
+exe s:pA8a.'bigcup<Tab>`+ <plug>\bigcup'
+exe s:pA8a.'bigodot <plug>\bigodot'
+exe s:pA8a.'bigoplus <plug>\bigoplus'
+exe s:pA8a.'bigotimes <plug>\bigotimes'
+exe s:pA8a.'bigsqcup <plug>\bigsqcup'
+exe s:pA8a.'biguplus <plug>\biguplus'
+exe s:pA8a.'bigvee <plug>\bigvee'
+exe s:pA8a.'bigwedge <plug>\bigwedge'
+exe s:pA8a.'coprod <plug>\coprod'
+exe s:pA8a.'int <plug>\int'
+exe s:pA8a.'oint <plug>\oint'
+exe s:pA8a.'prod <plug>\prod'
+exe s:pA8a.'sum <plug>\sum'
+" }}}
+" {{{ BinaryOp
+let s:pA8 = s:pA."&BinaryOp."
+exe s:pA8.'pm <plug>\pm '
+exe s:pA8.'mp <plug>\mp '
+exe s:pA8.'dotplus <plug>\dotplus '
+exe s:pA8.'cdot<Tab>`. <plug>\cdot '
+exe s:pA8.'centerdot <plug>\centerdot '
+exe s:pA8.'times<Tab>`* <plug>\times '
+exe s:pA8.'ltimes <plug>\ltimes '
+exe s:pA8.'rtimes <plug>\rtimes '
+exe s:pA8.'leftthreetimes <plug>\leftthreetimes '
+exe s:pA8.'rightthreetimes <plug>\rightthreetimes '
+exe s:pA8.'div <plug>\div '
+exe s:pA8.'divideontimes <plug>\divideontimes '
+exe s:pA8.'bmod <plug>\bmod '
+exe s:pA8.'ast <plug>\ast '
+exe s:pA8.'star <plug>\star '
+exe s:pA8.'setminus<Tab>`\\ <plug>\setminus '
+exe s:pA8.'smallsetminus <plug>\smallsetminus '
+exe s:pA8.'diamond <plug>\diamond '
+exe s:pA8.'wr <plug>\wr '
+exe s:pA8.'intercal <plug>\intercal '
+exe s:pA8.'circ<Tab>`@ <plug>\circ '
+exe s:pA8.'bigcirc <plug>\bigcirc '
+exe s:pA8.'bullet <plug>\bullet '
+exe s:pA8.'cap <plug>\cap '
+exe s:pA8.'Cap <plug>\Cap '
+exe s:pA8.'cup <plug>\cup '
+exe s:pA8.'Cup <plug>\Cup '
+exe s:pA8.'sqcap <plug>\sqcap '
+exe s:pA8.'sqcup <plug>\sqcup'
+exe s:pA8.'amalg <plug>\amalg '
+exe s:pA8.'uplus <plug>\uplus '
+exe s:pA8.'triangleleft <plug>\triangleleft '
+exe s:pA8.'triangleright <plug>\triangleright '
+exe s:pA8.'bigtriangleup <plug>\bigtriangleup '
+exe s:pA8.'bigtriangledown <plug>\bigtriangledown '
+exe s:pA8.'vee <plug>\vee '
+exe s:pA8.'veebar <plug>\veebar '
+exe s:pA8.'curlyvee <plug>\curlyvee '
+exe s:pA8.'wedge<Tab>`& <plug>\wedge '
+exe s:pA8.'barwedge <plug>\barwedge '
+exe s:pA8.'doublebarwedge <plug>\doublebarwedge '
+exe s:pA8.'curlywedge <plug>\curlywedge '
+exe s:pA8.'oplus <plug>\oplus '
+exe s:pA8.'ominus <plug>\ominus '
+exe s:pA8.'otimes <plug>\otimes '
+exe s:pA8.'oslash <plug>\oslash '
+exe s:pA8.'boxplus <plug>\boxplus '
+exe s:pA8.'boxminus <plug>\boxminus '
+exe s:pA8.'boxtimes <plug>\boxtimes '
+exe s:pA8.'boxdot <plug>\boxdot '
+exe s:pA8.'odot <plug>\odot '
+exe s:pA8.'circledast <plug>\circledast '
+exe s:pA8.'circleddash <plug>\circleddash '
+exe s:pA8.'circledcirc <plug>\circledcirc '
+exe s:pA8.'dagger <plug>\dagger '
+exe s:pA8.'ddagger <plug>\ddagger '
+exe s:pA8.'lhd <plug>\lhd '
+exe s:pA8.'unlhd <plug>\unlhd '
+exe s:pA8.'rhd <plug>\rhd '
+exe s:pA8.'unrhd <plug>\unrhd '
+" }}}
+" {{{ Other1
+let s:pA9 = s:pA."&Other1."
+exe s:pA9.'hat <plug>\hat '
+exe s:pA9.'check <plug>\check '
+exe s:pA9.'grave <plug>\grave '
+exe s:pA9.'acute <plug>\acute '
+exe s:pA9.'dot <plug>\dot '
+exe s:pA9.'ddot <plug>\ddot '
+exe s:pA9.'tilde<Tab>`, <plug>\tilde '
+exe s:pA9.'breve <plug>\breve '
+exe s:pA9.'bar <plug>\bar '
+exe s:pA9.'vec <plug>\vec '
+exe s:pA9.'aleph <plug>\aleph '
+exe s:pA9.'hbar <plug>\hbar '
+exe s:pA9.'imath <plug>\imath '
+exe s:pA9.'jmath <plug>\jmath '
+exe s:pA9.'ell <plug>\ell '
+exe s:pA9.'wp <plug>\wp '
+exe s:pA9.'Re <plug>\Re '
+exe s:pA9.'Im <plug>\Im '
+exe s:pA9.'partial <plug>\partial '
+exe s:pA9.'infty<Tab>`8 <plug>\infty '
+exe s:pA9.'prime <plug>\prime '
+exe s:pA9.'emptyset <plug>\emptyset '
+exe s:pA9.'nabla <plug>\nabla '
+exe s:pA9.'surd <plug>\surd '
+exe s:pA9.'top <plug>\top '
+exe s:pA9.'bot <plug>\bot '
+exe s:pA9.'angle <plug>\angle '
+exe s:pA9.'triangle <plug>\triangle '
+exe s:pA9.'backslash <plug>\backslash '
+exe s:pA9.'forall <plug>\forall '
+exe s:pA9.'exists <plug>\exists '
+exe s:pA9.'neg <plug>\neg '
+exe s:pA9.'flat <plug>\flat '
+exe s:pA9.'natural <plug>\natural '
+exe s:pA9.'sharp <plug>\sharp '
+exe s:pA9.'clubsuit <plug>\clubsuit '
+exe s:pA9.'diamondsuit <plug>\diamondsuit '
+exe s:pA9.'heartsuit <plug>\heartsuit '
+exe s:pA9.'spadesuit <plug>\spadesuit '
+exe s:pA9.'S <plug>\S '
+exe s:pA9.'P <plug>\P'
+" }}}
+" {{{ MathCreating
+let s:pA10 = s:pA."&MathCreating."
+exe s:pA10.'not <plug>\not'
+exe s:pA10.'mkern <plug>\mkern'
+exe s:pA10.'mathbin <plug>\mathbin'
+exe s:pA10.'mathrel <plug>\mathrel'
+exe s:pA10.'stackrel <plug>\stackrel'
+exe s:pA10.'mathord <plug>\mathord'
+" }}}
+" {{{ Styles
+let s:pA11 = s:pA."&Styles."
+exe s:pA11.'displaystyle <plug>\displaystyle'
+exe s:pA11.'textstyle <plug>\textstyle'
+exe s:pA11.'scritpstyle <plug>\scritpstyle'
+exe s:pA11.'scriptscriptstyle <plug>\scriptscriptstyle'
+" }}}
+" {{{ MathDiacritics
+let s:pA12 = s:pA."&MathDiacritics."
+exe s:pA12.'acute{} <plug><C-r>=IMAP_PutTextWithMovement("\\acute{<++>}<++>")<cr>'
+exe s:pA12.'bar{}<Tab>`_ <plug><C-r>=IMAP_PutTextWithMovement("\\bar{<++>}<++>")<cr>'
+exe s:pA12.'breve{} <plug><C-r>=IMAP_PutTextWithMovement("\\breve{<++>}<++>")<cr>'
+exe s:pA12.'check{} <plug><C-r>=IMAP_PutTextWithMovement("\\check{<++>}<++>")<cr>'
+exe s:pA12.'ddot{}<Tab>`: <plug><C-r>=IMAP_PutTextWithMovement("\\ddot{<++>}<++>")<cr>'
+exe s:pA12.'dot{}<Tab>`; <plug><C-r>=IMAP_PutTextWithMovement("\\dot{<++>}<++>")<cr>'
+exe s:pA12.'grave{} <plug><C-r>=IMAP_PutTextWithMovement("\\grave{<++>}<++>")<cr>'
+exe s:pA12.'hat{}<Tab>`^ <plug><C-r>=IMAP_PutTextWithMovement("\\hat{<++>}<++>")<cr>'
+exe s:pA12.'tilde{}<tab>`~ <plug><C-r>=IMAP_PutTextWithMovement("\\tilde{<++>}<++>")<cr>'
+exe s:pA12.'vec{} <plug><C-r>=IMAP_PutTextWithMovement("\\vec{<++>}<++>")<cr>'
+exe s:pA12.'widehat{} <plug><C-r>=IMAP_PutTextWithMovement("\\widehat{<++>}<++>")<cr>'
+exe s:pA12.'widetilde{} <plug><C-r>=IMAP_PutTextWithMovement("\\widetilde{<++>}<++>")<cr>'
+exe s:pA12.'imath <plug><C-r>=IMAP_PutTextWithMovement("\\imath")<cr>'
+exe s:pA12.'jmath <plug><C-r>=IMAP_PutTextWithMovement("\\jmath")<cr>'
+" }}}
+" {{{ OverlineAndCo
+let s:pA13 = s:pA."&OverlineAndCo."
+exe s:pA13.'overline{} <plug><C-r>=IMAP_PutTextWithMovement("\\overline{}")<cr>'
+exe s:pA13.'underline{} <plug><C-r>=IMAP_PutTextWithMovement("\\underline{}")<cr>'
+exe s:pA13.'overrightarrow{} <plug><C-r>=IMAP_PutTextWithMovement("\\overrightarrow{}")<cr>'
+exe s:pA13.'overleftarrow{} <plug><C-r>=IMAP_PutTextWithMovement("\\overleftarrow{}")<cr>'
+exe s:pA13.'overbrace{} <plug><C-r>=IMAP_PutTextWithMovement("\\overbrace{}")<cr>'
+exe s:pA13.'underbrace{} <plug><C-r>=IMAP_PutTextWithMovement("\\underbrace{}")<cr>'
+" }}}
+" {{{ Symbols1
+let s:pA14a = s:pA."&Symbols1."
+exe s:pA14a.'forall <plug>\forall '
+exe s:pA14a.'exists <plug>\exists '
+exe s:pA14a.'nexists <plug>\nexists '
+exe s:pA14a.'neg <plug>\neg '
+exe s:pA14a.'top <plug>\top '
+exe s:pA14a.'bot <plug>\bot '
+exe s:pA14a.'emptyset <plug>\emptyset '
+exe s:pA14a.'varnothing <plug>\varnothing '
+exe s:pA14a.'infty <plug>\infty '
+exe s:pA14a.'aleph <plug>\aleph '
+exe s:pA14a.'beth <plug>\beth '
+exe s:pA14a.'gimel <plug>\gimel '
+exe s:pA14a.'daleth <plug>\daleth '
+exe s:pA14a.'hbar <plug>\hbar '
+exe s:pA14a.'hslash <plug>\hslash '
+exe s:pA14a.'diagup <plug>\diagup '
+exe s:pA14a.'vert <plug>\vert '
+exe s:pA14a.'Vert <plug>\Vert '
+exe s:pA14a.'backslash <plug>\backslash '
+exe s:pA14a.'diagdown <plug>\diagdown '
+exe s:pA14a.'Bbbk <plug>\Bbbk '
+exe s:pA14a.'P <plug>\P '
+exe s:pA14a.'S <plug>\S '
+" }}}
+" {{{ Symbols2
+let s:pA14b = s:pA."&Symbols2."
+exe s:pA14b.'# <plug>\# '
+exe s:pA14b.'% <plug>\% '
+exe s:pA14b.'_ <plug>\_ '
+exe s:pA14b.'$ <plug>\$ '
+exe s:pA14b.'& <plug>\& '
+exe s:pA14b.'imath <plug>\imath '
+exe s:pA14b.'jmath <plug>\jmath '
+exe s:pA14b.'ell <plug>\ell '
+exe s:pA14b.'wp <plug>\wp '
+exe s:pA14b.'Re <plug>\Re '
+exe s:pA14b.'Im <plug>\Im '
+exe s:pA14b.'prime <plug>\prime '
+exe s:pA14b.'backprime <plug>\backprime '
+exe s:pA14b.'nabla <plug>\nabla '
+exe s:pA14b.'surd <plug>\surd '
+exe s:pA14b.'flat <plug>\flat '
+exe s:pA14b.'sharp <plug>\sharp '
+exe s:pA14b.'natural <plug>\natural '
+exe s:pA14b.'eth <plug>\eth '
+exe s:pA14b.'bigstar <plug>\bigstar '
+exe s:pA14b.'circledS <plug>\circledS '
+exe s:pA14b.'Finv <plug>\Finv '
+exe s:pA14b.'dag <plug>\dag '
+exe s:pA14b.'ddag <plug>\ddag '
+" }}}
+" {{{ Symbols3
+let s:pA14c = s:pA."&Symbols3."
+exe s:pA14c.'angle <plug>\angle '
+exe s:pA14c.'measuredangle <plug>\measuredangle '
+exe s:pA14c.'sphericalangle <plug>\sphericalangle '
+exe s:pA14c.'spadesuit <plug>\spadesuit '
+exe s:pA14c.'heartsuit <plug>\heartsuit '
+exe s:pA14c.'diamondsuit <plug>\diamondsuit '
+exe s:pA14c.'clubsuit <plug>\clubsuit '
+exe s:pA14c.'lozenge <plug>\lozenge '
+exe s:pA14c.'blacklozenge <plug>\blacklozenge '
+exe s:pA14c.'Diamond <plug>\Diamond '
+exe s:pA14c.'triangle <plug>\triangle '
+exe s:pA14c.'vartriangle <plug>\vartriangle '
+exe s:pA14c.'blacktriangle <plug>\blacktriangle '
+exe s:pA14c.'triangledown <plug>\triangledown '
+exe s:pA14c.'blacktriangledown <plug>\blacktriangledown '
+exe s:pA14c.'Box <plug>\Box '
+exe s:pA14c.'square <plug>\square '
+exe s:pA14c.'blacksquare <plug>\blacksquare '
+exe s:pA14c.'complement <plug>\complement '
+exe s:pA14c.'mho <plug>\mho '
+exe s:pA14c.'Game <plug>\Game '
+exe s:pA14c.'partial<Tab>`6 <plug>\partial '
+exe s:pA14c.'smallint <plug>\smallint '
+" }}}
+" {{{ Logic
+let s:pA15 = s:pA."&Logic."
+exe s:pA15.'lnot <plug>\lnot '
+exe s:pA15.'lor <plug>\lor '
+exe s:pA15.'land <plug>\land '
+" }}}
+" {{{ Limits1
+let s:pA16 = s:pA."&Limits1."
+exe s:pA16.'left <plug>\left'
+exe s:pA16.'right <plug>\right'
+exe s:pA16.'-sepbigl- :'
+exe s:pA16.'bigl <plug>\bigl'
+exe s:pA16.'Bigl <plug>\Bigl'
+exe s:pA16.'biggl <plug>\biggl'
+exe s:pA16.'Biggl <plug>\Biggl'
+exe s:pA16.'-sepbigr- :'
+exe s:pA16.'bigr <plug>\bigr'
+exe s:pA16.'Bigr <plug>\Bigr'
+exe s:pA16.'biggr <plug>\biggr'
+exe s:pA16.'Biggr <plug>\Biggr'
+exe s:pA16.'-sepbig- :'
+exe s:pA16.'big <plug>\big'
+exe s:pA16.'bigm <plug>\bigm'
+exe s:pA16.'-sepfloor- :'
+exe s:pA16.'lfloor <plug>\lfloor '
+exe s:pA16.'lceil <plug>\lceil '
+exe s:pA16.'rfloor <plug>\rfloor '
+exe s:pA16.'rceil <plug>\rceil '
+exe s:pA16.'-sepangle- :'
+exe s:pA16.'langle <plug>\langle '
+exe s:pA16.'rangle <plug>\rangle '
+" }}}
+" {{{ Limits2
+let s:pA16a = s:pA."&Limits2."
+exe s:pA16a.'ulcorner <plug>\ulcorner '
+exe s:pA16a.'urcorner <plug>\urcorner '
+exe s:pA16a.'llcorner <plug>\llcorner '
+exe s:pA16a.'rlcorner <plug>\rlcorner '
+exe s:pA16a.'-sepcorner- :'
+exe s:pA16a.'vert <plug>\vert '
+exe s:pA16a.'Vert <plug>\Vert '
+exe s:pA16a.'lvert <plug>\lvert '
+exe s:pA16a.'lVert <plug>\lVert '
+exe s:pA16a.'rvert <plug>\rvert '
+exe s:pA16a.'rVert <plug>\rVert '
+exe s:pA16a.'uparrow <plug>\uparrow '
+exe s:pA16a.'Uparrow <plug>\Uparrow '
+exe s:pA16a.'downarrow <plug>\downarrow '
+exe s:pA16a.'Downarrow <plug>\Downarrow '
+exe s:pA16a.'updownarrow <plug>\updownarrow '
+exe s:pA16a.'Updownarrow <plug>\Updownarrow '
+exe s:pA16a.'lgroup <plug>\lgroup '
+exe s:pA16a.'rgroup <plug>\rgroup '
+exe s:pA16a.'lmoustache <plug>\lmoustache '
+exe s:pA16a.'rmoustache <plug>\rmoustache '
+exe s:pA16a.'arrowvert <plug>\arrowvert '
+exe s:pA16a.'Arrowvert <plug>\Arrowvert '
+exe s:pA16a.'bracevert <plug>\bracevert '
+" }}}
+" {{{ Log-likes
+let s:pA17 = s:pA."Lo&g-likes."
+exe s:pA17.'arccos <plug>\arccos '
+exe s:pA17.'arcsin <plug>\arcsin '
+exe s:pA17.'arctan <plug>\arctan '
+exe s:pA17.'arg <plug>\arg '
+exe s:pA17.'cos <plug>\cos '
+exe s:pA17.'cosh <plug>\cosh '
+exe s:pA17.'cot <plug>\cot '
+exe s:pA17.'coth <plug>\coth '
+exe s:pA17.'csc <plug>\csc '
+exe s:pA17.'deg <plug>\deg '
+exe s:pA17.'det <plug>\det '
+exe s:pA17.'dim <plug>\dim '
+exe s:pA17.'exp <plug>\exp '
+exe s:pA17.'gcd <plug>\gcd '
+exe s:pA17.'hom <plug>\hom '
+exe s:pA17.'inf <plug>\inf '
+exe s:pA17.'injlim <plug>\injlim '
+exe s:pA17.'ker <plug>\ker '
+exe s:pA17.'lg <plug>\lg '
+exe s:pA17.'lim <plug>\lim '
+exe s:pA17.'liminf <plug>\liminf '
+exe s:pA17.'limsup <plug>\limsup '
+exe s:pA17.'ln <plug>\ln '
+exe s:pA17.'log <plug>\log '
+exe s:pA17.'max <plug>\max '
+exe s:pA17.'min <plug>\min '
+exe s:pA17.'Pr <plug>\Pr '
+exe s:pA17.'projlim <plug>\projlim '
+exe s:pA17.'sec <plug>\sec '
+exe s:pA17.'sin <plug>\sin '
+exe s:pA17.'sinh <plug>\sinh '
+exe s:pA17.'sup <plug>\sup '
+exe s:pA17.'tan <plug>\tan '
+exe s:pA17.'tanh <plug>\tanh '
+exe s:pA17.'varlimsup <plug>\varlimsup '
+exe s:pA17.'varliminf <plug>\varliminf '
+exe s:pA17.'varinjlim <plug>\varinjlim '
+exe s:pA17.'varprojlim <plug>\varprojlim '
+" }}}
+" {{{ MathSpacing
+let s:pA18 = s:pA."MathSpacing."
+exe s:pA18.', <plug>\, '
+exe s:pA18.': <plug>\: '
+exe s:pA18.'; <plug>\; '
+exe s:pA18.'[space] <plug>\ '
+exe s:pA18.'quad <plug>\quad '
+exe s:pA18.'qquad <plug>\qquad '
+exe s:pA18.'! <plug>\! '
+exe s:pA18.'thinspace <plug>\thinspace '
+exe s:pA18.'medspace <plug>\medspace '
+exe s:pA18.'thickspace <plug>\thickspace '
+exe s:pA18.'negthinspace <plug>\negthinspace '
+exe s:pA18.'negmedspace <plug>\negmedspace '
+exe s:pA18.'negthickspace <plug>\negthickspace '
+" 1}}}
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
diff --git a/dot_vim/ftplugin/latex-suite/multicompile.vim b/dot_vim/ftplugin/latex-suite/multicompile.vim
new file mode 100644
index 0000000..f5598cc
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/multicompile.vim
@@ -0,0 +1,17 @@
+" ============================================================================
+" File: multicompile.vim
+" Author: Srinath Avadhanula
+" Created: Sat Jul 05 03:00 PM 2003
+" Description: compile a .tex file multiple times to get cross references
+" right.
+" License: Vim Charityware License
+" Part of vim-latexSuite: http://vim-latex.sourceforge.net
+" CVS: $Id: multicompile.vim 997 2006-03-20 09:45:45Z srinathava $
+" ============================================================================
+
+" The contents of this file have been moved to compiler.vim, the file which
+" contains all functions relevant to compiling and viewing.
+" This file is kept empty on purpose so that it will over-write previous
+" versions of multicompile.vim, therby preventing conflicts.
+
+" vim:fdm=marker:nowrap:noet:ff=unix:ts=4:sw=4
diff --git a/dot_vim/ftplugin/latex-suite/outline.py b/dot_vim/ftplugin/latex-suite/outline.py
new file mode 100644
index 0000000..7bb6896
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/outline.py
@@ -0,0 +1,186 @@
+#!/usr/bin/python
+
+# Part of Latex-Suite
+#
+# Copyright: Srinath Avadhanula
+# Description:
+# This file implements a simple outline creation for latex documents.
+
+import re
+import os
+import sys
+import StringIO
+
+# getFileContents {{{
+def getFileContents(argin, ext=''):
+ if type(argin) is str:
+ fname = argin + ext
+ else:
+ fname = argin.group(3) + ext
+
+ # This longish thing is to make sure that all files are converted into
+ # \n seperated lines.
+ contents = '\n'.join(open(fname).read().splitlines())
+
+ # TODO what are all the ways in which a tex file can include another?
+ pat = re.compile(r'^\\(@?)(include|input){(.*?)}', re.M)
+ contents = re.sub(pat, lambda input: getFileContents(input, ext), contents)
+
+ return ('%%==== FILENAME: %s' % fname) + '\n' + contents
+
+# }}}
+# stripComments {{{
+def stripComments(contents):
+ # remove all comments except those of the form
+ # %%==== FILENAME: <filename.tex>
+ uncomm = [re.sub('%(?!==== FILENAME: ).*', '', line) for line in contents.splitlines()]
+ # also remove all only-whitespace lines.
+ nonempty = [line for line in uncomm if line.strip()]
+
+ return nonempty
+# }}}
+# addFileNameAndNumber {{{
+def addFileNameAndNumber(lines):
+ filename = ''
+ retval = ''
+ for line in lines:
+ if re.match('%==== FILENAME: ', line):
+ filename = line.split('%==== FILENAME: ')[1]
+ else:
+ retval += '<%s>%s\n' % (filename, line)
+
+ return retval
+# }}}
+# getSectionLabels_Root {{{
+def getSectionLabels_Root(lineinfo, section_prefix, label_prefix):
+ prev_txt = ''
+ inside_env = 0
+ prev_env = ''
+ outstr = StringIO.StringIO('')
+ pres_depth = len(section_prefix)
+
+ #print '+getSectionLabels_Root: lineinfo = [%s]' % lineinfo
+ for line in lineinfo.splitlines():
+ if not line:
+ continue
+
+ # throw away leading white-space
+ m = re.search('<(.*?)>(.*)', line)
+
+ fname = m.group(1)
+ line = m.group(2).lstrip()
+
+ # we found a label!
+ m = re.search(r'\\label{(%s.*?)}' % label_prefix, line)
+ if m:
+ # add the current line (except the \label command) to the text
+ # which will be displayed below this label
+ prev_txt += re.search(r'(^.*?)\\label{', line).group(1)
+
+ # for the figure environment however, just display the caption.
+ # instead of everything since the \begin command.
+ if prev_env == 'figure':
+ cm = re.search(r'\caption(\[.*?\]\s*)?{(.*?)}', prev_txt)
+ if cm:
+ prev_txt = cm.group(2)
+
+ # print a nice formatted text entry like so
+ #
+ # > eqn:label
+ # : e^{i\pi} + 1 = 0
+ #
+ # Use the current "section depth" for the leading indentation.
+ print >>outstr, '>%s%s\t\t<%s>' % (' '*(2*pres_depth+2),
+ m.group(1), fname)
+ print >>outstr, ':%s%s' % (' '*(2*pres_depth+4), prev_txt)
+ prev_txt = ''
+
+ # If we just encoutered the start or end of an environment or a
+ # label, then do not remember this line.
+ # NOTE: This assumes that there is no equation text on the same
+ # line as the \begin or \end command. The text on the same line as
+ # the \label was already handled.
+ if re.search(r'\\begin{(equation|eqnarray|align|figure)', line):
+ prev_txt = ''
+ prev_env = re.search(r'\\begin{(.*?)}', line).group(1)
+ inside_env = 1
+
+ elif re.search(r'\\label', line):
+ prev_txt = ''
+
+ elif re.search(r'\\end{(equation|eqnarray|align|figure)', line):
+ inside_env = 0
+ prev_env = ''
+
+ else:
+ # If we are inside an environment, then the text displayed with
+ # the label is the complete text within the environment,
+ # otherwise its just the previous line.
+ if inside_env:
+ prev_txt += line
+ else:
+ prev_txt = line
+
+ return outstr.getvalue()
+
+# }}}
+# getSectionLabels {{{
+def getSectionLabels(lineinfo,
+ sectypes=['chapter', 'section', 'subsection', 'subsubsection'],
+ section_prefix='', label_prefix=''):
+
+ if not sectypes:
+ return getSectionLabels_Root(lineinfo, section_prefix, label_prefix)
+
+ ##print 'sectypes[0] = %s, section_prefix = [%s], lineinfo = [%s]' % (
+ ## sectypes[0], section_prefix, lineinfo)
+
+ sections = re.split(r'(<.*?>\\%s{.*})' % sectypes[0], lineinfo)
+
+ # there will 1+2n sections, the first containing the "preamble" and the
+ # others containing the child sections as paris of [section_name,
+ # section_text]
+
+ rettext = getSectionLabels(sections[0], sectypes[1:], section_prefix, label_prefix)
+
+ for i in range(1,len(sections),2):
+ sec_num = (i+1)/2
+ section_name = re.search(r'\\%s{(.*?)}' % sectypes[0], sections[i]).group(1)
+ section_label_text = getSectionLabels(sections[i] + sections[i+1], sectypes[1:],
+ section_prefix+('%d.' % sec_num), label_prefix)
+
+ if section_label_text:
+ sec_heading = 2*' '*len(section_prefix) + section_prefix
+ sec_heading += '%d. %s' % (sec_num, section_name)
+ sec_heading += '<<<%d\n' % (len(section_prefix)/2+1)
+
+ rettext += sec_heading + section_label_text
+
+ return rettext
+
+# }}}
+
+# main {{{
+def main(fname, label_prefix):
+ [head, tail] = os.path.split(fname)
+ if head:
+ os.chdir(head)
+
+ [root, ext] = os.path.splitext(tail)
+ contents = getFileContents(root, ext)
+ nonempty = stripComments(contents)
+ lineinfo = addFileNameAndNumber(nonempty)
+
+ return getSectionLabels(lineinfo, label_prefix=label_prefix)
+# }}}
+
+if __name__ == "__main__":
+ if len(sys.argv) > 2:
+ prefix = sys.argv[2]
+ else:
+ prefix = ''
+
+ print main(sys.argv[1], prefix)
+
+
+# vim: fdm=marker
diff --git a/dot_vim/ftplugin/latex-suite/outline.pyc b/dot_vim/ftplugin/latex-suite/outline.pyc
new file mode 100644
index 0000000..8049cdc
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/outline.pyc
Binary files differ
diff --git a/dot_vim/ftplugin/latex-suite/packages.vim b/dot_vim/ftplugin/latex-suite/packages.vim
new file mode 100644
index 0000000..c3bf2b1
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages.vim
@@ -0,0 +1,669 @@
+"=============================================================================
+" File: packages.vim
+" Author: Mikolaj Machowski
+" Created: Tue Apr 23 06:00 PM 2002 PST
+" CVS: $Id: packages.vim 997 2006-03-20 09:45:45Z srinathava $
+"
+" Description: handling packages from within vim
+"=============================================================================
+
+" avoid reinclusion.
+if !g:Tex_PackagesMenu || exists('s:doneOnce')
+ finish
+endif
+let s:doneOnce = 1
+
+let s:path = expand("<sfile>:p:h")
+
+let s:menu_div = 20
+
+com! -nargs=0 TPackageUpdate :silent! call Tex_pack_updateall(1)
+com! -nargs=0 TPackageUpdateAll :silent! call Tex_pack_updateall(1)
+
+" Custom command-line completion of Tcommands is very useful but this feature
+" is available only in Vim 6.2 and above. Check number of version and choose
+" proper command and function.
+if v:version >= 602
+ com! -complete=custom,Tex_CompletePackageName -nargs=* TPackage let s:retVal = Tex_pack_one(<f-args>) <bar> normal! i<C-r>=s:retVal<CR>
+
+ " Tex_CompletePackageName: for completing names in TPackage command {{{
+ " Description: get list of package names with globpath(), remove full path
+ " and return list of names separated with newlines.
+ "
+ function! Tex_CompletePackageName(A,P,L)
+ " Get name of packages from all runtimepath directories
+ let packnames = Tex_FindInRtp('', 'packages')
+ let packnames = substitute(packnames, '^,', '', 'e')
+ " Separate names with \n not ,
+ let packnames = substitute(packnames,',','\n','g')
+ return packnames
+ endfunction
+ " }}}
+
+else
+ com! -nargs=* TPackage let s:retVal = Tex_pack_one(<f-args>) <bar> normal! i<C-r>=s:retVal<CR>
+
+endif
+
+imap <silent> <plug> <Nop>
+nmap <silent> <plug> i
+
+let g:Tex_package_supported = ''
+let g:Tex_package_detected = ''
+" Remember the defaults because we want g:Tex_PromptedEnvironments to contain
+" in addition to the default, \newenvironments, and the \newenvironments might
+" change...
+let g:Tex_PromptedEnvironmentsDefault = g:Tex_PromptedEnvironments
+let g:Tex_PromptedCommandsDefault = g:Tex_PromptedCommands
+
+
+" Tex_pack_check: creates the package menu and adds to 'dict' setting. {{{
+"
+function! Tex_pack_check(package)
+ " Use Tex_FindInRtp() function to get first name from packages list in all
+ " rtp directories conforming with latex-suite directories hierarchy
+ " Store names in variables to process functions only once.
+ let packname = Tex_FindInRtp(a:package, 'packages')
+ if packname != ''
+ exe 'runtime! ftplugin/latex-suite/packages/' . a:package
+ if has("gui_running")
+ call Tex_pack(a:package)
+ endif
+ if g:Tex_package_supported !~ a:package
+ let g:Tex_package_supported = g:Tex_package_supported.','.a:package
+ endif
+ endif
+ " Return full list of dictionaries (separated with ,) for package in &rtp
+ call Tex_Debug("Tex_pack_check: searching for ".a:package." in dictionaries/ in &rtp", "pack")
+ let dictname = Tex_FindInRtp(a:package, 'dictionaries', ':p')
+ if dictname != ''
+ exe 'setlocal dict^=' . dictname
+ call Tex_Debug('Tex_pack_check: setlocal dict^=' . dictname, 'pack')
+ if g:Tex_package_supported !~ a:package
+ let g:Tex_package_supported = g:Tex_package_supported.','.a:package
+ endif
+ endif
+ if g:Tex_package_detected !~ '\<'.a:package.'\>'
+ let g:Tex_package_detected = g:Tex_package_detected.','.a:package
+ endif
+ let g:Tex_package_detected = substitute(g:Tex_package_detected, '^,', '', '')
+ let g:Tex_package_supported = substitute(g:Tex_package_supported, '^,', '', '')
+endfunction
+
+" }}}
+" Tex_pack_uncheck: removes package from menu and 'dict' settings. {{{
+function! Tex_pack_uncheck(package)
+ if has("gui_running") && Tex_FindInRtp(a:package, 'packages') != ''
+ exe 'silent! aunmenu '.g:Tex_PackagesMenuLocation.'-sep'.a:package.'-'
+ exe 'silent! aunmenu '.g:Tex_PackagesMenuLocation.a:package.'\ Options'
+ exe 'silent! aunmenu '.g:Tex_PackagesMenuLocation.a:package.'\ Commands'
+ endif
+ if Tex_FindInRtp(a:package, 'dictionaries') != ''
+ exe 'setlocal dict-='.Tex_FindInRtp(a:package, 'dictionaries')
+ endif
+endfunction
+
+" }}}
+" Tex_pack_updateall: updates the TeX-Packages menu {{{
+" Description:
+" This function first calls Tex_pack_all to scan for \usepackage's etc if
+" necessary. After that, it 'supports' and 'unsupports' packages as needed
+" in such a way as to not repeat work.
+function! Tex_pack_updateall(force)
+ call Tex_Debug('+Tex_pack_updateall', 'pack')
+
+ " Find out which file we need to scan.
+ let fname = Tex_GetMainFileName(':p')
+
+ " If this is the same as last time, don't repeat.
+ if !a:force && exists('s:lastScannedFile') &&
+ \ s:lastScannedFile == fname
+ return
+ endif
+ " Remember which file we scanned for next time.
+ let s:lastScannedFile = fname
+
+ " Remember which packages we detected last time.
+ if exists('g:Tex_package_detected')
+ let oldpackages = g:Tex_package_detected
+ else
+ let oldpackages = ''
+ endif
+
+ " This sets up a global variable of all detected packages.
+ let g:Tex_package_detected = ''
+ " reset the environments and commands.
+ let g:Tex_PromptedEnvironments = g:Tex_PromptedEnvironmentsDefault
+ let g:Tex_PromptedCommands = g:Tex_PromptedCommandsDefault
+
+ if expand('%:p') != fname
+ call Tex_Debug(':Tex_pack_updateall: sview '.Tex_EscapeSpaces(fname), 'pack')
+ exe 'sview '.Tex_EscapeSpaces(fname)
+ else
+ call Tex_Debug(':Tex_pack_updateall: split', 'pack')
+ split
+ endif
+
+ call Tex_ScanForPackages()
+ q
+
+ call Tex_Debug(':Tex_pack_updateall: detected ['.g:Tex_package_detected.'] in first run', 'pack')
+
+ " Now for each package find out if this is a custom package and if so,
+ " scan that as well. We will use the ':find' command in vim to let vim
+ " search through the file paths for us.
+ "
+ " NOTE: This while loop will also take into account packages included
+ " within packages to any level of recursion as long as
+ " g:Tex_package_detected is always padded with new package names
+ " from the end.
+ "
+ " First set the &path setting to the user's TEXINPUTS setting.
+ let _path = &path
+ let _suffixesadd = &suffixesadd
+
+ let &path = '.,'.g:Tex_TEXINPUTS
+ let &suffixesadd = '.sty,.tex'
+
+ let scannedPackages = ''
+
+ let i = 1
+ let packname = Tex_Strntok(g:Tex_package_detected, ',', i)
+ while packname != ''
+
+ call Tex_Debug(':Tex_pack_updateall: scanning package '.packname, 'pack')
+
+ " Scan this package only if we have not scanned it before in this
+ " run.
+ if scannedPackages =~ '\<'.packname.'\>'
+ let i = i + 1
+
+ call Tex_Debug(':Tex_pack_updateall: '.packname.' already scanned', 'pack')
+ let packname = Tex_Strntok(g:Tex_package_detected, ',', i)
+ continue
+ endif
+
+ " Split this window in two. The packages/files being found will open
+ " in this new window and we also need not bother with files being
+ " modified etc.
+ split
+
+ call Tex_Debug(':Tex_pack_updateall: silent! find '.Tex_EscapeSpaces(packname).'.sty', 'pack')
+ let thisbufnum = bufnr('%')
+ exec 'silent! find '.Tex_EscapeSpaces(packname).'.sty'
+ call Tex_Debug(':Tex_pack_updateall: present file = '.bufname('%'), 'pack')
+
+ " If this file was not found, assume that it means its not a
+ " custom package and mark it "scanned".
+ " A package is not found if we stay in the same buffer as before and
+ " its not the one where we want to go.
+ if bufnr('%') == thisbufnum && bufnr('%') != bufnr(packname.'.sty')
+ let scannedPackages = scannedPackages.','.packname
+ q
+
+ call Tex_Debug(':Tex_pack_updateall: '.packname.' not found anywhere', 'pack')
+ let i = i + 1
+ let packname = Tex_Strntok(g:Tex_package_detected, ',', i)
+ continue
+ endif
+
+ " otherwise we are presently editing a custom package, scan it for
+ " more \usepackage lines from the first line to the last.
+ let packpath = expand('%:p')
+ let &complete = &complete.'s'.packpath
+
+ call Tex_Debug(':Tex_pack_updateall: found custom package '.packpath, 'pack')
+ call Tex_ScanForPackages(line('$'), line('$'))
+ call Tex_Debug(':Tex_pack_updateall: After scanning, g:Tex_package_detected = '.g:Tex_package_detected, 'pack')
+
+ let scannedPackages = scannedPackages.','.packname
+ " Do not use bwipe, but that leads to excessive buffer number
+ " consumption. Besides, its intuitive for a custom package to remain
+ " on the buffer list.
+ q
+
+ let i = i + 1
+ let packname = Tex_Strntok(g:Tex_package_detected, ',', i)
+ endwhile
+
+ let &path = _path
+ let &suffixesadd = _suffixesadd
+
+ " Now only support packages we didn't last time.
+ " First remove packages which were used last time but are no longer used.
+ let i = 1
+ let oldPackName = Tex_Strntok(oldpackages, ',', i)
+ while oldPackName != ''
+ if g:Tex_package_detected !~ oldPackName
+ call Tex_pack_uncheck(oldPackName)
+ endif
+ let i = i + 1
+ let oldPackName = Tex_Strntok(oldpackages, ',', i)
+ endwhile
+
+ " Then support packages which are used this time but weren't used last
+ " time.
+ let i = 1
+ let newPackName = Tex_Strntok(g:Tex_package_detected, ',', i)
+ while newPackName != ''
+ if oldpackages !~ newPackName
+ call Tex_pack_one(newPackName)
+ endif
+ let i = i + 1
+ let newPackName = Tex_Strntok(g:Tex_package_detected, ',', i)
+ endwhile
+
+ " Throw an event that we are done scanning packages. Some packages might
+ " use this to change behavior based on which options have been used etc.
+ call Tex_Debug(":Tex_pack_updateall: throwing LatexSuiteScannedPackages event", "pack")
+ silent! do LatexSuite User LatexSuiteScannedPackages
+
+ call Tex_Debug("-Tex_pack_updateall", "pack")
+endfunction
+
+" }}}
+" Tex_pack_one: supports each package in the argument list.{{{
+" Description:
+" If no arguments are supplied, then the user is asked to choose from the
+" packages found in the packages/ directory
+function! Tex_pack_one(...)
+ if a:0 == 0 || (a:0 > 0 && a:1 == '')
+ let packlist = Tex_FindInRtp('', 'packages')
+ let packname = Tex_ChooseFromPrompt(
+ \ "Choose a package: \n" .
+ \ Tex_CreatePrompt(packlist, '3', ',') .
+ \ "\nEnter number or filename :",
+ \ packlist, ',')
+ if packname != ''
+ return Tex_pack_one(packname)
+ else
+ return ''
+ endif
+ else
+ " Support the packages supplied. This function can be called with
+ " multiple arguments in which case, support each of them in turn.
+ let retVal = ''
+ let omega = 1
+ while omega <= a:0
+ let packname = a:{omega}
+ if Tex_FindInRtp(packname, 'packages') != ''
+ call Tex_pack_check(packname)
+ if exists('g:TeX_package_option_'.packname)
+ \ && g:TeX_package_option_{packname} != ''
+ let retVal = retVal.'\usepackage[<++>]{'.packname.'}<++>'
+ else
+ let retVal = retVal.'\usepackage{'.packname.'}'."\<CR>"
+ endif
+ else
+ let retVal = retVal.'\usepackage{'.packname.'}'."\<CR>"
+ endif
+ let omega = omega + 1
+ endwhile
+ return IMAP_PutTextWithMovement(substitute(retVal, "\<CR>$", '', ''), '<+', '+>')
+ endif
+endfunction
+" }}}
+" Tex_ScanForPackages: scans the current file for \usepackage{} lines {{{
+" and if supported, loads the options and commands found in the
+" corresponding package file. Also scans for \newenvironment and
+" \newcommand lines and adds names to g:Tex_Prompted variables, they can be
+" easy available through <F5> and <F7> shortcuts
+function! Tex_ScanForPackages(...)
+ call Tex_Debug("+Tex_ScanForPackages", "pack")
+
+ let pos = line('.').' | normal! '.virtcol('.').'|'
+
+ " For package files without \begin and \end{document}, we might be told to
+ " search from beginning to end.
+ if a:0 < 2
+ 0
+ let beginline = search('\\begin{document}', 'W')
+ let endline = search('\\end{document}', 'W')
+ 0
+ else
+ let beginline = a:1
+ let endline = a:2
+ endif
+
+ call Tex_Debug(":Tex_ScanForPackages: Begining scans in [".bufname('%')."], beginline = ".beginline, "pack")
+
+
+ " Scan the file. First open up all the folds, because the command
+ " /somepattern
+ " issued in a closed fold _always_ goes to the first match.
+ let erm = v:errmsg
+ silent! normal! ggVGzO
+ let v:errmsg = erm
+
+ call Tex_Debug(":Tex_ScanForPackages: beginning scan for \\usepackage lines", "pack")
+ " The wrap trick enables us to match \usepackage on the first line as
+ " well.
+ let wrap = 'w'
+ while search('^\s*\\usepackage\_.\{-}{\_.\+}', wrap)
+ let wrap = 'W'
+
+ if line('.') > beginline
+ break
+ endif
+
+ let saveA = @a
+
+ " If there are options, then find those.
+ if getline('.') =~ '\\usepackage\[.\{-}\]'
+ let options = matchstr(getline('.'), '\\usepackage\[\zs.\{-}\ze\]')
+ elseif getline('.') =~ '\\usepackage\['
+ " Entering here means that the user has split the \usepackage
+ " across newlines. Therefore, use yank.
+ exec "normal! /{\<CR>\"ayi}"
+ let options = @a
+ else
+ let options = ''
+ endif
+
+ " The following statement puts the stuff between the { }'s of a
+ " \usepackage{stuff,foo} into @a. Do not use matchstr() and the like
+ " because we can have things split across lines and such.
+ exec "normal! /{\<CR>\"ay/}\<CR>"
+
+ " now remove all whitespace from @a. We need to remove \n and \r
+ " because we can encounter stuff like
+ " \usepackage{pack1,
+ " newpackonanotherline}
+ let @a = substitute(@a, "[ \t\n\r]", '', 'g')
+
+ " Now we have something like pack1,pack2,pack3 with possibly commas
+ " and stuff before the first package and after the last package name.
+ " Remove those.
+ let @a = substitute(@a, '\(^\W*\|\W*$\)', '', 'g')
+
+ " This gets us a string like 'pack1,pack2,pack3'
+ " TODO: This will contain duplicates if the user has duplicates.
+ " Should we bother taking care of this?
+ let g:Tex_package_detected = g:Tex_package_detected.','.@a
+
+ " For each package found, form a global variable of the form
+ " g:Tex_{packagename}_options
+ " which contains a list of the options.
+ let j = 1
+ while Tex_Strntok(@a, ',', j) != ''
+ let g:Tex_{Tex_Strntok(@a, ',', j)}_options = options
+ let j = j + 1
+ endwhile
+
+ " Finally convert @a into something like '"pack1","pack2"'
+ let @a = substitute(@a, '^\|$', '"', 'g')
+ let @a = substitute(@a, ',', '","', 'g')
+
+ call Tex_Debug(":Tex_ScanForPackages: found package(s) [".@a."] on line ".line('.'), "pack")
+
+ " restore @a
+ let @a = saveA
+ endwhile
+ call Tex_Debug(":Tex_ScanForPackages: End scan \\usepackage, detected packages = ".g:Tex_package_detected, "pack")
+
+ " TODO: This needs to be changed. In the future, we might have
+ " functionality to remember the fold-state before opening up all the folds
+ " and then re-creating them. Use mkview.vim.
+ let erm = v:errmsg
+ silent! normal! ggVGzC
+ let v:errmsg = erm
+
+ " Because creating list of detected packages gives string
+ " ',pack1,pack2,pack3' remove leading ,
+ let g:Tex_package_detected = substitute(g:Tex_package_detected, '^,', '', '')
+
+ call Tex_Debug(":Tex_ScanForPackages: Beginning scan for \\newcommand's", "pack")
+ " Scans whole file (up to \end{document}) for \newcommand and adds this
+ " commands to g:Tex_PromptedCommands variable, it is easily available
+ " through <F7>
+ 0
+ while search('^\s*\\newcommand\*\?{.\{-}}', 'W')
+
+ if line('.') > endline
+ break
+ endif
+
+ let newcommand = matchstr(getline('.'), '\\newcommand\*\?{\\\zs.\{-}\ze}')
+ let g:Tex_PromptedCommands = g:Tex_PromptedCommands . ',' . newcommand
+
+ endwhile
+
+ " Scans whole file (up to \end{document}) for \newenvironment and adds this
+ " environments to g:Tex_PromptedEnvironments variable, it is easily available
+ " through <F5>
+ 0
+ call Tex_Debug(":Tex_ScanForPackages: Beginning scan for \\newenvironment's", 'pack')
+
+ while search('^\s*\\newenvironment\*\?{.\{-}}', 'W')
+ call Tex_Debug('found newenvironment on '.line('.'), 'pack')
+
+ if line('.') > endline
+ break
+ endif
+
+ let newenvironment = matchstr(getline('.'), '\\newenvironment\*\?{\zs.\{-}\ze}')
+ let g:Tex_PromptedEnvironments = g:Tex_PromptedEnvironments . ',' . newenvironment
+
+ endwhile
+
+ exe pos
+ " first make a random search so that we push at least one item onto the
+ " search history. Since vim puts only one item in the history per function
+ " call, this way we make sure that one and only item is put into the
+ " search history.
+ normal! /^<CR>
+ " now delete it...
+ call histdel('/', -1)
+
+ call Tex_Debug("-Tex_ScanForPackages", "pack")
+endfunction
+
+" }}}
+" Tex_pack_supp_menu: sets up a menu for package files {{{
+" found in the packages directory groups the packages thus found into groups
+" of 20...
+function! Tex_pack_supp_menu()
+ let suplist = Tex_FindInRtp('', 'packages')
+
+ call Tex_MakeSubmenu(suplist, g:Tex_PackagesMenuLocation.'Supported.',
+ \ '<plug><C-r>=Tex_pack_one("', '")<CR>')
+endfunction
+
+" }}}
+" Tex_pack: loads the options (and commands) for the given package {{{
+function! Tex_pack(pack)
+ if exists('g:TeX_package_'.a:pack)
+
+ let optionList = g:TeX_package_option_{a:pack}.','
+ let commandList = g:TeX_package_{a:pack}.','
+
+ " Don't create separator if in package file are only Vim commands.
+ " Rare but possible.
+ if !(commandList == ',' && optionList == ',')
+ exec 'amenu '.g:Tex_PackagesMenuLocation.'-sep'.a:pack.'- <Nop>'
+ endif
+
+ if optionList != ''
+
+ let mainMenuName = g:Tex_PackagesMenuLocation.a:pack.'\ Options.'
+ call s:GroupPackageMenuItems(optionList, mainMenuName,
+ \ '<plug><C-r>=IMAP_PutTextWithMovement("', ',")<CR>')
+
+ endif
+
+ if commandList != ''
+
+ let mainMenuName = g:Tex_PackagesMenuLocation.a:pack.'\ Commands.'
+ call s:GroupPackageMenuItems(commandList, mainMenuName,
+ \ '<plug><C-r>=Tex_ProcessPackageCommand("', '")<CR>',
+ \ '<SID>FilterPackageMenuLHS')
+ endif
+ endif
+endfunction
+
+" }}}
+
+" ==============================================================================
+" Menu Functions
+" Creating menu items for the all the package files found in the packages/
+" directory as well as creating menus for each supported package found in the
+" preamble.
+" ==============================================================================
+" Tex_MakeSubmenu: makes a submenu given a list of items {{{
+" Description:
+" This function takes a comma seperated list of menu items and creates a
+" 'grouped' menu. i.e, it groups the items into s:menu_div items each and
+" puts them in submenus of the given mainMenu.
+" Each menu item is linked to the HandlerFunc.
+" If an additional argument is supplied, then it is used to filter each of
+" the menu items to generate better names for the menu display.
+"
+function! Tex_MakeSubmenu(menuList, mainMenuName,
+ \ handlerFuncLHS, handlerFuncRHS, ...)
+
+ let extractFunction = (a:0 > 0 ? a:1 : '' )
+ let menuList = substitute(a:menuList, '[^,]$', ',', '')
+
+ let doneMenuSubmenu = 0
+
+ while menuList != ''
+
+ " Extract upto s:menu_div menus at once.
+ let menuBunch = matchstr(menuList, '\v(.{-},){,'.s:menu_div.'}')
+
+ " The remaining menus go into the list.
+ let menuList = strpart(menuList, strlen(menuBunch))
+
+ let submenu = ''
+ " If there is something remaining, then we got s:menu_div items.
+ " therefore put these menu items into a submenu.
+ if strlen(menuList) || doneMenuSubmenu
+ exec 'let firstMenu = '.extractFunction."(matchstr(menuBunch, '\\v^.{-}\\ze,'))"
+ exec 'let lastMenu = '.extractFunction."(matchstr(menuBunch, '\\v[^,]{-}\\ze,$'))"
+
+ let submenu = firstMenu.'\ \-\ '.lastMenu.'.'
+
+ let doneMenuSubmenu = 1
+ endif
+
+ " Now for each menu create a menu under the submenu
+ let i = 1
+ let menuName = Tex_Strntok(menuBunch, ',', i)
+ while menuName != ''
+ exec 'let menuItem = '.extractFunction.'(menuName)'
+ execute 'amenu '.a:mainMenuName.submenu.menuItem
+ \ ' '.a:handlerFuncLHS.menuName.a:handlerFuncRHS
+
+ let i = i + 1
+ let menuName = Tex_Strntok(menuBunch, ',', i)
+ endwhile
+ endwhile
+endfunction
+
+" }}}
+" GroupPackageMenuItems: uses the sbr: to split menus into groups {{{
+" Description:
+" This function first splits up the menuList into groups based on the
+" special sbr: tag and then calls Tex_MakeSubmenu
+"
+function! <SID>GroupPackageMenuItems(menuList, menuName,
+ \ handlerFuncLHS, handlerFuncRHS,...)
+
+ if a:0 > 0
+ let extractFunction = a:1
+ else
+ let extractFunction = ''
+ endif
+ let menuList = a:menuList
+
+ while matchstr(menuList, 'sbr:') != ''
+ let groupName = matchstr(menuList, '\v^sbr:\zs.{-}\ze,')
+ let menuList = strpart(menuList, strlen('sbr:'.groupName.','))
+ if matchstr(menuList, 'sbr:') != ''
+ let menuGroup = matchstr(menuList, '\v^.{-},\zesbr:')
+ else
+ let menuGroup = menuList
+ endif
+
+ call Tex_MakeSubmenu(menuGroup, a:menuName.groupName.'.',
+ \ a:handlerFuncLHS, a:handlerFuncRHS, extractFunction)
+
+ let menuList = strpart(menuList, strlen(menuGroup))
+ endwhile
+
+ call Tex_MakeSubmenu(menuList, a:menuName,
+ \ a:handlerFuncLHS, a:handlerFuncRHS, extractFunction)
+
+endfunction " }}}
+" Definition of what to do for various package commands {{{
+let s:CommandSpec_bra = '\<+replace+>{<++>}<++>'
+let s:CommandSpec_brs = '\<+replace+><++>'
+let s:CommandSpec_brd = '\<+replace+>{<++>}{<++>}<++>'
+let s:CommandSpec_env = '\begin{<+replace+>}'."\<CR><++>\<CR>".'\end{<+replace+>}<++>'
+let s:CommandSpec_ens = '\begin{<+replace+>}<+extra+>'."\<CR><++>\<CR>".'\end{<+replace+>}<++>'
+let s:CommandSpec_eno = '\begin[<++>]{<+replace+>}'."\<CR><++>\<CR>".'\end{<+replace+>}'
+let s:CommandSpec_nor = '\<+replace+>'
+let s:CommandSpec_noo = '\<+replace+>[<++>]'
+let s:CommandSpec_nob = '\<+replace+>[<++>]{<++>}{<++>}<++>'
+let s:CommandSpec_spe = '<+replace+>'
+let s:CommandSpec_ = '\<+replace+>'
+
+let s:MenuLHS_bra = '\\&<+replace+>{}'
+let s:MenuLHS_brs = '\\&<+replace+>{}'
+let s:MenuLHS_brd = '\\&<+replace+>{}{}'
+let s:MenuLHS_env = '&<+replace+>\ (E)'
+let s:MenuLHS_ens = '&<+replace+>\ (E)'
+let s:MenuLHS_eno = '&<+replace+>\ (E)'
+let s:MenuLHS_nor = '\\&<+replace+>'
+let s:MenuLHS_noo = '\\&<+replace+>[]'
+let s:MenuLHS_nob = '\\&<+replace+>[]{}{}'
+let s:MenuLHS_spe = '&<+replace+>'
+let s:MenuLHS_sep = '-sep<+replace+>-'
+let s:MenuLHS_ = '\\&<+replace+>'
+" }}}
+" Tex_ProcessPackageCommand: processes a command from the package menu {{{
+" Description:
+function! Tex_ProcessPackageCommand(command)
+ if a:command =~ ':'
+ let commandType = matchstr(a:command, '^\w\+\ze:')
+ let commandName = matchstr(a:command, '^\w\+:\zs[^:]\+\ze:\?')
+ let extrapart = strpart(a:command, strlen(commandType.':'.commandName.':'))
+ else
+ let commandType = ''
+ let commandName = a:command
+ let extrapart = ''
+ endif
+
+ let command = s:CommandSpec_{commandType}
+ let command = substitute(command, '<+replace+>', commandName, 'g')
+ let command = substitute(command, '<+extra+>', extrapart, 'g')
+ return IMAP_PutTextWithMovement(command)
+endfunction
+" }}}
+" FilterPackageMenuLHS: filters the command description to provide a better menu item {{{
+" Description:
+function! <SID>FilterPackageMenuLHS(command)
+ let commandType = matchstr(a:command, '^\w\+\ze:')
+ if commandType != ''
+ let commandName = strpart(a:command, strlen(commandType.':'))
+ else
+ let commandName = a:command
+ endif
+
+ return substitute(s:MenuLHS_{commandType}, '<+replace+>', commandName, 'g')
+endfunction " }}}
+
+if g:Tex_Menus
+ exe 'amenu '.g:Tex_PackagesMenuLocation.'&UpdatePackage :call Tex_pack(expand("<cword>"))<cr>'
+ exe 'amenu '.g:Tex_PackagesMenuLocation.'&UpdateAll :call Tex_pack_updateall(1)<cr>'
+
+ call Tex_pack_supp_menu()
+endif
+
+augroup LatexSuite
+ au LatexSuite User LatexSuiteFileType
+ \ call Tex_Debug('packages.vim: Catching LatexSuiteFileType event', 'pack') |
+ \ call Tex_pack_updateall(0)
+augroup END
+
+" vim:fdm=marker:ts=4:sw=4:noet:ff=unix
diff --git a/dot_vim/ftplugin/latex-suite/packages/SIunits b/dot_vim/ftplugin/latex-suite/packages/SIunits
new file mode 100644
index 0000000..ba110fa
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/SIunits
@@ -0,0 +1,315 @@
+if exists("SIunits_package_file")
+ finish
+endif
+let SIunits_package_file = 1
+
+let g:TeX_package_SIunits =
+\'nor:addprefix,'.
+\'nor:addunit,'.
+\'nor:ampere,'.
+\'nor:amperemetresecond,'.
+\'nor:amperepermetre,'.
+\'nor:amperepermetrenp,'.
+\'nor:amperepersquaremetre,'.
+\'nor:amperepersquaremetrenp,'.
+\'nor:angstrom,'.
+\'nor:arad,'.
+\'nor:arcminute,'.
+\'nor:arcsecond,'.
+\'nor:are,'.
+\'nor:atomicmass,'.
+\'nor:atto,'.
+\'nor:attod,'.
+\'nor:barn,'.
+\'nor:bbar,'.
+\'nor:becquerel,'.
+\'nor:becquerelbase,'.
+\'nor:bel,'.
+\'nor:candela,'.
+\'nor:candelapersquaremetre,'.
+\'nor:candelapersquaremetrenp,'.
+\'nor:celsius,'.
+\'nor:Celsius,'.
+\'nor:celsiusbase,'.
+\'nor:centi,'.
+\'nor:centid,'.
+\'nor:coulomb,'.
+\'nor:coulombbase,'.
+\'nor:coulombpercubicmetre,'.
+\'nor:coulombpercubicmetrenp,'.
+\'nor:coulombperkilogram,'.
+\'nor:coulombperkilogramnp,'.
+\'nor:coulombpermol,'.
+\'nor:coulombpermolnp,'.
+\'nor:coulombpersquaremetre,'.
+\'nor:coulombpersquaremetrenp,'.
+\'nor:cubed,'.
+\'nor:cubic,'.
+\'nor:cubicmetre,'.
+\'nor:cubicmetreperkilogram,'.
+\'nor:cubicmetrepersecond,'.
+\'nor:curie,'.
+\'nor:dday,'.
+\'nor:deca,'.
+\'nor:decad,'.
+\'nor:deci,'.
+\'nor:decid,'.
+\'nor:degree,'.
+\'nor:degreecelsius,'.
+\'nor:deka,'.
+\'nor:dekad,'.
+\'nor:derbecquerel,'.
+\'nor:dercelsius,'.
+\'nor:dercoulomb,'.
+\'nor:derfarad,'.
+\'nor:dergray,'.
+\'nor:derhenry,'.
+\'nor:derhertz,'.
+\'nor:derjoule,'.
+\'nor:derkatal,'.
+\'nor:derlumen,'.
+\'nor:derlux,'.
+\'nor:dernewton,'.
+\'nor:derohm,'.
+\'nor:derpascal,'.
+\'nor:derradian,'.
+\'nor:dersiemens,'.
+\'nor:dersievert,'.
+\'nor:dersteradian,'.
+\'nor:dertesla,'.
+\'nor:dervolt,'.
+\'nor:derwatt,'.
+\'nor:derweber,'.
+\'nor:electronvolt,'.
+\'nor:exa,'.
+\'nor:exad,'.
+\'nor:farad,'.
+\'nor:faradbase,'.
+\'nor:faradpermetre,'.
+\'nor:faradpermetrenp,'.
+\'nor:femto,'.
+\'nor:femtod,'.
+\'nor:fourth,'.
+\'nor:gal,'.
+\'nor:giga,'.
+\'nor:gigad,'.
+\'nor:gram,'.
+\'nor:graybase,'.
+\'nor:graypersecond,'.
+\'nor:graypersecondnp,'.
+\'nor:hectare,'.
+\'nor:hecto,'.
+\'nor:hectod,'.
+\'nor:henry,'.
+\'nor:henrybase,'.
+\'nor:henrypermetre,'.
+\'nor:henrypermetrenp,'.
+\'nor:hertz,'.
+\'nor:hertzbase,'.
+\'nor:hour,'.
+\'nor:joule,'.
+\'nor:joulebase,'.
+\'nor:joulepercubicmetre,'.
+\'nor:joulepercubicmetrenp,'.
+\'nor:jouleperkelvin,'.
+\'nor:jouleperkelvinnp,'.
+\'nor:jouleperkilogram,'.
+\'nor:jouleperkilogramkelvin,'.
+\'nor:jouleperkilogramkelvinnp,'.
+\'nor:jouleperkilogramnp,'.
+\'nor:joulepermole,'.
+\'nor:joulepermolekelvin,'.
+\'nor:joulepermolekelvinnp,'.
+\'nor:joulepermolenp,'.
+\'nor:joulepersquaremetre,'.
+\'nor:joulepersquaremetrenp,'.
+\'nor:joulepertesla,'.
+\'nor:jouleperteslanp,'.
+\'nor:katal,'.
+\'nor:katalbase,'.
+\'nor:katalpercubicmetre,'.
+\'nor:katalpercubicmetrenp,'.
+\'nor:kelvin,'.
+\'nor:kilo,'.
+\'nor:kilod,'.
+\'nor:kilogram,'.
+\'nor:kilogrammetrepersecond,'.
+\'nor:kilogrammetrepersecondnp,'.
+\'nor:kilogrammetrepersquaresecond,'.
+\'nor:kilogrammetrepersquaresecondnp,'.
+\'nor:kilogrampercubicmetre,'.
+\'nor:kilogrampercubicmetrecoulomb,'.
+\'nor:kilogrampercubicmetrecoulombnp,'.
+\'nor:kilogrampercubicmetrenp,'.
+\'nor:kilogramperkilomole,'.
+\'nor:kilogramperkilomolenp,'.
+\'nor:kilogrampermetre,'.
+\'nor:kilogrampermetrenp,'.
+\'nor:kilogrampersecond,'.
+\'nor:kilogrampersecondcubicmetre,'.
+\'nor:kilogrampersecondcubicmetrenp,'.
+\'nor:kilogrampersecondnp,'.
+\'nor:kilogrampersquaremetre,'.
+\'nor:kilogrampersquaremetrenp,'.
+\'nor:kilogrampersquaremetresecond,'.
+\'nor:kilogrampersquaremetresecondnp,'.
+\'nor:kilogramsquaremetre,'.
+\'nor:kilogramsquaremetrenp,'.
+\'nor:kilogramsquaremetrepersecond,'.
+\'nor:kilogramsquaremetrepersecondnp,'.
+\'nor:kilowatthour,'.
+\'nor:liter,'.
+\'nor:litre,'.
+\'nor:lumen,'.
+\'nor:lumenbase,'.
+\'nor:lux,'.
+\'nor:luxbase,'.
+\'nor:mega,'.
+\'nor:megad,'.
+\'nor:meter,'.
+\'nor:metre,'.
+\'nor:metrepersecond,'.
+\'nor:metrepersecondnp,'.
+\'nor:metrepersquaresecond,'.
+\'nor:metrepersquaresecondnp,'.
+\'nor:micro,'.
+\'nor:microd,'.
+\'nor:milli,'.
+\'nor:millid,'.
+\'nor:minute,'.
+\'nor:mole,'.
+\'nor:molepercubicmetre,'.
+\'nor:molepercubicmetrenp,'.
+\'nor:nano,'.
+\'nor:nanod,'.
+\'nor:neper,'.
+\'nor:newton,'.
+\'nor:newtonbase,'.
+\'nor:newtonmetre,'.
+\'nor:newtonpercubicmetre,'.
+\'nor:newtonpercubicmetrenp,'.
+\'nor:newtonperkilogram,'.
+\'nor:newtonperkilogramnp,'.
+\'nor:newtonpermetre,'.
+\'nor:newtonpermetrenp,'.
+\'nor:newtonpersquaremetre,'.
+\'nor:newtonpersquaremetrenp,'.
+\'nor:NoAMS,'.
+\'nor:no@qsk,'.
+\'nor:ohm,'.
+\'nor:ohmbase,'.
+\'nor:ohmmetre,'.
+\'nor:one,'.
+\'nor:paminute,'.
+\'nor:pascal,'.
+\'nor:pascalbase,'.
+\'nor:pascalsecond,'.
+\'nor:pasecond,'.
+\'nor:per,'.
+\'nor:period@active,'.
+\'nor:persquaremetresecond,'.
+\'nor:persquaremetresecondnp,'.
+\'nor:peta,'.
+\'nor:petad,'.
+\'nor:pico,'.
+\'nor:picod,'.
+\'nor:power,'.
+\'nor:@qsk,'.
+\'nor:quantityskip,'.
+\'nor:rad,'.
+\'nor:radian,'.
+\'nor:radianbase,'.
+\'nor:radianpersecond,'.
+\'nor:radianpersecondnp,'.
+\'nor:radianpersquaresecond,'.
+\'nor:radianpersquaresecondnp,'.
+\'nor:reciprocal,'.
+\'nor:rem,'.
+\'nor:roentgen,'.
+\'nor:rp,'.
+\'nor:rpcubed,'.
+\'nor:rpcubic,'.
+\'nor:rpcubicmetreperkilogram,'.
+\'nor:rpcubicmetrepersecond,'.
+\'nor:rperminute,'.
+\'nor:rpersecond,'.
+\'nor:rpfourth,'.
+\'nor:rpsquare,'.
+\'nor:rpsquared,'.
+\'nor:rpsquaremetreperkilogram,'.
+\'nor:second,'.
+\'nor:siemens,'.
+\'nor:siemensbase,'.
+\'nor:sievert,'.
+\'nor:sievertbase,'.
+\'nor:square,'.
+\'nor:squared,'.
+\'nor:squaremetre,'.
+\'nor:squaremetrepercubicmetre,'.
+\'nor:squaremetrepercubicmetrenp,'.
+\'nor:squaremetrepercubicsecond,'.
+\'nor:squaremetrepercubicsecondnp,'.
+\'nor:squaremetreperkilogram,'.
+\'nor:squaremetrepernewtonsecond,'.
+\'nor:squaremetrepernewtonsecondnp,'.
+\'nor:squaremetrepersecond,'.
+\'nor:squaremetrepersecondnp,'.
+\'nor:squaremetrepersquaresecond,'.
+\'nor:squaremetrepersquaresecondnp,'.
+\'nor:steradian,'.
+\'nor:steradianbase,'.
+\'nor:tera,'.
+\'nor:terad,'.
+\'nor:tesla,'.
+\'nor:teslabase,'.
+\'nor:ton,'.
+\'nor:tonne,'.
+\'nor:unit,'.
+\'nor:unitskip,'.
+\'nor:usk,'.
+\'nor:volt,'.
+\'nor:voltbase,'.
+\'nor:voltpermetre,'.
+\'nor:voltpermetrenp,'.
+\'nor:watt,'.
+\'nor:wattbase,'.
+\'nor:wattpercubicmetre,'.
+\'nor:wattpercubicmetrenp,'.
+\'nor:wattperkilogram,'.
+\'nor:wattperkilogramnp,'.
+\'nor:wattpermetrekelvin,'.
+\'nor:wattpermetrekelvinnp,'.
+\'nor:wattpersquaremetre,'.
+\'nor:wattpersquaremetrenp,'.
+\'nor:wattpersquaremetresteradian,'.
+\'nor:wattpersquaremetresteradiannp,'.
+\'nor:weber,'.
+\'nor:weberbase,'.
+\'nor:yocto,'.
+\'nor:yoctod,'.
+\'nor:yotta,'.
+\'nor:yottad,'.
+\'nor:zepto,'.
+\'nor:zeptod,'.
+\'nor:zetta,'.
+\'nor:zettad'
+
+let g:TeX_package_option_SIunits =
+\'amssymb,'.
+\'binary,'.
+\'cdot,'.
+\'derived,'.
+\'derivedinbase,'.
+\'Gray,'.
+\'mediumqspace,'.
+\'mediumspace,'.
+\'noams,'.
+\'pstricks,'.
+\'squaren,'.
+\'textstyle,'.
+\'thickqspace,'.
+\'thickspace,'.
+\'thinqspace,'.
+\'thinspace'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/accents b/dot_vim/ftplugin/latex-suite/packages/accents
new file mode 100644
index 0000000..706d95e
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/accents
@@ -0,0 +1,28 @@
+if exists("accents_package_file")
+ finish
+endif
+let accents_package_file = 1
+
+let g:TeX_package_option_accents =
+\ 'nonscript,'
+\.'single'
+
+let g:TeX_package_accents =
+\ 'bra:grave,'
+\.'bra:acute,'
+\.'bra:check,'
+\.'bra:breve,'
+\.'bra:bar,'
+\.'bra:ring,'
+\.'bra:hat,'
+\.'bra:dot,'
+\.'bra:tilde,'
+\.'bra:undertilde,'
+\.'bra:ddot,'
+\.'bra:dddot,'
+\.'bra:ddddot,'
+\.'bra:vec,'
+\.'brd:accentset,'
+\.'brd:underaccent'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/acromake b/dot_vim/ftplugin/latex-suite/packages/acromake
new file mode 100644
index 0000000..2130f61
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/acromake
@@ -0,0 +1,10 @@
+if exists("acromake_package_file")
+ finish
+endif
+let acromake_package_file = 1
+
+let g:TeX_package_option_acromake = ''
+
+let g:TeX_package_acromake = 'brs:acromake{<++>}{<++>}{<++>}'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/afterpage b/dot_vim/ftplugin/latex-suite/packages/afterpage
new file mode 100644
index 0000000..5087321
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/afterpage
@@ -0,0 +1,10 @@
+if exists("afterpage_package_file")
+ finish
+endif
+let afterpage_package_file = 1
+
+let g:TeX_package_option_afterpage = ''
+
+let g:TeX_package_afterpage = 'bra:afterpage'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/alltt b/dot_vim/ftplugin/latex-suite/packages/alltt
new file mode 100644
index 0000000..c30b684
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/alltt
@@ -0,0 +1,12 @@
+if exists("alltt_package_file")
+ finish
+endif
+let alltt_package_file = 1
+
+let g:TeX_package_option_alltt = ''
+
+let g:TeX_package_alltt = 'env:alltt'
+
+syn region texZone start="\\begin{alltt}" end="\\end{alltt}\|%stopzone\>" fold
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/amsmath b/dot_vim/ftplugin/latex-suite/packages/amsmath
new file mode 100644
index 0000000..fd7dcda
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/amsmath
@@ -0,0 +1,106 @@
+if exists("amsmath_package_file")
+ finish
+endif
+let amsmath_package_file = 1
+
+let g:TeX_package_option_amsmath =
+\ 'centertags,'
+\.'tbtags,'
+\.'sumlimits,'
+\.'nosumlimits,'
+\.'intlimits,'
+\.'nointlimits,'
+\.'namelimits,'
+\.'nonamelimits,'
+\.'leqno,'
+\.'reqno,'
+\.'fleqno'
+
+let g:TeX_package_amsmath =
+\ 'sbr:Environments,'
+\.'env:equation,'
+\.'env:equation*,'
+\.'env:align,'
+\.'env:align*,'
+\.'env:gather,'
+\.'env:gather*,'
+\.'env:flalign,'
+\.'env:flalign*,'
+\.'env:multline,'
+\.'env:multline*,'
+\.'ens:alignat:{<+arg1+>}{<+arg2+>},'
+\.'env:alignat,'
+\.'ens:alignat*:{<+arg1+>}{<+arg2+>},,'
+\.'env:alignat*,'
+\.'env:subequations,'
+\.'env:subarray,'
+\.'env:split,'
+\.'env:cases,'
+\.'sbr:Matrices,'
+\.'env:matrix,'
+\.'env:pmatrix,'
+\.'env:bmatrix,'
+\.'env:Bmatrix,'
+\.'env:vmatrix,'
+\.'env:Vmatrix,'
+\.'env:smallmatrix,'
+\.'bra:hdotsfor,'
+\.'sbr:Dots,'
+\.'dotsc,'
+\.'dotsb,'
+\.'dotsm,'
+\.'dotsi,'
+\.'dotso,'
+\.'sbr:ItalicGreek,'
+\.'nor:varGamma,'
+\.'nor:varDelta,'
+\.'nor:varTheta,'
+\.'nor:varLambda,'
+\.'nor:varXi,'
+\.'nor:varPi,'
+\.'nor:varSigma,'
+\.'nor:varUpsilon,'
+\.'nor:varPhi,'
+\.'nor:varPsi,'
+\.'nor:varOmega,'
+\.'sbr:Mod,'
+\.'nor:mod,'
+\.'nor:bmod,'
+\.'nor:pmod,'
+\.'nor:pod,'
+\.'sbr:CreatingSymbols,'
+\.'brd:overset,'
+\.'brd:underset,'
+\.'brd:sideset,'
+\.'sbr:Fractions,'
+\.'brd:frac,'
+\.'brd:dfrac,'
+\.'brd:tfrac,'
+\.'brd:cfrac,'
+\.'brd:binom,'
+\.'brd:dbinom,'
+\.'brd:tbinom,'
+\.'brs:genfrac{<+ldelim+>}{<+rdelim+>}{<+thick+>}{<+style+>}{<+numer+>}{<+denom+>},'
+\.'sbr:Commands,'
+\.'nob:smash,'
+\.'bra:substack,'
+\.'bra:tag,'
+\.'bra:tag*,'
+\.'nor:notag,'
+\.'bra:raisetag,'
+\.'bra:shoveleft,'
+\.'bra:shoveright,'
+\.'bra:intertext,'
+\.'bra:text,'
+\.'nor:displaybreak,'
+\.'noo:displaybreak,'
+\.'noo:allowdisplaybreaks,'
+\.'nor:nobreakdash,'
+\.'brs:numberwithin{<+env+>}{<+parent+>},'
+\.'bra:leftroot,'
+\.'bra:uproot,'
+\.'bra:boxed,'
+\.'brs:DeclareMathSymbol{<++>}{<++>}{<++>}{<++>},'
+\.'bra:eqref'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/amsthm b/dot_vim/ftplugin/latex-suite/packages/amsthm
new file mode 100644
index 0000000..6bae018
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/amsthm
@@ -0,0 +1,21 @@
+if exists("amsthm_package_file")
+ finish
+endif
+let amsthm_package_file = 1
+
+let TeX_package_option_amsthm = ''
+
+let TeX_package_amsthm =
+\ 'env:proof,'
+\.'nor:swapnumbers,'
+\.'brd:newtheorem,'
+\.'brd:newtheorem*,'
+\.'nor:theoremstyle{plain},'
+\.'nor:theoremstyle{definition},'
+\.'nor:theoremstyle{remark},'
+\.'nor:newtheoremstyle,'
+\.'nor:qedsymbol,'
+\.'nor:qed,'
+\.'nor:qedhere'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/amsxtra b/dot_vim/ftplugin/latex-suite/packages/amsxtra
new file mode 100644
index 0000000..3875cc3
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/amsxtra
@@ -0,0 +1,12 @@
+if exists("amsxtra_package_file")
+ finish
+endif
+let amsxtra_package_file = 1
+
+let g:TeX_package_option_amsxtra = ''
+
+let g:TeX_package_amsxtra =
+\ 'nor:sphat,'
+\.'nor:sptilde'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/arabic b/dot_vim/ftplugin/latex-suite/packages/arabic
new file mode 100644
index 0000000..46f8314
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/arabic
@@ -0,0 +1,10 @@
+if exists("arabic_package_file")
+ finish
+endif
+let arabic_package_file = 1
+
+let g:TeX_package_option_arabic = ''
+
+let g:TeX_package_arabic = 'bra:arabicnumeral'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/array b/dot_vim/ftplugin/latex-suite/packages/array
new file mode 100644
index 0000000..99f3dbc
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/array
@@ -0,0 +1,17 @@
+if exists("array_package_file")
+ finish
+endif
+let array_package_file = 1
+
+let g:TeX_package_option_array = ''
+
+let g:TeX_package_array =
+\ 'brs:newcolumntype{<+type+>}[<+no+>]{<+preamble+>},'
+\.'arraycolsep,'
+\.'tabcolsep,'
+\.'arrayrulewidth,'
+\.'doublerulesep,'
+\.'arraystretch,'
+\.'extrarowheight'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/babel b/dot_vim/ftplugin/latex-suite/packages/babel
new file mode 100644
index 0000000..cdb76ec
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/babel
@@ -0,0 +1,98 @@
+if exists("babel_package_file")
+ finish
+endif
+let babel_package_file = 1
+
+" This package sets some language specific options.
+" Since it needs to find out which options the user used with the babel
+" package, it needs to wait till latex-suite is done scanning packages. It
+" then catches the LatexSuiteScannedPackages event which
+" Tex_pack_updateall() throws at which time g:Tex_pack_detected and
+" g:Tex_babel_options contain the necessary information.
+
+let g:TeX_package_option_babel =
+\ 'afrikaans,'
+\.'bahasa,'
+\.'basque,'
+\.'breton,'
+\.'bulgarian,'
+\.'catalan,'
+\.'croatian,'
+\.'chech,'
+\.'danish,'
+\.'dutch,'
+\.'english,USenglish,american,UKenglish,british,canadian,'
+\.'esperanto,'
+\.'estonian,'
+\.'finnish,'
+\.'french,francais,canadien,acadian,'
+\.'galician,'
+\.'austrian,german,germanb,ngerman,naustrian,'
+\.'greek,polutonikogreek,'
+\.'hebrew,'
+\.'magyar,hungarian,'
+\.'icelandic,'
+\.'irish,'
+\.'italian,'
+\.'latin,'
+\.'lowersorbian,'
+\.'samin,'
+\.'norsk,nynorsk,'
+\.'polish,'
+\.'portuges,portuguese,brazilian,brazil,'
+\.'romanian,'
+\.'russian,'
+\.'scottish,'
+\.'spanish,'
+\.'slovak,'
+\.'slovene,'
+\.'swedish,'
+\.'serbian,'
+\.'turkish,'
+\.'ukrainian,'
+\.'uppersorbian,'
+\.'welsh'
+
+let g:TeX_package_babel =
+\ 'bra:selectlanguage,'
+\.'env:otherlanguage,'
+\.'env:otherlanguage*,'
+\.'env:hyphenrules,'
+\.'brd:foreignlanguage,'
+\.'spe:iflanguage{<+name+>}{<+true+>}{<+false+>},'
+\.'languagename,'
+\.'bra:useshorthands,'
+\.'brd:defineshorthand,'
+\.'brd:aliasshorthand,'
+\.'bra:languageshorthans,'
+\.'bra:shorthandon,'
+\.'bra:shorthandoff,'
+\.'brd:languageattribute'
+
+" vim:ft=vim:ff=unix:
+if exists('s:doneOnce')
+ finish
+endif
+let s:doneOnce = 1
+
+augroup LatexSuite
+ au LatexSuite User LatexSuiteScannedPackages
+ \ call Tex_Debug('babel: catching LatexSuiteScannedPackages event') |
+ \ call s:SetQuotes()
+augroup END
+
+let s:path = expand('<sfile>:p:h')
+
+" SetQuotes: sets quotes for various languages {{{
+" Description:
+function! <SID>SetQuotes()
+ if g:Tex_package_detected =~ '\<babel\>'
+ if g:Tex_babel_options =~ '\<german\>'
+ exec 'so '.s:path.'/german'
+ elseif g:Tex_babel_options =~ '\<ngerman\>'
+ exec 'so '.s:path.'/ngerman'
+ endif
+ endif
+endfunction " }}}
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/bar b/dot_vim/ftplugin/latex-suite/packages/bar
new file mode 100644
index 0000000..0087b95
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/bar
@@ -0,0 +1,27 @@
+if exists("bar_package_file")
+ finish
+endif
+let bar_package_file = 1
+
+let g:TeX_package_option_bar = ''
+
+let g:TeX_package_bar =
+\ 'env:barenv,'
+\.'brs:bar{<+height+>}{<+index+>}[<+desc+>],'
+\.'hlineon,'
+\.'brs:legend{<+index+>}{<+text+>},'
+\.'bra:setdepth,'
+\.'bra:sethspace,'
+\.'brs:setlinestyle{<+solid-dotted+>},'
+\.'brs:setnumberpos{<+empty-axis-down-inside-outside-up+>},'
+\.'bra:setprecision,'
+\.'bra:setstretch,'
+\.'bra:setstyle,'
+\.'bra:setwidth,'
+\.'brs:setxaxis{<+w1+>}{<+w2+>}{<+step+>},'
+\.'brs:setyaxis[<+n+>]{<+w1+>}{<+w2+>}{<+step+>},'
+\.'brs:setxname[<+lrbt+>]{<+etiquette+>},'
+\.'brs:setyname[<+lrbt+>]{<+etiquette+>},'
+\.'brs:setxvaluetyp{<+day-month+>}'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/bm b/dot_vim/ftplugin/latex-suite/packages/bm
new file mode 100644
index 0000000..1cd5109
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/bm
@@ -0,0 +1,10 @@
+if exists("bm_package_file")
+ finish
+endif
+let bm_package_file = 1
+
+let g:TeX_package_option_bm = ''
+
+let g:TeX_package_bm = 'bra:bm'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/bophook b/dot_vim/ftplugin/latex-suite/packages/bophook
new file mode 100644
index 0000000..16ca8b0
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/bophook
@@ -0,0 +1,12 @@
+if exists("bophook_package_file")
+ finish
+endif
+let bophook_package_file = 1
+
+let g:TeX_package_option_bophook = ''
+
+let g:TeX_package_bophook =
+\ 'bra:AtBeginPage,'
+\.'bra:PageLayout'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/boxedminipage b/dot_vim/ftplugin/latex-suite/packages/boxedminipage
new file mode 100644
index 0000000..0917352
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/boxedminipage
@@ -0,0 +1,10 @@
+if exists("boxedminipage_package_file")
+ finish
+endif
+let boxedminipage_package_file = 1
+
+let g:TeX_package_option_boxedminipage = ''
+
+let g:TeX_package_boxedminipage = 'ens:boxedminipage:[<+pos+>]{<+size+>}'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/caption2 b/dot_vim/ftplugin/latex-suite/packages/caption2
new file mode 100644
index 0000000..7e16031
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/caption2
@@ -0,0 +1,43 @@
+if exists("caption2_package_file")
+ finish
+endif
+let caption2_package_file = 1
+
+let g:TeX_package_option_caption2 =
+\ 'scriptsize,'
+\.'footnotesize,'
+\.'small,'
+\.'normalsize,'
+\.'large,'
+\.'Large,'
+\.'up,'
+\.'it,'
+\.'sl,'
+\.'sc,'
+\.'md,'
+\.'bf,'
+\.'rm,'
+\.'sf,'
+\.'tt,'
+\.'ruled,'
+\.'boxed,'
+\.'centerlast,'
+\.'anne,'
+\.'center,'
+\.'flushleft,'
+\.'flushright,'
+\.'oneline,'
+\.'nooneline,'
+\.'hang,'
+\.'isu,'
+\.'indent,'
+\.'longtable'
+
+let g:TeX_package_caption2 =
+\ 'bra:captionsize,'
+\.'bra:captionfont,'
+\.'bra:captionlabelfont,'
+\.'bra:setcaptionmargin,'
+\.'bra:setcaptionwidth'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/cases b/dot_vim/ftplugin/latex-suite/packages/cases
new file mode 100644
index 0000000..a2deafe
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/cases
@@ -0,0 +1,12 @@
+if exists("cases_package_file")
+ finish
+endif
+let cases_package_file = 1
+
+let g:TeX_package_option_cases = ''
+
+let g:TeX_package_cases =
+\ 'ens:numcases:{<+label+>},'
+\.'ens:subnumcases:{<+label+>}'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/ccaption b/dot_vim/ftplugin/latex-suite/packages/ccaption
new file mode 100644
index 0000000..2ec3f2f
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/ccaption
@@ -0,0 +1,20 @@
+if exists("ccaption_package_file")
+ finish
+endif
+let ccaption_package_file = 1
+
+let g:TeX_package_option_ccaption = ''
+
+let g:TeX_package_ccaption =
+\ 'bra:contcaption,'
+\.'bra:legend,'
+\.'bra:namedlegend,'
+\.'abovelegendskip,'
+\.'belowlegendskip,'
+\.'brd:newfixedcaption,'
+\.'brd:renewfixedcaption,'
+\.'brd:providefixedcaption,'
+\.'brs:newfloatenv[<+counter+>]{<+name+>}{<+ext+>}{<+etiq+>},'
+\.'brd:listfloats'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/changebar b/dot_vim/ftplugin/latex-suite/packages/changebar
new file mode 100644
index 0000000..e5002cf
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/changebar
@@ -0,0 +1,35 @@
+if exists("changebar_package_file")
+ finish
+endif
+let changebar_package_file = 1
+
+let g:TeX_package_option_changebar =
+\ 'DVItoLN03,'
+\.'dvitoln03,'
+\.'DVItoPS,'
+\.'dvitops,'
+\.'DVIps,'
+\.'dvips,'
+\.'emTeX,'
+\.'emtex,'
+\.'textures,'
+\.'Textures,'
+\.'outerbars,'
+\.'innerbars,'
+\.'leftbars,'
+\.'rightbars,'
+\.'traceon,'
+\.'traceoff'
+
+let g:TeX_package_changebar =
+\ 'ens:changebar:[<+thickness+>],'
+\.'noo:cbstart,'
+\.'cbend,'
+\.'cbdelete,'
+\.'changebarwidth,'
+\.'deletebarwidth,'
+\.'changebarsep,'
+\.'spe:changebargrey,'
+\.'nochangebars'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/chapterbib b/dot_vim/ftplugin/latex-suite/packages/chapterbib
new file mode 100644
index 0000000..331e901
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/chapterbib
@@ -0,0 +1,24 @@
+if exists("chapterbib_package_file")
+ finish
+endif
+let chapterbib_package_file = 1
+
+let g:TeX_package_option_chapterbib =
+\ 'sectionbib,'
+\.'rootbib,'
+\.'gather,'
+\.'duplicate'
+
+let g:TeX_package_chapterbib =
+\ 'env:cbunit,'
+\.'brd:sectionbib,'
+\.'bra:cbinput,'
+\.'sep:redefine,'
+\.'bra:citeform,'
+\.'bra:citepunct,'
+\.'bra:citeleft,'
+\.'bra:citeright,'
+\.'bra:citemid,'
+\.'bra:citedash'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/cite b/dot_vim/ftplugin/latex-suite/packages/cite
new file mode 100644
index 0000000..aa43e5b
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/cite
@@ -0,0 +1,32 @@
+if exists("cite_package_file")
+ finish
+endif
+let cite_package_file = 1
+
+let g:TeX_package_option_cite =
+\ 'verbose,'
+\.'nospace,'
+\.'space,'
+\.'nosort,'
+\.'sort,'
+\.'noadjust'
+
+let g:TeX_package_cite =
+\ 'bra:cite,'
+\.'bra:citen,'
+\.'bra:citenum,'
+\.'bra:citeonline,'
+\.'bra:nocite,'
+\.'sep:redefine,'
+\.'bra:citeform,'
+\.'bra:citepunct,'
+\.'bra:citeleft,'
+\.'bra:citeright,'
+\.'bra:citemid,'
+\.'bra:citedash'
+
+syn region texRefZone matchgroup=texStatement start="\\citen\([tp]\*\=\)\={" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+syn region texRefZone matchgroup=texStatement start="\\citenum\([tp]\*\=\)\={" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+syn region texRefZone matchgroup=texStatement start="\\citeonline\([tp]\*\=\)\={" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/color b/dot_vim/ftplugin/latex-suite/packages/color
new file mode 100644
index 0000000..7f3aeac
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/color
@@ -0,0 +1,43 @@
+if exists("color_package_file")
+ finish
+endif
+let color_package_file = 1
+
+let g:TeX_package_option_color =
+\ 'monochrome,'
+\.'debugshow,'
+\.'dvips,'
+\.'xdvi,'
+\.'dvipdf,'
+\.'pdftex,'
+\.'dvipsone,'
+\.'dviwindo,'
+\.'emtex,'
+\.'dviwin,'
+\.'oztex,'
+\.'textures,'
+\.'pctexps,'
+\.'pctexwin,'
+\.'pctexhp,'
+\.'pctex32,'
+\.'truetex,'
+\.'tcidvi,'
+\.'dvipsnames,'
+\.'nodvipsnames,'
+\.'usenames'
+
+let g:TeX_package_color =
+\ 'brs:definecolor{<++>}{<++>}{<++>},'
+\.'brs:DefineNamedColor{<++>}{<++>}{<++>}{<++>},'
+\.'bra:color,'
+\.'nob:color,'
+\.'brd:textcolor,'
+\.'brs:textcolor[<++>]{<++>}{<++>},'
+\.'brd:colorbox,'
+\.'brs:colorbox[<++>]{<++>}{<++>},'
+\.'brs:fcolorbox{<++>}{<++>}{<++>},'
+\.'brs:fcolorbox[<++>]{<++>}{<++>}{<++>},'
+\.'brd:pagecolor,'
+\.'nob:pagecolor'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/comma b/dot_vim/ftplugin/latex-suite/packages/comma
new file mode 100644
index 0000000..5ec8d70
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/comma
@@ -0,0 +1,12 @@
+if exists("comma_package_file")
+ finish
+endif
+let comma_package_file = 1
+
+let g:TeX_package_option_comma = ''
+
+let g:TeX_package_comma =
+\ 'bra:commaform,'
+\.'bra:commaformtoken'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/deleq b/dot_vim/ftplugin/latex-suite/packages/deleq
new file mode 100644
index 0000000..58426d2
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/deleq
@@ -0,0 +1,36 @@
+if exists("deleq_package_file")
+ finish
+endif
+let deleq_package_file = 1
+
+let g:TeX_package_option_deleq = ''
+
+let g:TeX_package_deleq =
+\.'env:deqn,'
+\.'env:ddeqn,'
+\.'env:deqarr,'
+\.'env:ddeqar,'
+\.'env:deqrarr,'
+\.'nor:nydeqno,'
+\.'nor:heqno,'
+\.'bra:reqno,'
+\.'bra:rndeqno,'
+\.'bra:rdeqno,'
+\.'nob:eqreqno,'
+\.'nob:deqreqno,'
+\.'nob:ddeqreqno,'
+\.'bra:arrlabel,'
+\.'nor:where,'
+\.'bra:remtext,'
+\.'nor:nydeleqno,'
+\.'nor:deleqno,'
+\.'nor:jotbaseline'
+
+if !exists("tex_no_math")
+ syn region texMathZoneA start="\\begin\s*{\s*deqn\*\s*}" end="\\end\s*{\s*deqn\*\s*}" keepend fold contains=@texMathZoneGroup
+ syn region texMathZoneB start="\\begin\s*{\s*ddeqn\*\s*}" end="\\end\s*{\s*ddeqn\*\s*}" keepend fold contains=@texMathZoneGroup
+ syn region texMathZoneC start="\\begin\s*{\s*deqarr\s*}" end="\\end\s*{\s*deqarr\s*}" keepend fold contains=@texMathZoneGroup
+ syn region texMathZoneD start="\\begin\s*{\s*ddeqar\s*}" end="\\end\s*{\s*ddeqar\s*}" keepend fold contains=@texMathZoneGroup
+ syn region texMathZoneE start="\\begin\s*{\s*deqrarr\*\s*}" end="\\end\s*{\s*deqrarr\*\s*}" keepend fold contains=@texMathZoneGroup
+endif
+" vim:ft=vim:ff=unix:noet:ts=4:
diff --git a/dot_vim/ftplugin/latex-suite/packages/drftcite b/dot_vim/ftplugin/latex-suite/packages/drftcite
new file mode 100644
index 0000000..8c30447
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/drftcite
@@ -0,0 +1,29 @@
+if exists("drftcite_package_file")
+ finish
+endif
+let drftcite_package_file = 1
+
+let g:TeX_package_option_drftcite =
+\ 'verbose,'
+\.'nospace,'
+\.'space,'
+\.'breakcites,'
+\.'manualsort,'
+\.'tt,'
+\.'shownumbers,'
+\.'nocitecount'
+
+let g:TeX_package_drftcite =
+\ 'bra:cite,'
+\.'bra:citen,'
+\.'sep:redefine,'
+\.'bra:citeform,'
+\.'bra:citepunct,'
+\.'bra:citeleft,'
+\.'bra:citeright,'
+\.'bra:citemid,'
+\.'bra:citedash'
+
+syn region texRefZone matchgroup=texStatement start="\\citen\([tp]\*\=\)\={" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/dropping b/dot_vim/ftplugin/latex-suite/packages/dropping
new file mode 100644
index 0000000..bcfc11f
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/dropping
@@ -0,0 +1,12 @@
+if exists("dropping_package_file")
+ finish
+endif
+let dropping_package_file = 1
+
+let g:TeX_package_option_dropping = ''
+
+let g:TeX_package_dropping =
+\ 'brs:bigdrop{<+indent+>}{<+big+>}{<+font+>}{<+text+>},'
+\.'brs:dropping[<+indent+>]{<+big+>}{<+text+>}'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/enumerate b/dot_vim/ftplugin/latex-suite/packages/enumerate
new file mode 100644
index 0000000..40c3f7c
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/enumerate
@@ -0,0 +1,10 @@
+if exists("enumerate_package_file")
+ finish
+endif
+let enumerate_package_file = 1
+
+let g:TeX_package_option_enumerate = ''
+
+let g:TeX_package_enumerate = 'ens:enumerate:[<+prefix+>]'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/eqlist b/dot_vim/ftplugin/latex-suite/packages/eqlist
new file mode 100644
index 0000000..e1e249e
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/eqlist
@@ -0,0 +1,19 @@
+if exists("eqlist_package_file")
+ finish
+endif
+let eqlist_package_file = 1
+
+let g:TeX_package_option_eqlist = ''
+
+let g:TeX_package_eqlist =
+\ 'env:eqlist,'
+\.'env:eqlist*,'
+\.'env:Eqlist,'
+\.'env:Eqlist*,'
+\.'sep:modificators,'
+\.'eqlistinit,'
+\.'eqliststarinit,'
+\.'eqlistinitpar,'
+\.'eqlistlabel'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/eqparbox b/dot_vim/ftplugin/latex-suite/packages/eqparbox
new file mode 100644
index 0000000..a05061b
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/eqparbox
@@ -0,0 +1,12 @@
+if exists("eqparbox_package_file")
+ finish
+endif
+let eqparbox_package_file = 1
+
+let g:TeX_package_option_eqparbox = ''
+
+let g:TeX_package_eqparbox =
+\ 'brs:eqparbox[<+pos+>][<+height+>][<+inner-pos+>]{<+tag+>}{<+text+>},'
+\.'bra:eqboxwidth'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/everyshi b/dot_vim/ftplugin/latex-suite/packages/everyshi
new file mode 100644
index 0000000..e42a3d5
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/everyshi
@@ -0,0 +1,10 @@
+if exists("everyshi_package_file")
+ finish
+endif
+let everyshi_package_file = 1
+
+let g:TeX_package_option_everyshi = ''
+
+let g:TeX_package_everyshi = 'bra:EveryShipOut'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/exmpl b/dot_vim/ftplugin/latex-suite/packages/exmpl
new file mode 100644
index 0000000..e9e37fc
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/exmpl
@@ -0,0 +1,55 @@
+if exists("exmpl_package_file")
+ finish
+endif
+let exmpl_package_file = 1
+
+" Author: Mikolaj Machowski
+" Date: 10.04.2002
+" Example plugin for packages in latexSuite
+"
+
+" This variable creates Options submenu in package menu. Even when no options are
+" given for this package it HAS to exist in form
+" let TeX_package_option_exmpl = ""
+" Options and commands are delimited with comma ,
+
+let g:TeX_package_option_exmpl = "OpcjaA=,OpcjaB,OpcjaC"
+
+" Most command should have some definition before. Package menu system can
+" recognize type of command and behave in good manner:
+" env: (environment) creates simple environment template
+" \begin{command}
+" x <- cursor here
+" \end{command}
+"
+" bra: (brackets) useful when inserting brackets commands
+" \command{x}<<>> <- cursor at x, and placeholders as in other menu entries
+"
+" nor: (normal) nor: and pla: are `highlighted' in menu with `''
+" \command<Space>
+"
+" pla: (plain)
+" command<Space>
+"
+" spe: (special)
+" command <-literal insertion of command, in future here should go
+" commands with special characters
+"
+" sep: (separator) creates separator. Good for aesthetics and usability :)
+"
+" Command can be also given with no prefix:. The result is
+" \command (as in nor: but without <Space>)
+
+
+let g:TeX_package_exmpl = "env:AEnvFirst,env:aEnvSec,env:BThi,"
+ \ . "sep:a,env:zzzz,"
+ \ . "bra:aBraFirst,bra:bBraSec,bra:cBraThi,"
+ \ . "sep:b,"
+ \ . "nor:aNorPri,nor:bNorSec,nor:cNorTer,"
+ \ . "sep:c,"
+ \ . "pla:aPla1,pla:bPla2,pla:cPla3,"
+ \ . "sep:d,"
+ \ . "spe:aSpe1,spe:bSpe2,spe:cSpe3,"
+ \ . "sep:e,"
+ \ . "aNo1,bNo2,cNo3"
+" vim:ft=vim
diff --git a/dot_vim/ftplugin/latex-suite/packages/flafter b/dot_vim/ftplugin/latex-suite/packages/flafter
new file mode 100644
index 0000000..8859397
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/flafter
@@ -0,0 +1,10 @@
+if exists("flafter_package_file")
+ finish
+endif
+let flafter_package_file = 1
+
+let g:TeX_package_option_flafter = ''
+
+let g:TeX_package_flafter = 'noo:suppressfloats,noo:suppress'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/float b/dot_vim/ftplugin/latex-suite/packages/float
new file mode 100644
index 0000000..7c1cf46
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/float
@@ -0,0 +1,16 @@
+if exists("float_package_file")
+ finish
+endif
+let float_package_file = 1
+
+let g:TeX_package_option_float = ''
+
+let g:TeX_package_float =
+\ 'bra:floatstyle,'
+\.'brs:newfloat{<++>}{<++>}{<++>}[<++>],'
+\.'brd:floatname,'
+\.'brd:listof,'
+\.'bra:restylefloat,'
+\.'brd:floatplacement'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/floatflt b/dot_vim/ftplugin/latex-suite/packages/floatflt
new file mode 100644
index 0000000..4902d89
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/floatflt
@@ -0,0 +1,12 @@
+if exists("floatflt_package_file")
+ finish
+endif
+let floatflt_package_file = 1
+
+let g:TeX_package_option_floatflt = 'rflt,lflt,vflt'
+
+let g:TeX_package_floatflt =
+\ 'ens:floatingfigure:[<+loc+>]{<+spec+>},'
+\.'ens:floatingtable:[<+loc+>]{<+spec+>}'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/fn2end b/dot_vim/ftplugin/latex-suite/packages/fn2end
new file mode 100644
index 0000000..aac4184
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/fn2end
@@ -0,0 +1,10 @@
+if exists("fn2end_package_file")
+ finish
+endif
+let fn2end_package_file = 1
+
+let g:TeX_package_option_fn2end = ''
+
+let g:TeX_package_fn2end = 'makeendnotes,theendnotes'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/footmisc b/dot_vim/ftplugin/latex-suite/packages/footmisc
new file mode 100644
index 0000000..04723f6
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/footmisc
@@ -0,0 +1,21 @@
+if exists("footmisc_package_file")
+ finish
+endif
+let footmisc_package_file = 1
+
+let g:TeX_package_option_footmisc =
+\ 'bottom,'
+\.'flushmargin,'
+\.'marginal,'
+\.'multiple,'
+\.'norule,'
+\.'para,'
+\.'perpage,'
+\.'splitrule,'
+\.'stable,'
+\.'symbol,'
+\.'symbol+'
+
+let g:TeX_package_footmisc = ''
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/geometry b/dot_vim/ftplugin/latex-suite/packages/geometry
new file mode 100644
index 0000000..667a289
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/geometry
@@ -0,0 +1,93 @@
+if exists("geometry_package_file")
+ finish
+endif
+let geometry_package_file = 1
+
+let g:TeX_package_option_geometry =
+\ 'sbr:Boolean,'
+\.'verbose,'
+\.'landscape,'
+\.'portrait,'
+\.'twoside,'
+\.'includemp,'
+\.'reversemp,'
+\.'reversemarginpar,'
+\.'nohead,'
+\.'nofoot,'
+\.'noheadfoot,'
+\.'dvips,'
+\.'pdftex,'
+\.'vtex,'
+\.'truedimen,'
+\.'reset,'
+\.'sbr:BooleanDimensions,'
+\.'a0paper,'
+\.'a1paper,'
+\.'a2paper,'
+\.'a3paper,'
+\.'a4paper,'
+\.'a5paper,'
+\.'a6paper,'
+\.'b0paper,'
+\.'b1paper,'
+\.'b2paper,'
+\.'b3paper,'
+\.'b4paper,'
+\.'b5paper,'
+\.'b6paper,'
+\.'letterpaper,'
+\.'executivepaper,'
+\.'legalpaper,'
+\.'sbr:SingleValueOption,'
+\.'paper=,'
+\.'papername=,'
+\.'paperwidth=,'
+\.'paperheight=,'
+\.'width=,'
+\.'totalwidth=,'
+\.'height=,'
+\.'totalheight=,'
+\.'left=,'
+\.'lmargin=,'
+\.'right=,'
+\.'rmargin=,'
+\.'top=,'
+\.'tmargin=,'
+\.'bottom=,'
+\.'bmargin=,'
+\.'hscale=,'
+\.'vscale=,'
+\.'textwidth=,'
+\.'textheight=,'
+\.'marginparwidth=,'
+\.'marginpar=,'
+\.'marginparsep=,'
+\.'headheight=,'
+\.'head=,'
+\.'headsep=,'
+\.'footskip=,'
+\.'hoffset=,'
+\.'voffset=,'
+\.'twosideshift=,'
+\.'mag=,'
+\.'columnsep=,'
+\.'footnotesep=,'
+\.'sbr:TwoValueOptions,'
+\.'papersize={<++>},'
+\.'total={<++>},'
+\.'body={<++>},'
+\.'text={<++>},'
+\.'scale={<++>},'
+\.'hmargin={<++>},'
+\.'vmargin={<++>},'
+\.'margin={<++>},'
+\.'offset={<++>},'
+\.'sbr:ThreeValueOptions,'
+\.'hdivide={<++>},'
+\.'vdivide={<++>},'
+\.'divide={<++>}'
+
+let g:TeX_package_geometry =
+\ 'bra:geometry'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/german b/dot_vim/ftplugin/latex-suite/packages/german
new file mode 100644
index 0000000..9aa7519
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/german
@@ -0,0 +1,12 @@
+if exists("german_package_file")
+ finish
+endif
+let german_package_file = 1
+
+let g:TeX_package_german = ''
+let g:TeX_package_option_german = ''
+" For now just define the smart quotes.
+let b:Tex_SmartQuoteOpen = '"`'
+let b:Tex_SmartQuoteClose = "\"'"
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/graphicx b/dot_vim/ftplugin/latex-suite/packages/graphicx
new file mode 100644
index 0000000..4aa7571
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/graphicx
@@ -0,0 +1,69 @@
+if exists("graphicx_package_file")
+ finish
+endif
+let graphicx_package_file = 1
+
+let g:TeX_package_option_graphicx =
+\ 'sbr:Drivers,'
+\.'xdvi,'
+\.'dvipdf,'
+\.'dvipdfm,'
+\.'pdftex,'
+\.'dvipsone,'
+\.'dviwindo,'
+\.'emtex,'
+\.'dviwin,'
+\.'oztex,'
+\.'textures,'
+\.'pctexps,'
+\.'pctexwin,'
+\.'pctexhp,'
+\.'pctex32,'
+\.'truetex,'
+\.'tcidvi,'
+\.'vtex,'
+\.'sbr:Rest,'
+\.'debugshow,'
+\.'draft,'
+\.'final,'
+\.'hiderotate,'
+\.'hiresbb,'
+\.'hidescale,'
+\.'unknownkeysallowed,'
+\.'unknownkeyserror'
+
+let g:TeX_package_graphicx =
+\ 'sbr:Includegraphics,'
+\.'brs:includegraphics[<++>]{<++>},'
+\.'spe:height=,'
+\.'spe:width=,'
+\.'spe:keepaspectratio=,'
+\.'spe:totalheight=,'
+\.'spe:angle=,'
+\.'spe:scale=,'
+\.'spe:origin=,'
+\.'spe:clip,'
+\.'spe:bb=,'
+\.'spe:viewport=,'
+\.'spe:trim=,'
+\.'spe:draft,'
+\.'spe:hiresbb,'
+\.'spe:type=,'
+\.'spe:ext=,'
+\.'spe:read=,'
+\.'spe:command=,'
+\.'sbr:Rotatebox,'
+\.'brs:rotatebox[<++>]{<++>}{<++>},'
+\.'spe:origin=,'
+\.'spe:x=,'
+\.'spe:y=,'
+\.'spe:units=,'
+\.'sbr:Rest,'
+\.'brs:scalebox{<++>}[<++>]{<++>},'
+\.'brs:resizebox{<++>}{<++>}{<++>},'
+\.'brs:resizebox*{<++>}{<++>}{<++>},'
+\.'bra:DeclareGraphicsExtensions,'
+\.'brs:DeclareGraphicsRule{<++>}{<++>}{<++>}{<++>},'
+\.'bra:graphicspath'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/graphpap b/dot_vim/ftplugin/latex-suite/packages/graphpap
new file mode 100644
index 0000000..ebbd268
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/graphpap
@@ -0,0 +1,10 @@
+if exists("graphpap_package_file")
+ finish
+endif
+let graphpap_package_file = 1
+
+let g:TeX_package_option_graphpap = ''
+
+let g:TeX_package_graphpap = 'brs:graphpaper[<+step+>](<+x1,y1+>)(<+x2,y2+>)'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/harpoon b/dot_vim/ftplugin/latex-suite/packages/harpoon
new file mode 100644
index 0000000..994801d
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/harpoon
@@ -0,0 +1,18 @@
+if exists("harpoon_package_file")
+ finish
+endif
+let harpoon_package_file = 1
+
+let g:TeX_package_option_harpoon = ''
+
+let g:TeX_package_harpoon =
+\ 'bra:overleftharp,'
+\.'bra:overrightharp,'
+\.'bra:overleftharpdown,'
+\.'bra:overrightharpdown,'
+\.'bra:underleftharp,'
+\.'bra:underrightharp,'
+\.'bra:underleftharpdown,'
+\.'bra:underrightharpdown'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/hhline b/dot_vim/ftplugin/latex-suite/packages/hhline
new file mode 100644
index 0000000..a024c19
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/hhline
@@ -0,0 +1,21 @@
+if exists("hhline_package_file")
+ finish
+endif
+let hhline_package_file = 1
+
+let g:TeX_package_option_hhline = ''
+
+let g:TeX_package_hhline =
+\ 'bra:hhline,'
+\.'sep:a,'
+\.'spe:=,'
+\.'spe:-,'
+\.'spe:~,'
+\."spe:\\\|,"
+\.'spe::,'
+\.'spe:#,'
+\.'spe:t,'
+\.'spe:b,'
+\.'spe:*'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/histogram b/dot_vim/ftplugin/latex-suite/packages/histogram
new file mode 100644
index 0000000..b18fc07
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/histogram
@@ -0,0 +1,13 @@
+if exists("histogram_package_file")
+ finish
+endif
+let histogram_package_file = 1
+
+let g:TeX_package_option_histogram = ''
+
+let g:TeX_package_histogram =
+\ 'histogram,'
+\.'noverticallines,'
+\.'verticallines'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/hyperref b/dot_vim/ftplugin/latex-suite/packages/hyperref
new file mode 100644
index 0000000..a82aac3
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/hyperref
@@ -0,0 +1,167 @@
+if exists("hyperref_package_file")
+ finish
+endif
+let hyperref_package_file = 1
+
+let g:TeX_package_option_hyperref =
+\ '4=,'
+\.'a4paper,'
+\.'a5paper,'
+\.'anchorcolor=,'
+\.'b5paper,'
+\.'backref=,'
+\.'baseurl={<++>},'
+\.'bookmarks=,'
+\.'bookmarksnumbered=,'
+\.'bookmarksopen=,'
+\.'bookmarksopenlevel=,'
+\.'bookmarkstype=,'
+\.'breaklinks=,'
+\.'citebordercolor=,'
+\.'citecolor=,'
+\.'colorlinks=,'
+\.'debug=,'
+\.'draft,'
+\.'dvipdf,'
+\.'dvipdfm,'
+\.'dvips,'
+\.'dvipsone,'
+\.'dviwindo,'
+\.'executivepaper,'
+\.'extension=,'
+\.'filebordercolor=,'
+\.'filecolor=,'
+\.'frenchlinks=,'
+\.'hyperfigures=,'
+\.'hyperindex=,'
+\.'hypertex,'
+\.'hypertexnames=,'
+\.'implicit=,'
+\.'latex2html,'
+\.'legalpaper,'
+\.'letterpaper,'
+\.'linkbordercolor=,'
+\.'linkcolor=,'
+\.'linktocpage=,'
+\.'menubordercolor=,'
+\.'menucolor=,'
+\.'naturalnames,'
+\.'nesting=,'
+\.'pageanchor=,'
+\.'pagebackref=,'
+\.'pagebordercolor=,'
+\.'pagecolor=,'
+\.'pdfauthor={<++>},'
+\.'pdfborder=,'
+\.'pdfcenterwindow=,'
+\.'pdfcreator={<++>},'
+\.'pdffitwindow,'
+\.'pdfhighlight=,'
+\.'pdfkeywords={<++>},'
+\.'pdfmenubar=,'
+\.'pdfnewwindow=,'
+\.'pdfpagelabels=,'
+\.'pdfpagelayout=,'
+\.'pdfpagemode=,'
+\.'pdfpagescrop=,'
+\.'pdfpagetransition=,'
+\.'pdfproducer={<++>},'
+\.'pdfstartpage={<++>},'
+\.'pdfstartview={<++>},'
+\.'pdfsubject={<++>},'
+\.'pdftex,'
+\.'pdftitle={<++>},'
+\.'pdftoolbar=,'
+\.'pdfusetitle=,'
+\.'pdfview,'
+\.'pdfwindowui=,'
+\.'plainpages=,'
+\.'ps2pdf,'
+\.'raiselinks=,'
+\.'runbordercolor,'
+\.'tex4ht,'
+\.'textures,'
+\.'unicode=,'
+\.'urlbordercolor=,'
+\.'urlcolor=,'
+\.'verbose=,'
+\.'vtex'
+
+let g:TeX_package_hyperref =
+\ 'sbr:Preamble,'
+\.'bra:hypersetup,'
+\.'wwwbrowser,'
+\.'sbr:Links,'
+\.'bra:hyperbaseurl,'
+\.'brs:href{<+URL+>}{<+text+>},'
+\.'bra:hyperimage,'
+\.'brs:hyperdef{<+category+>}{<+name+>}{<+text+>},'
+\.'brs:hyperref{<+URL+>}{<+category+>}{<+name+>}{<+text+>},'
+\.'brs:hyperlink{<+name+>}{<+text+>},'
+\.'brs:hypertarget{<+name+>}{<+text+>},'
+\.'bra:url,'
+\.'bra:htmladdnormallink,'
+\.'brs:Acrobatmenu{<+option+>}{<+tekst+>},'
+\.'brs:pdfbookmark[<++>]{<++>}{<++>},'
+\.'bra:thispdfpagelabel,'
+\.'sbr:Forms,'
+\.'env:Form,'
+\.'sep:Forms1,'
+\.'brs:TextField[<+parameters+>]{<+label+>},'
+\.'brs:CheckBox[<+parameters+>]{<+label+>},'
+\.'brs:ChoiceMenu[<+parameters+>]{<+label+>}{<+choices+>},'
+\.'brs:PushButton[<+parameters+>]{<+label+>},'
+\.'brs:Submit[<+parameters+>]{<+label+>},'
+\.'brs:Reset[<+parameters+>]{<+label+>},'
+\.'sep:Forms2,'
+\.'brs:LayoutTextField{<+label+>}{<+field+>},'
+\.'brs:LayoutChoiceField{<+label+>}{<+field+>},'
+\.'brs:LayoutCheckboxField{<+label+>}{<+field+>},'
+\.'sep:Forms3,'
+\.'brs:MakeRadioField{<+width+>}{<+height+>},'
+\.'brs:MakeCheckField{<+width+>}{<+height+>},'
+\.'brs:MakeTextField{<+width+>}{<+height+>},'
+\.'brs:MakeChoiceField{<+width+>}{<+height+>},'
+\.'brs:MakeButtonField{<+text+>},'
+\.'sbr:Parameters,'
+\.'spe:accesskey,'
+\.'spe:align,'
+\.'spe:backgroundcolor,'
+\.'spe:bordercolor,'
+\.'spe:bordersep,'
+\.'spe:borderwidth,'
+\.'spe:charsize,'
+\.'spe:checked,'
+\.'spe:color,'
+\.'spe:combo,'
+\.'spe:default,'
+\.'spe:disabled,'
+\.'spe:height,'
+\.'spe:hidden,'
+\.'spe:maxlen,'
+\.'spe:menulength,'
+\.'spe:multiline,'
+\.'spe:name,'
+\.'spe:onblur,'
+\.'spe:onchange,'
+\.'spe:onclick,'
+\.'spe:ondblclick,'
+\.'spe:onfocus,'
+\.'spe:onkeydown,'
+\.'spe:onkeypress,'
+\.'spe:onkeyup,'
+\.'spe:onmousedown,'
+\.'spe:onmousemove,'
+\.'spe:onmouseout,'
+\.'spe:onmouseover,'
+\.'spe:onmouseup,'
+\.'spe:onselect,'
+\.'spe:password,'
+\.'spe:popdown,'
+\.'spe:radio,'
+\.'spe:readonly,'
+\.'spe:tabkey,'
+\.'spe:value,'
+\.'spe:width'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/ifthen b/dot_vim/ftplugin/latex-suite/packages/ifthen
new file mode 100644
index 0000000..82dbe69
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/ifthen
@@ -0,0 +1,21 @@
+if exists("ifthen_package_file")
+ finish
+endif
+let ifthen_package_file = 1
+
+let g:TeX_package_option_ifthen = ''
+
+let g:TeX_package_ifthen =
+\ 'brs:ifthenelse{<++>}{<++>}{<++>},'
+\.'brd:equal,'
+\.'bra:boolean,'
+\.'bra:lengthtest,'
+\.'bra:isodd,'
+\.'brd:whiledo,'
+\.'bra:newboolean,'
+\.'brd:setboolean,'
+\.'nor:and,'
+\.'nor:or,'
+\.'nor:not'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/inputenc b/dot_vim/ftplugin/latex-suite/packages/inputenc
new file mode 100644
index 0000000..73abe9a
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/inputenc
@@ -0,0 +1,29 @@
+if exists("inputenc_package_file")
+ finish
+endif
+let inputenc_package_file = 1
+
+let g:TeX_package_option_inputenc =
+\ 'ascii,'
+\.'latin1,'
+\.'latin2,'
+\.'latin3,'
+\.'latin4,'
+\.'latin5,'
+\.'latin9,'
+\.'decmulti,'
+\.'cp850,'
+\.'cp852,'
+\.'cp437,'
+\.'cp437de,'
+\.'cp865,'
+\.'applemac,'
+\.'next,'
+\.'ansinew,'
+\.'cp1250,'
+\.'cp1252'
+
+let g:TeX_package_inputenc =
+\ 'bra:inputencoding'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/letterspace b/dot_vim/ftplugin/latex-suite/packages/letterspace
new file mode 100644
index 0000000..9a53eaa
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/letterspace
@@ -0,0 +1,10 @@
+if exists("letterspace_package_file")
+ finish
+endif
+let letterspace_package_file = 1
+
+let g:TeX_package_option_letterspace = ''
+
+let g:TeX_package_letterspace = 'nor:letterspace'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/lineno b/dot_vim/ftplugin/latex-suite/packages/lineno
new file mode 100644
index 0000000..4567602
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/lineno
@@ -0,0 +1,60 @@
+if exists("lineno_package_file")
+ finish
+endif
+let lineno_package_file = 1
+
+let g:TeX_package_option_lineno =
+\ 'left,'
+\.'right,'
+\.'switch,'
+\.'switch*,'
+\.'pagewise,'
+\.'running,'
+\.'modulo,'
+\.'mathlines,'
+\.'displaymath,'
+\.'hyperref'
+
+let g:TeX_package_lineno =
+\ 'sbr:Environments,'
+\.'env:linenumbers,'
+\.'env:linenumbers*,'
+\.'env:numquote,'
+\.'env:numquote*,'
+\.'env:numquotation,'
+\.'env:numquotation*,'
+\.'env:bframe,'
+\.'env:linenomath,'
+\.'env:linenomath*,'
+\.'bra:linelabel,'
+\.'sbr:Commands,'
+\.'nor:linenumbers,'
+\.'nor:linenumbers*,'
+\.'noo:linenumbers,'
+\.'nor:nolinenumbers,'
+\.'nor:runninglinenumbers,'
+\.'nor:runninglinenumbers*,'
+\.'noo:runninglinenumbers,'
+\.'nor:pagewiselinenumbers,'
+\.'nor:resetlinenumber,'
+\.'noo:resetlinenumber,'
+\.'nor:setrunninglinenumbers,'
+\.'nor:setpagewiselinenumbers,'
+\.'nor:switchlinenumbers,'
+\.'nor:switchlinenumbers*,'
+\.'nor:leftlinenumbers,'
+\.'nor:leftlinenumbers*,'
+\.'nor:rightlinenumbers,'
+\.'nor:rightlinenumbers*,'
+\.'nor:runningpagewiselinenumbers,'
+\.'nor:realpagewiselinenumbers,'
+\.'nor:modulolinenumbers,'
+\.'noo:modulolinenumbers,'
+\.'nor:linenumberdisplaymath,'
+\.'nor:nolinenumberdisplaymath,'
+\.'nor:thelinenumber,'
+\.'nob:linerefp,'
+\.'nob:linerefr,'
+\.'nob:lineref'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/longtable b/dot_vim/ftplugin/latex-suite/packages/longtable
new file mode 100644
index 0000000..6644862
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/longtable
@@ -0,0 +1,35 @@
+if exists("longtable_package_file")
+ finish
+endif
+let longtable_package_file = 1
+
+let g:TeX_package_option_longtable =
+\ 'errorshow,'
+\.'pausing,'
+\.'set,'
+\.'final'
+
+let g:TeX_package_longtable =
+\ 'sbr:Commands,'
+\.'nor:setlongtables,'
+\.'bra:LTleft,'
+\.'bra:LTright,'
+\.'bra:LTpre,'
+\.'bra:LTpost,'
+\.'bra:LTchunksize,'
+\.'bra:LTcapwidth,'
+\.'bra:LTcapwidth,'
+\.'sbr:Longtable,'
+\.'env:longtable,'
+\.'sep:lt,'
+\.'nor:endhead,'
+\.'nor:endfirsthead,'
+\.'nor:endfoot,'
+\.'nor:endlastfoot,'
+\.'nor:kill,'
+\.'bra:caption,'
+\.'nob:caption,'
+\.'bra:caption*,'
+\.'nor:newpage'
+
+" vim:ft=vim:ts=4:sw=4:noet:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/lscape b/dot_vim/ftplugin/latex-suite/packages/lscape
new file mode 100644
index 0000000..33976ea
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/lscape
@@ -0,0 +1,10 @@
+if exists("lscape_package_file")
+ finish
+endif
+let lscape_package_file = 1
+
+let g:TeX_package_option_lscape = ''
+
+let g:TeX_package_lscape = 'env:landscape'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/manyfoot b/dot_vim/ftplugin/latex-suite/packages/manyfoot
new file mode 100644
index 0000000..7cab55f
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/manyfoot
@@ -0,0 +1,15 @@
+if exists("manyfoot_package_file")
+ finish
+endif
+let manyfoot_package_file = 1
+
+let g:TeX_package_option_manyfoot = 'para'
+
+let g:TeX_package_manyfoot =
+\ 'bra:newfootnote,bra:newfootnote[para],'
+\.'bra:footnoteA,bra:footnoteB,'
+\.'bra:FootnoteA,bra:FootnoteB,'
+\.'bra:Footnotemark,bra:Footnotetext,'
+\.'SplitNote'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/moreverb b/dot_vim/ftplugin/latex-suite/packages/moreverb
new file mode 100644
index 0000000..8614e3b
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/moreverb
@@ -0,0 +1,28 @@
+if exists("moreverb_package_file")
+ finish
+endif
+let moreverb_package_file = 1
+
+let g:TeX_package_option_moreverb = ''
+
+let g:TeX_package_moreverb =
+\ 'ens:verbatimwrite:{<++>},'
+\.'ens:verbatimtab:[<++>],'
+\.'ens:listing:[<+step+>]{<+number+>},'
+\.'ens:listing*:[<+step+>]{<+number+>},'
+\.'env:boxedverbatim,'
+\.'bra:verbatimtabsize,'
+\.'bra:listingoffset,'
+\.'brs:listinginput[<++>]{<++>}{<++>},'
+\.'brs:verbatimtabinput[<++>]{<++>}'
+
+let g:Tex_completion_explorer = g:Tex_completion_explorer.'verbatimtabinput,'
+
+syn region texZone start="\\begin{verbatimwrite}" end="\\end{verbatimwrite}\|%stopzone\>" fold
+syn region texZone start="\\begin{verbatimtab}" end="\\end{verbatimtab}\|%stopzone\>" fold
+syn region texZone start="\\begin{boxedverbatim}" end="\\end{boxedverbatim}\|%stopzone\>" fold
+syn region texZone start="\\begin{listing}" end="\\end{listing}\|%stopzone\>" fold
+syn region texZone start="\\begin{listing*}" end="\\end{listing*}\|%stopzone\>" fold
+
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/multibox b/dot_vim/ftplugin/latex-suite/packages/multibox
new file mode 100644
index 0000000..00bccb2
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/multibox
@@ -0,0 +1,10 @@
+if exists("multibox_package_file")
+ finish
+endif
+let multibox_package_file = 1
+
+let g:TeX_package_option_multibox = ''
+
+let g:TeX_package_multibox = 'multimake,multiframe'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/multicol b/dot_vim/ftplugin/latex-suite/packages/multicol
new file mode 100644
index 0000000..ca93189
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/multicol
@@ -0,0 +1,21 @@
+if exists("multicol_package_file")
+ finish
+endif
+let multicol_package_file = 1
+
+let g:TeX_package_option_multicol = ''
+
+let g:TeX_package_multicol =
+\ 'ens:multicols:{<+cols+>}[<+text+>][<+sep+>],'
+\.'columnbreak,'
+\.'premulticols,'
+\.'postmulticols,'
+\.'multicolsep,'
+\.'columnsep,'
+\.'linewidth,'
+\.'columnseprule,'
+\.'flushcolumnt,'
+\.'raggedcolumns,'
+\.'unbalanced'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/newalg b/dot_vim/ftplugin/latex-suite/packages/newalg
new file mode 100644
index 0000000..1480bb6
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/newalg
@@ -0,0 +1,26 @@
+if exists("newalg_package_file")
+ finish
+endif
+let newalg_package_file = 1
+
+let g:TeX_package_option_newalg = ''
+
+let g:TeX_package_newalg =
+\ 'ens:algorithm:{<+name+>}{<++>},'
+\.'ens:IF:{<+cond+>},'
+\.'ens:FOR:{<+loop+>},'
+\.'ens:WHILE:{<+cond+>},'
+\.'bra:ERROR,'
+\.'nor:ELSE,'
+\.'nor:RETURN,'
+\.'nor:NIL,'
+\.'nor:TO,'
+\.'bra:CALL,'
+\.'bra:text,'
+\.'env:REPEAT,'
+\.'env:SWITCH,'
+\.'nor:=,'
+\.'bra:item,'
+\.'nor:algkey'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/ngerman b/dot_vim/ftplugin/latex-suite/packages/ngerman
new file mode 100644
index 0000000..534ac30
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/ngerman
@@ -0,0 +1,10 @@
+if exists("ngerman_package_file")
+ finish
+endif
+let ngerman_package_file = 1
+
+" For now just define the smart quotes.
+let b:Tex_SmartQuoteOpen = '"`'
+let b:Tex_SmartQuoteClose = "\"'"
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/numprint b/dot_vim/ftplugin/latex-suite/packages/numprint
new file mode 100644
index 0000000..4eab5a2
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/numprint
@@ -0,0 +1,18 @@
+if exists("numprint_package_file")
+ finish
+endif
+let numprint_package_file = 1
+
+let g:TeX_package_option_numprint = ''
+
+let g:TeX_package_numprint =
+\ 'bra:numprint,'
+\.'nob:numprint,'
+\.'bra:thousandsep,'
+\.'bra:decimalsign,'
+\.'bra:productsign,'
+\.'bra:unitseparator,'
+\.'brd:expnumprint,'
+\.'global'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/oldstyle b/dot_vim/ftplugin/latex-suite/packages/oldstyle
new file mode 100644
index 0000000..72b2774
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/oldstyle
@@ -0,0 +1,12 @@
+if exists("oldstyle_package_file")
+ finish
+endif
+let oldstyle_package_file = 1
+
+let g:TeX_package_option_oldstyle = ''
+
+let g:TeX_package_oldstyle =
+\ 'bra:textos,'
+\.'bra:mathos'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/outliner b/dot_vim/ftplugin/latex-suite/packages/outliner
new file mode 100644
index 0000000..ca64322
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/outliner
@@ -0,0 +1,19 @@
+if exists("outliner_package_file")
+ finish
+endif
+let outliner_package_file = 1
+
+let g:TeX_package_option_outliner = ''
+
+let g:TeX_package_outliner =
+\ 'env:Outline,'
+\.'bra:Level,'
+\.'bra:SetBaseLevel,'
+\.'sep:preamble,'
+\.'bra:OutlinePageBreaks,'
+\.'bra:OutlinePageBreaks,'
+\.'bra:OutlineLevelStart,'
+\.'bra:OutlineLevelCont,'
+\.'bra:OutlineLevelEnd'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/overcite b/dot_vim/ftplugin/latex-suite/packages/overcite
new file mode 100644
index 0000000..25bc17d
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/overcite
@@ -0,0 +1,34 @@
+if exists("overcite_package_file")
+ finish
+endif
+let overcite_package_file = 1
+
+let g:TeX_package_option_overcite =
+\ 'verbose,'
+\.'ref,'
+\.'nospace,'
+\.'space,'
+\.'nosort,'
+\.'sort,'
+\.'nomove,'
+\.'noadjust'
+
+let g:TeX_package_overcite =
+\ 'bra:cite,'
+\.'bra:citen,'
+\.'bra:citenum,'
+\.'bra:citeonline,'
+\.'bra:nocite,'
+\.'sep:redefine,'
+\.'bra:citeform,'
+\.'bra:citepunct,'
+\.'bra:citeleft,'
+\.'bra:citeright,'
+\.'bra:citemid,'
+\.'bra:citedash'
+
+syn region texRefZone matchgroup=texStatement start="\\citen\([tp]\*\=\)\={" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+syn region texRefZone matchgroup=texStatement start="\\citenum\([tp]\*\=\)\={" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+syn region texRefZone matchgroup=texStatement start="\\citeonline\([tp]\*\=\)\={" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/parallel b/dot_vim/ftplugin/latex-suite/packages/parallel
new file mode 100644
index 0000000..19dfe8e
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/parallel
@@ -0,0 +1,15 @@
+if exists("parallel_package_file")
+ finish
+endif
+let parallel_package_file = 1
+
+let g:TeX_package_option_parallel = ''
+
+let g:TeX_package_parallel =
+\ 'env:Parallel,'
+\.'bra:ParallelLText,'
+\.'bra:ParallelRText,'
+\.'nor:ParallelPar,'
+\.'nor:tolerance'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/plain b/dot_vim/ftplugin/latex-suite/packages/plain
new file mode 100644
index 0000000..6a3d092
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/plain
@@ -0,0 +1,10 @@
+if exists("plain_package_file")
+ finish
+endif
+let plain_package_file = 1
+
+let g:TeX_package_option_plain = ''
+
+let g:TeX_package_plain = 'env:plain'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/plates b/dot_vim/ftplugin/latex-suite/packages/plates
new file mode 100644
index 0000000..e22817e
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/plates
@@ -0,0 +1,16 @@
+if exists("plates_package_file")
+ finish
+endif
+let plates_package_file = 1
+
+let g:TeX_package_option_plates = 'figures,onefloatperpage,memoir'
+
+let g:TeX_package_plates =
+\ 'env:plate,'
+\.'listofplates,'
+\.'ProcessPlates,'
+\.'bra:setplatename,'
+\.'bra:setplatename,'
+\.'bra:atBeginPlates'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/polski b/dot_vim/ftplugin/latex-suite/packages/polski
new file mode 100644
index 0000000..e2c4efe
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/polski
@@ -0,0 +1,165 @@
+" Author: Mikolaj Machowski <mikmach@wp.pl>
+" (c) Copyright by Mikolaj Machowski 2002-2003
+" License: Vim Charityware
+" Version: 1.6
+"
+" Plik jest w kodowaniu iso-8859-2. Je¶li chcesz go uzywac w MS-Windows musisz
+" go przekonwertowac na cp-1250.
+"
+" Plik ten jest czê¶ci± vim-latexSuite, ale:
+" Nie u¿ywaj±cy vim-latexSuite (http://vim-latex.sourceforge.net) mog± wyci±æ
+" oznaczon± czê¶æ. Reszta mo¿e byæ kopiowana jako osobny plik pod warunkiem
+" niezmieniania tej notki i informacji o prawach autorskich.
+"
+" This file is in iso-8859-2 encoding. If you want to use it in MS-Windows you
+" have to convert it to cp-1250.
+"
+" This file is part of vim-latexSuite but:
+" Those who do not use vim-latexSuite (http://vim-latex.sourceforge.net) can
+" cut off marked part. Rest of the file can be copied as separate file under
+" condition of leaving this notice and information about copyrights unchanged.
+
+if exists("acromake_package_file")
+ finish
+endif
+let acromake_package_file = 1
+
+" --------8<-------------
+" Czesc odpowiedzialna za menu
+let g:TeX_package_option_polski =
+\'OT1,OT4,T1,QX,plmath,nomathsymbols,MeX,prefixingverb,noprefixingverb'
+let g:TeX_package_polski =
+\'sbr:Dywiz&Ska,'.
+\'nor:dywiz,'.
+\'nor:ppauza,'.
+\'nor:pauza,'.
+\'nor:prefixing,'.
+\'nor:nonprefixing,'.
+\'nor:PLdateending,'.
+\'sbr:Matematyka,'.
+\'nor:arccos,'.
+\'nor:arcctan,'.
+\'nor:arcsin,'.
+\'nor:arctan,'.
+\'nor:cot,'.
+\'nor:ctanh,'.
+\'nor:tan,'.
+\'nor:tanh,'.
+\'bra:arc,'.
+\'nor:ctg,'.
+\'nor:ctgh,'.
+\'nor:tg,'.
+\'nor:tgh,'.
+\'nor:nwd'
+
+" To wymaga calego pakietu vim-latexSuite - zakomentuj lub wytnij je¶li nie
+" u¿ywasz (albo go ¶ci±gnij z http://vim-latex.sf.net)
+function! TPackagePolskiTylda()
+ call IMAP (" ---", "~---", "tex")
+endfunction
+call TPackagePolskiTylda()
+" --------8<-------------
+
+" Polskie znaki cudzyslowow
+TexLet g:Tex_SmartQuoteOpen = ",,"
+TexLet g:Tex_SmartQuoteClose = "''"
+
+" Zmodyfikowana i rozwinieta funkcja Andrzeja Ostruszki
+" Z dodatkiem od Benjiego Fishera (sprawdzanie sk³adni)
+"
+" Spacja
+inoremap <buffer> <silent> <Space> <C-R>=<SID>Tex_polish_space()<CR>
+inoremap <buffer> <silent> <CR> <C-R>=<SID>Tex_polish_space()<CR><BS><CR>
+
+" Wymuszenie tyldy
+inoremap <buffer> <silent> <S-Space> ~
+
+" Wymuszenie zwyklej spacji
+inoremap <buffer> <silent> <C-Space> <Space>
+
+" Latwe przelaczanie sie miedzy magiczna spacja a zwykla
+inoremap <buffer> <silent> <F8> <C-R>=<SID>TogglePolishSpace()<CR>
+
+function! s:TogglePolishSpace()
+ if !exists("b:polishspace")
+ iunmap <buffer> <Space>
+ iunmap <buffer> <CR>
+ let b:polishspace = 1
+ return ''
+ else
+ inoremap <buffer> <silent> <Space> <C-R>=<SID>Tex_polish_space()<CR>
+ inoremap <buffer> <silent> <CR> <C-R>=<SID>Tex_polish_space()<CR><BS><CR>
+ unlet b:polishspace
+ return ''
+ endif
+endfunction
+
+
+function! s:Tex_polish_space()
+ "Nic magicznego w matematyce
+ if synIDattr(synID(line('.'),col('.')-1,0),"name") =~ '^texMath\|^texZone\^texRefZone'
+ return ' '
+ else
+ let s:col = col('.')
+ let s:linelength = strlen(getline('.')) + 1
+ " Wstaw tylde po spojnikach
+ if strpart(getline('.'), col('.') - 3, 2) =~? '^[[:space:]~(\[{]\?[aiouwz]$'
+ return '~'
+ " Wstaw tylde po inicjalach - konkretnie po pojedynczych wielkich
+ " literach i kropce. Obs³uguje poprawnie wiekszosc sytuacji.
+ elseif strpart(getline('.'), col('.') - 4, 3) =~? '^[[:space:]~(\[{]\?\u\.$'
+ return '~'
+ " Wstaw tylde po tytulach, skrotach bibliograficznych, podpisach
+ elseif strpart(getline('.'), col('.') - 9, 8) =~? '\(\s\|^\|\~\)\(str\.\|ryc\.\|rys\.\|tab\.\|art\.\|vol\.\|nr\|tabl\.\|rozdz\.\|ss\.\|s\.\|t\.\|z\.\|sir\|prof\.\|hab\.\|red\.\|min\.\|gen\.\|kpt\.\|przew\.\|p³k\|mjr\|mgr\|bp\|ks\.\|o\+\.\|¶w\.\|dr\)$'
+ return '~'
+ " Wstaw tylde miedzy rokiem, wiekiem, a odpowiednim skrotem
+ elseif strpart(getline('.'), col('.') - 8, 7) =~? '[0-9IVXLCM]\s\+\(r\|w\)\.[^a-z±æê³ñ󶿼]\{-}$'
+ s/[0-9IVXLCM]\zs\s\+\ze\(w\|r\)\.[^a-z±æê³ñ󶿼]\{-}\%#/\~/ei
+ exe 'normal '.s:col.'|'
+ if s:col == s:linelength
+ startinsert!
+ else
+ startinsert
+ endif
+ return ' '
+ " Wstaw tylde miedzy liczba a miara, itd.
+ elseif strpart(getline('.'), col('.') - 10, 9) =~? '\(\d\|mln\|mld\|tys\.\)\s\+\(z³\|gr\|ha\|t\|mies\|godz\|min\|sek\|cm\|km\|mln\|mld\|tys\.\)[^a-z±æê³ñ󶿼]\{-}$'
+ s/\(\d\|mln\|mld\|tys\.\)\zs\s\+\ze\(z³\|gr\|ha\|m\|t\|mies\|godz\|min\|sek\|cm\|km\|mln\|mld\|tys\.\)[^a-z±æê³ñ󶿼]\{-}\%#/\~/ei
+ exe 'normal '.s:col.'|'
+ if s:col == s:linelength
+ startinsert!
+ else
+ startinsert
+ endif
+ return ' '
+ " Rozwin myslnik w zbitkach w '\dywiz ':
+ " bialo-czerwony -> bialo\dywiz czerwony
+ elseif strpart(getline('.'), col('.') - 20, 19) =~? '[a-z±æê³ñ󶿼]-[a-z±æê³ñ󶿼]\{-}[^a-z±æê³ñ󶿼]\{-}$'
+ s/[a-z±æê³ñ󶿼]\zs-\ze[a-z±æê³ñ󶿼]\{-}[^a-z±æê³ñ󶿼]\{-}\%#/\\dywiz /ei
+ let colb = s:col + 6
+ exe 'normal '.colb.'|'
+ if s:col == s:linelength
+ startinsert!
+ else
+ startinsert
+ endif
+ return ' '
+ " Rozwin '--' miedzy liczbami w '\ppauza ':
+ " 39--45 -> 39\ppauza 45
+ elseif strpart(getline('.'), col('.') - 10, 9) =~? '[0-9IVXLCM]--[0-9IVXLCM]\{-}[^0-9IVXLCM]\{-}$'
+ s/[0-9IVXLCM]\zs--\ze[0-9IVXLCM]\{-}[^0-9IVXLCM]\{-}\%#/\\ppauza /ei
+ let colb = s:col + 6
+ exe 'normal '.colb.'|'
+ if s:col == s:linelength
+ startinsert!
+ else
+ startinsert
+ endif
+ return ' '
+ endif
+ " Tu koncz komentowanie ostatniej sekcji
+ endif
+ return " "
+endfunction
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/psgo b/dot_vim/ftplugin/latex-suite/packages/psgo
new file mode 100644
index 0000000..1ef852c
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/psgo
@@ -0,0 +1,27 @@
+if exists("psgo_package_file")
+ finish
+endif
+let psgo_package_file = 1
+
+let g:TeX_package_option_psgo = ''
+
+let g:TeX_package_psgo =
+\ 'env:psgogoard,'
+\.'env:psgoboard*,'
+\.'brs:stone{<+color+>}{<+letter+>}{<+number+>},'
+\.'brs:stone[<+marker+>]{<+color+>}{<+letter+>}{<+number+>},'
+\.'brs:move{<+letter+>}{<+number+>},'
+\.'brs:move*{<+letter+>}{<+number+>},'
+\.'brs:goline{<+letter1+>}{<+number1+>}{<+letter2+>}{<+number2+>},'
+\.'brs:goarrow{<+letter1+>}{<+number1+>}{<+letter2+>}{<+number2+>},'
+\.'sbr:Markers,'
+\.'brs:markpos{<+marker+>}{<+letter+>}{<+number+>},'
+\.'markma,'
+\.'marktr,'
+\.'markcr,'
+\.'marksq,'
+\.'bra:marklb,'
+\.'marksl,'
+\.'markdd'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/schedule b/dot_vim/ftplugin/latex-suite/packages/schedule
new file mode 100644
index 0000000..7d58f6d
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/schedule
@@ -0,0 +1,20 @@
+if exists("schedule_package_file")
+ finish
+endif
+let schedule_package_file = 1
+
+let g:TeX_package_option_schedule = ''
+
+let g:TeX_package_schedule =
+\ 'ens:schedule:[<+title+>],'
+\.'bra:CellHeight,'
+\.'bra:CellWidth,'
+\.'bra:TimeRange,'
+\.'bra:SubUnits,'
+\.'bra:BeginOn,'
+\.'bra:TextSize,'
+\.'nor:FiveDay,'
+\.'nor:SevenDay,'
+\.'brs:NewAppointment{<+name+>}{<+bg+>}{<+fg+>}'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/textfit b/dot_vim/ftplugin/latex-suite/packages/textfit
new file mode 100644
index 0000000..4d52785
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/textfit
@@ -0,0 +1,12 @@
+if exists("textfit_package_file")
+ finish
+endif
+let textfit_package_file = 1
+
+let g:TeX_package_option_textfit = ''
+
+let g:TeX_package_textfit =
+\ 'brd:scaletowidth,'
+\.'brd:scaletoheight'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/times b/dot_vim/ftplugin/latex-suite/packages/times
new file mode 100644
index 0000000..499a13b
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/times
@@ -0,0 +1,10 @@
+if exists("times_package_file")
+ finish
+endif
+let times_package_file = 1
+
+let g:TeX_package_option_times = ''
+
+let g:TeX_package_times = ''
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/tipa b/dot_vim/ftplugin/latex-suite/packages/tipa
new file mode 100644
index 0000000..c89cc5d
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/tipa
@@ -0,0 +1,364 @@
+if exists("tipa_package_file")
+ finish
+endif
+let tipa_package_file = 1
+
+let g:TeX_package_option_tipa =
+\ 'T1,'
+\.'noenc,'
+\.'tone,'
+\.'extra,'
+\.'safe'
+
+let g:TeX_package_tipa =
+\ 'sbr:Common,'
+\.'bra:textipa,'
+\.'env:IPA,'
+\.'tipaencoding,'
+\.'bra:super,'
+\.'nor:ipabar,'
+\.'brd:tipalowaraccent,'
+\.'brd:tipaupperaccent,'
+\.'brd:tipaLowaraccent,'
+\.'brd:tipaUpperaccent,'
+\.'brd:ipaclap,'
+\.'sbr:VowelsandConsonants,'
+\.'nor:textturna,'
+\.'nor:textrhooka,'
+\.'nor:textlhookfour,'
+\.'nor:textscripta,'
+\.'nor:textturnscripta,'
+\.'nor:textinvscripta,'
+\.'ae,'
+\.'nor:textaolig,'
+\.'nor:textsca,'
+\.'nor:textinvsca,'
+\.'nor:textscaolig,'
+\.'nor:textturnv,'
+\.'nor:textsoftsign,'
+\.'nor:texthardsign,'
+\.'nor:texthtb,'
+\.'nor:textscb,'
+\.'nor:textcrb,'
+\.'nor:textbarb,'
+\.'nor:textbeta,'
+\.'nor:textbarc,'
+\.'nor:texthtc,'
+\.'bra:v,'
+\.'bra:c,'
+\.'nor:textctc,'
+\.'nor:textstretchc,'
+\.'nor:textstretchcvar,'
+\.'nor:textctstretchc,'
+\.'nor:textctstretchcvar,'
+\.'nor:textcrd,'
+\.'nor:textbard,'
+\.'nor:texthtd,'
+\.'nor:textrtaild,'
+\.'nor:texthtrtaild,'
+\.'nor:textctd,'
+\.'nor:textfrhookd,'
+\.'nor:textfrhookdvar,'
+\.'nor:textdblig,'
+\.'nor:textdzlig,'
+\.'nor:textdctzlig,'
+\.'nor:textdyoghlig,'
+\.'nor:textctdctzlig,'
+\.'nor:textscdelta,'
+\.'nor:dh,'
+\.'nor:textrhooke,'
+\.'nor:textschwa,'
+\.'nor:textrhookschwa,'
+\.'nor:textreve,'
+\.'nor:textsce,'
+\.'nor:textepsilon,'
+\.'nor:textrhookepsilon,'
+\.'nor:textcloseepsilon,'
+\.'nor:textrevepsilon,'
+\.'nor:textrhookrevepsilon,'
+\.'nor:textcloserevepsilon,'
+\.'nor:textscf,'
+\.'nor:textscriptg,'
+\.'nor:textbarg,'
+\.'nor:textcrg,'
+\.'nor:texthtg,'
+\.'nor:textg,'
+\.'nor:textscg,'
+\.'nor:texthtscg,'
+\.'nor:textgamma,'
+\.'nor:textgrgamma,'
+\.'nor:textfrtailgamma,'
+\.'nor:textbktailgamma,'
+\.'nor:textbabygamma,'
+\.'nor:textramshorns,'
+\.'nor:texthvlig,'
+\.'nor:textcrh,'
+\.'nor:texthth,'
+\.'nor:textrtailhth,'
+\.'nor:textheng,'
+\.'nor:texththeng,'
+\.'nor:textturnh,'
+\.'nor:textsch,'
+\.'nor:i,'
+\.'nor:textbari,'
+\.'nor:textiota,'
+\.'nor:textlhti,'
+\.'nor:textlhtlongi,'
+\.'nor:textvibyi,'
+\.'nor:textraisevibyi,'
+\.'nor:textsci,'
+\.'nor:j,'
+\.'nor:textctj,'
+\.'nor:textctjvar,'
+\.'nor:textscj,'
+\.'bra:v,'
+\.'nor:textbardotlessj,'
+\.'nor:textObardotlessj,'
+\.'nor:texthtbardotlessj,'
+\.'nor:texthtbardotlessjvar,'
+\.'nor:texthtk,'
+\.'nor:textturnk,'
+\.'nor:textsck,'
+\.'nor:textturnsck,'
+\.'nor:textltilde,'
+\.'nor:textbarl,'
+\.'nor:textbeltl,'
+\.'nor:textrtaill,'
+\.'nor:textlyoghlig,'
+\.'nor:textOlyoghlig,'
+\.'nor:textscl,'
+\.'nor:textrevscl,'
+\.'nor:textlambda,'
+\.'nor:textcrlambda,'
+\.'nor:textltailm,'
+\.'nor:textturnm,'
+\.'nor:textturnmrleg,'
+\.'nor:texthmlig,'
+\.'nor:textscm,'
+\.'nor:textnrleg,'
+\.'~,'
+\.'nor:textltailn,'
+\.'nor:textfrbarn,'
+\.'nor:ng,'
+\.'nor:textrtailn,'
+\.'nor:textctn,'
+\.'nor:textnrleg,'
+\.'nor:textscn,'
+\.'nor:textbullseye,'
+\.'nor:textObullseye,'
+\.'nor:textbaro,'
+\.'nor:o,'
+\.'nor:textfemale,'
+\.'nor:textuncrfemale,'
+\.'nor:oe,'
+\.'nor:textscoelig,'
+\.'nor:textopeno,'
+\.'nor:textrhookopeno,'
+\.'nor:textturncelig,'
+\.'nor:textomega,'
+\.'nor:textinvomega,'
+\.'nor:textscomega,'
+\.'nor:textcloseomega,'
+\.'nor:textlhookp,'
+\.'nor:textscp,'
+\.'nor:textwynn,'
+\.'nor:textthorn,'
+\.'nor:textthornvari,'
+\.'nor:textthornvarii,'
+\.'nor:textthornvariii,'
+\.'nor:textthornvariv,'
+\.'nor:texthtp,'
+\.'nor:textphi,'
+\.'nor:texthtq,'
+\.'nor:textqplig,'
+\.'nor:textscq,'
+\.'nor:textfishhookr,'
+\.'nor:textlonglegr,'
+\.'nor:textrtailr,'
+\.'nor:textturnr,'
+\.'nor:textturnrrtail,'
+\.'nor:textturnlonglegr,'
+\.'nor:textscr,'
+\.'nor:textinvscr,'
+\.'nor:textrevscr,'
+\.'bra:v,'
+\.'nor:textrtails,'
+\.'nor:textesh,'
+\.'nor:textdoublebaresh,'
+\.'nor:textctesh,'
+\.'nor:textlooptoprevesh,'
+\.'nor:texthtt,'
+\.'nor:textlhookt,'
+\.'nor:textrtailt,'
+\.'nor:textfrhookt,'
+\.'nor:textctturnt,'
+\.'nor:texttctclig,'
+\.'nor:texttslig,'
+\.'nor:textteshlig,'
+\.'nor:textturnt,'
+\.'nor:textctt,'
+\.'nor:textcttctclig,'
+\.'nor:texttheta,'
+\.'nor:textbaru,'
+\.'nor:textupsilon,'
+\.'nor:textscu,'
+\.'nor:textturnscu,'
+\.'nor:textscriptv,'
+\.'nor:textturnw,'
+\.'nor:textchi,'
+\.'nor:textturny,'
+\.'nor:textscy,'
+\.'nor:textlhtlongy,'
+\.'nor:textvibyy,'
+\.'nor:textcommatailz,'
+\.'bra:v,'
+\.'nor:textctz,'
+\.'nor:textrtailz,'
+\.'nor:textcrtwo,'
+\.'nor:textturntwo,'
+\.'nor:textyogh,'
+\.'nor:textbenttailyogh,'
+\.'nor:textrevyogh,'
+\.'nor:textctyogh,'
+\.'nor:textturnthree,'
+\.'nor:textglotstop,'
+\.'nor:textraiseglotstop,'
+\.'nor:textbarglotstop,'
+\.'nor:textinvglotstop,'
+\.'nor:textcrinvglotstop,'
+\.'nor:textctinvglotstop,'
+\.'nor:textrevglotstop,'
+\.'nor:textturnglotstop,'
+\.'nor:textbarrevglotstop,'
+\.'nor:textpipe,'
+\.'nor:textpipevar,'
+\.'nor:textdoublebarpipe,'
+\.'nor:textdoublebarpipevar,'
+\.'nor:textdoublepipevar,'
+\.'nor:textdoublepipe,'
+\.'nor:textdoublebarslash,'
+\.'sbr:Suprasegmentals,'
+\.'nor:textprimstress,'
+\.'nor:textsecstress,'
+\.'nor:textlengthmark,'
+\.'nor:texthalflength,'
+\.'nor:textvertline,'
+\.'nor:textdoublevertline,'
+\.'bra:textbottomtiebar,'
+\.'nor:textdownstep,'
+\.'nor:textupstep,'
+\.'nor:textglobfall,'
+\.'nor:textglobrise,'
+\.'nor:textspleftarrow,'
+\.'nor:textdownfullarrow,'
+\.'nor:textupfullarrow,'
+\.'nor:textsubrightarrow,'
+\.'nor:textsubdoublearrow,'
+\.'sbr:AccentsandDiacritics,'
+\.'`,'
+\."',"
+\.'^,'
+\.'~,'
+\.'",'
+\.'bra:H,'
+\.'bra:r,'
+\.'bra:v,'
+\.'bra:u,'
+\.'=,'
+\.'.,'
+\.'bra:c,'
+\.'bra:textpolhook,'
+\.'nor:textrevpolhook{o,'
+\.'bra:textdoublegrave,'
+\.'bra:textsubgrave,'
+\.'bra:textsubacute,'
+\.'bra:textsubcircum,'
+\.'bra:textroundcap,'
+\.'bra:textacutemacron,'
+\.'bra:textgravemacron,'
+\.'bra:textvbaraccent,'
+\.'bra:textdoublevbaraccent,'
+\.'bra:textgravedot,'
+\.'bra:textdotacute,'
+\.'bra:textcircumdot,'
+\.'bra:texttildedot,'
+\.'bra:textbrevemacron,'
+\.'bra:textringmacron,'
+\.'bra:textacutewedge,'
+\.'bra:textdotbreve,'
+\.'bra:textsubbridge,'
+\.'bra:textinvsubbridge,'
+\.'sbr:SubscriptSquare,'
+\.'bra:textsubrhalfring,'
+\.'bra:textsublhalfring,'
+\.'bra:textsubw,'
+\.'bra:textoverw,'
+\.'bra:textseagull,'
+\.'bra:textovercross,'
+\.'bra:textsubplus,'
+\.'bra:textraising,'
+\.'bra:textlowering,'
+\.'bra:textadvancing,'
+\.'bra:textretracting,'
+\.'bra:textsubtilde,'
+\.'bra:textsubumlaut,'
+\.'bra:textsubring,'
+\.'bra:textsubwedge,'
+\.'bra:textsubbar,'
+\.'bra:textsubdot,'
+\.'bra:textsubarch,'
+\.'bra:textsyllabic,'
+\.'bra:textsuperimposetilde,'
+\.'nor:textcorner,'
+\.'nor:textopencorner,'
+\.'nor:textrhoticity,'
+\.'nor:textceltpal,'
+\.'nor:textlptr,'
+\.'nor:textrptr,'
+\.'nor:textrectangle,'
+\.'nor:textretractingvar,'
+\.'bra:texttoptiebar,'
+\.'nor:textrevapostrophe,'
+\.'nor:texthooktop,'
+\.'nor:textrthook,'
+\.'nor:textrthooklong,'
+\.'nor:textpalhook,'
+\.'nor:textpalhooklong,'
+\.'nor:textpalhookvar,'
+\.'bra:textsuperscript,'
+\.'sbr:ToneLetters,'
+\.'bra:tone,'
+\.'bra:stone,'
+\.'bra:rtone,'
+\.'nor:tone{55},'
+\.'nor:tone{44},'
+\.'nor:tone{33},'
+\.'nor:tone{22},'
+\.'nor:tone{11},'
+\.'nor:tone{51},'
+\.'nor:tone{15},'
+\.'nor:tone{45},'
+\.'nor:tone{12},'
+\.'nor:tone{454},'
+\.'sbr:DiacriticsExtIPA,'
+\.'bra:spreadlips,'
+\.'bra:overbridge,'
+\.'bra:bibridge,'
+\.'bra:subdoublebar,'
+\.'bra:subdoublevert,'
+\.'bra:subcorner,'
+\.'bra:whistle,'
+\.'bra:sliding,'
+\.'bra:crtilde,'
+\.'bra:dottedtilde,'
+\.'bra:doubletilde,'
+\.'bra:partvoiceless,'
+\.'bra:inipartvoiceless,'
+\.'bra:finpartvoiceless,'
+\.'bra:partvoice,'
+\.'bra:inipartvoice,'
+\.'bra:finpartvoice,'
+\.'bra:sublptr,'
+\.'bra:subrptr'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/ulem b/dot_vim/ftplugin/latex-suite/packages/ulem
new file mode 100644
index 0000000..9257713
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/ulem
@@ -0,0 +1,21 @@
+if exists("ulem_package_file")
+ finish
+endif
+let ulem_package_file = 1
+
+let g:TeX_package_option_ulem =
+\ 'normalem,'
+\.'ULforem,'
+\.'normalbf,'
+\.'UWforbf'
+
+let g:TeX_package_ulem =
+\ 'bra:uwave,'
+\.'bra:uline,'
+\.'bra:uuline,'
+\.'bra:sout,'
+\.'bra:xout,'
+\.'ULthickness,'
+\.'ULdepth'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/url b/dot_vim/ftplugin/latex-suite/packages/url
new file mode 100644
index 0000000..642148a
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/url
@@ -0,0 +1,24 @@
+if exists("url_package_file")
+ finish
+endif
+let url_package_file = 1
+
+let g:TeX_package_option_url =
+\ 'hyphens,'
+\.'obeyspaces,'
+\.'spaces,'
+\.'T1'
+
+let g:TeX_package_url =
+\ 'bra:urlstyle,'
+\.'bra:url,'
+\.'bra:path,'
+\.'bra:urldef'
+
+" TODO uncomment if you figure out
+" 1. how to get this syn command to work every time instead of only the
+" first time this file is sourced.
+" syn region texZone start="\\url{" end="}\|%stopzone\>"
+" syn region texZone start="\\path{" end="}\|%stopzone\>"
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/verbatim b/dot_vim/ftplugin/latex-suite/packages/verbatim
new file mode 100644
index 0000000..f2137ff
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/verbatim
@@ -0,0 +1,18 @@
+if exists("verbatim_package_file")
+ finish
+endif
+let verbatim_package_file = 1
+
+let g:TeX_package_option_verbatim = ''
+
+let g:TeX_package_verbatim =
+\ 'env:comment,'
+\.'env:verbatim,'
+\.'env:verbatim*,'
+\.'bra:verbatiminput,'
+\.'bra:verbatiminput'
+
+syn region texZone start="\\begin{comment}" end="\\end{comment}\|%stopzone\>" fold
+syn region texZone start="\\begin{verbatim}" end="\\end{verbatim}\|%stopzone\>" fold
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/packages/version b/dot_vim/ftplugin/latex-suite/packages/version
new file mode 100644
index 0000000..4de9da8
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/packages/version
@@ -0,0 +1,12 @@
+if exists("version_package_file")
+ finish
+endif
+let version_package_file = 1
+
+let g:TeX_package_option_version = ''
+
+let g:TeX_package_version =
+\ 'bra:includeversion,'
+\.'bra:excludeversion'
+
+" vim:ft=vim:ff=unix:
diff --git a/dot_vim/ftplugin/latex-suite/projecttemplate.vim b/dot_vim/ftplugin/latex-suite/projecttemplate.vim
new file mode 100644
index 0000000..1ab4be0
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/projecttemplate.vim
@@ -0,0 +1,11 @@
+" Project name
+" let g:projName = ''
+"
+" Project files
+" let g:projFiles = ''
+
+
+" Vim settings/maps/abbrs specific for this project
+
+" Modeline for this file
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4:ft=vim
diff --git a/dot_vim/ftplugin/latex-suite/pytools.py b/dot_vim/ftplugin/latex-suite/pytools.py
new file mode 100644
index 0000000..1934e23
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/pytools.py
@@ -0,0 +1,52 @@
+import string, vim, re, os, glob
+# catFile: assigns a local variable retval to the contents of a file {{{
+def catFile(filename):
+ try:
+ file = open(filename)
+ lines = ''.join(file.readlines())
+ file.close()
+ except:
+ lines = ''
+
+ # escape double quotes and backslashes before quoting the string so
+ # everything passes throught.
+ vim.command("""let retval = "%s" """ % re.sub(r'"|\\', r'\\\g<0>', lines))
+ return lines
+
+# }}}
+# isPresentInFile: check if regexp is present in the file {{{
+def isPresentInFile(regexp, filename):
+ try:
+ fp = open(filename)
+ fcontents = string.join(fp.readlines(), '')
+ fp.close()
+ if re.search(regexp, fcontents):
+ vim.command('let retval = 1')
+ return 1
+ else:
+ vim.command('let retval = 0')
+ return None
+ except:
+ vim.command('let retval = 0')
+ return None
+
+# }}}
+# deleteFile: deletes a file if present {{{
+# If the file does not exist, check if its a filepattern rather than a
+# filename. If its a pattern, then deletes all files matching the
+# pattern.
+def deleteFile(filepattern):
+ if os.path.exists(filepattern):
+ try:
+ os.remove(filepattern)
+ except:
+ vim.command('let retval = -1')
+ else:
+ if glob.glob(filepattern):
+ for filename in glob.glob(filepattern):
+ os.remove(filename)
+ else:
+ vim.command('let retval = -1')
+
+# }}}
+# vim:fdm=marker:ff=unix:noet:ts=4:sw=4:nowrap
diff --git a/dot_vim/ftplugin/latex-suite/smartspace.vim b/dot_vim/ftplugin/latex-suite/smartspace.vim
new file mode 100644
index 0000000..07526d8
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/smartspace.vim
@@ -0,0 +1,102 @@
+"=============================================================================
+" File: smartspace.vim
+" Author: Carl Muller
+" Created: Fri Dec 06 12:00 AM 2002 PST
+"
+" Description:
+" Maps the <space> key in insert mode so that mathematical formulaes are
+" always kept on the same line. i.e, $$'s dont get broken across multiple
+" lines.
+"=============================================================================
+
+" Avoid reinclusion or if the user doesn't want us.
+if exists('b:done_smartspace')
+ \ || (exists('g:Tex_SmartKeySpace') && !g:Tex_SmartKeySpace)
+ finish
+endif
+let b:done_smartspace = 1
+
+" Smart space relies on taking over vim's insertion of carriage returns in
+" order to keep $$'s on the same line. The only way to get vim not to break
+" lines is to set tw=0.
+"
+" NOTE: setting tw != 0 will break smartspace
+" the user's 'tw' setting is still respected in the insert mode.
+" However, normal mode actions which rely on 'tw' such as gqap will be
+" broken because of the faulty 'tw' setting.
+let b:tw = &l:tw
+setlocal tw=0
+
+inoremap <buffer> <silent> <Space> <Space><Esc>:call <SID>TexFill(b:tw)<CR>a
+
+" Do not redefine the function.
+if exists('*s:TexFill')
+ finish
+endif
+
+" TexFormatLine: format line retaining $$'s on the same line. {{{
+function! s:TexFill(width)
+ if a:width != 0 && col(".") > a:width
+ " For future use, record the current line and the number of the current column
+ let current_line = getline(".")
+ let current_column = col(".")
+ exe "normal! a##\<Esc>"
+ call <SID>TexFormatLine(a:width,current_line,current_column)
+ exe "normal! ?##\<CR>2s\<Esc>"
+ " Remove ## from the search history.
+ call histdel("/", -1)|let @/=histget("/", -1)
+ endif
+endfunction
+
+" }}}
+function! s:TexFormatLine(width, current_line, current_column) " {{{
+ " get the first non-blank character.
+ let first = matchstr(getline('.'), '\S')
+ normal! $
+ let length = col('.')
+ let go = 1
+ while length > a:width+2 && go
+ let between = 0
+ let string = strpart(getline('.'), 0, a:width)
+ " Count the dollar signs
+ let number_of_dollars = 0
+ let evendollars = 1
+ let counter = 0
+ while counter <= a:width-1
+ " Pay attention to '$$'.
+ if string[counter] == '$' && string[counter-1] != '$'
+ let evendollars = 1 - evendollars
+ let number_of_dollars = number_of_dollars + 1
+ endif
+ let counter = counter + 1
+ endwhile
+ " Get ready to split the line.
+ exe 'normal! ' . (a:width + 1) . '|'
+ if evendollars
+ " Then you are not between dollars.
+ exe "normal! ?\\$\\+\\| \<CR>W"
+ else
+ " Then you are between dollars.
+ normal! F$
+ if col(".") == 1 || getline('.')[col(".")-1] != "$"
+ let go = 0
+ endif
+ endif
+ if first == '$' && number_of_dollars == 1
+ let go = 0
+ else
+ exe "normal! i\<CR>\<Esc>$"
+ " get the first non-blank character.
+ let first = matchstr(getline('.'), '\S')
+ endif
+ let length = col(".")
+ endwhile
+ if go == 0 && strpart(a:current_line, 0, a:current_column) =~ '.*\$.*\$.*'
+ exe "normal! ^f$a\<CR>\<Esc>"
+ call <SID>TexFormatLine(a:width, a:current_line, a:current_column)
+ endif
+endfunction
+
+" }}}
+
+" vim:fdm=marker:ts=4:sw=4:noet
diff --git a/dot_vim/ftplugin/latex-suite/templates.vim b/dot_vim/ftplugin/latex-suite/templates.vim
new file mode 100644
index 0000000..e28e429
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/templates.vim
@@ -0,0 +1,149 @@
+"=============================================================================
+" File: templates.vim
+" Author: Gergely Kontra
+" (minor modifications by Srinath Avadhanula)
+" (plus other modifications by Mikolaj Machowski)
+" Version: 1.0
+" Created: Tue Apr 23 05:00 PM 2002 PST
+" CVS: $Id: templates.vim 1002 2006-03-23 04:02:21Z srinathava $
+"
+" Description: functions for handling templates in latex-suite/templates
+" directory.
+"=============================================================================
+
+let s:path = expand("<sfile>:p:h")
+
+" SetTemplateMenu: sets up the menu for templates {{{
+function! <SID>SetTemplateMenu()
+ let flist = Tex_FindInRtp('', 'templates')
+ let i = 1
+ while 1
+ let fname = Tex_Strntok(flist, ',', i)
+ if fname == ''
+ break
+ endif
+ exe "amenu ".g:Tex_TemplatesMenuLocation."&".i.":<Tab>".fname." ".
+ \":call <SID>ReadTemplate('".fname."')<CR>"
+ let i = i + 1
+ endwhile
+endfunction
+
+if g:Tex_Menus
+ call <SID>SetTemplateMenu()
+endif
+
+" }}}
+" ReadTemplate: reads in the template file from the template directory. {{{
+function! <SID>ReadTemplate(...)
+ if a:0 > 0
+ let filename = a:1
+ else
+ let filelist = Tex_FindInRtp('', 'templates')
+ let filename =
+ \ Tex_ChooseFromPrompt("Choose a template file:\n" .
+ \ Tex_CreatePrompt(filelist, 2, ',') .
+ \ "\nEnter number or name of file :",
+ \ filelist, ',')
+ endif
+
+ let fname = Tex_FindInRtp(filename.'.tex', 'templates', ':p')
+ call Tex_Debug("0read ".fname, 'templates')
+
+ silent! exe "0read ".fname
+
+ " The first line of the file contains the specifications of what the
+ " placeholder characters and the other special characters are.
+ let pattern = '\v(\S+)\t(\S+)\t(\S+)\t(\S+)'
+
+ let s:phsTemp = substitute(getline(1), pattern, '\1', '')
+ let s:pheTemp = substitute(getline(1), pattern, '\2', '')
+ let s:exeTemp = substitute(getline(1), pattern, '\3', '')
+ let s:comTemp = substitute(getline(1), pattern, '\4', '')
+
+ 0 d_
+
+ call s:ProcessTemplate()
+ call Tex_pack_updateall(1)
+
+ " Do not handle the placeholders here. Let IMAP_PutTextWithMovement do it
+ " because it handles UTF-8 character substitutions etc. Therefore delete
+ " the text into @a and paste it using IMAP_PutTextWithMovement().
+ let _a = @a
+ normal! ggVG"ax
+
+ let _fo = &fo
+ " Since IMAP_PutTextWithMovement simulates the key-presses, leading
+ " indendatation can get duplicated in strange ways if ``fo`` is non-empty.
+ " NOTE: the indentexpr thingie is still respected with an empty fo so that
+ " environments etc are properly indented.
+ set fo=
+
+ call Tex_Debug("normal! i\<C-r>=IMAP_PutTextWithMovement(@a, '".s:phsTemp."', '".s:pheTemp."')\<CR>", 'templates')
+ exec "normal! i\<C-r>=IMAP_PutTextWithMovement(@a, '".s:phsTemp."', '".s:pheTemp."')\<CR>"
+
+ let &fo = _fo
+ let @a = _a
+
+ call Tex_Debug('phs = '.s:phsTemp.', phe = '.s:pheTemp.', exe = '.s:exeTemp.', com = '.s:comTemp, 'templates')
+
+endfunction
+
+" }}}
+" ProcessTemplate: processes the special characters in template file. {{{
+" This implementation follows from Gergely Kontra's
+" mu-template.vim
+" http://vim.sourceforge.net/scripts/script.php?script_id=222
+function! <SID>ProcessTemplate()
+ if exists('s:phsTemp') && s:phsTemp != ''
+
+ exec 'silent! %s/^'.s:comTemp.'\(\_.\{-}\)'.s:comTemp.'$/\=<SID>Compute(submatch(1))/ge'
+ exec 'silent! %s/'.s:exeTemp.'\(.\{-}\)'.s:exeTemp.'/\=<SID>Exec(submatch(1))/ge'
+ exec 'silent! g/'.s:comTemp.s:comTemp.'/d'
+
+ " A function only puts one item into the search history...
+ call Tex_CleanSearchHistory()
+ endif
+endfunction
+
+function! <SID>Exec(what)
+ exec 'return '.a:what
+endfunction
+
+" Back-Door to trojans !!!
+function! <SID>Compute(what)
+ exe a:what
+ if exists('s:comTemp')
+ return s:comTemp.s:comTemp
+ else
+ return ''
+ endif
+endfunction
+
+" }}}
+" Command definitions {{{
+if v:version >= 602
+ com! -complete=custom,Tex_CompleteTemplateName -nargs=? TTemplate :call <SID>ReadTemplate(<f-args>)
+ \| :startinsert
+
+ " Tex_CompleteTemplateName: for completing names in TTemplate command {{{
+ " Description: get list of template names with Tex_FindInRtp(), remove full path
+ " and return list of names separated with newlines.
+ "
+ function! Tex_CompleteTemplateName(A,P,L)
+ " Get name of macros from all runtimepath directories
+ let tmplnames = Tex_FindInRtp('', 'templates')
+ " Separate names with \n not ,
+ let tmplnames = substitute(tmplnames,',','\n','g')
+ return tmplnames
+ endfunction
+ " }}}
+
+else
+ com! -nargs=? TTemplate :call <SID>ReadTemplate(<f-args>)
+ \| :startinsert
+
+endif
+
+" }}}
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
diff --git a/dot_vim/ftplugin/latex-suite/templates/IEEEtran.tex b/dot_vim/ftplugin/latex-suite/templates/IEEEtran.tex
new file mode 100644
index 0000000..104f9b2
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/templates/IEEEtran.tex
@@ -0,0 +1,142 @@
+<+ +> !comp! !exe!
+%% Based on <bare_jrnl.tex> in the ieee package available from CTAN,
+%% I have changed the options so that most useful ones are clubbed together,
+%% Have a look at <bare_jrnl.tex> to understand the function of each package.
+
+%% This code is offered as-is - no warranty - user assumes all risk.
+%% Free to use, distribute and modify.
+
+% *** Authors should verify (and, if needed, correct) their LaTeX system ***
+% *** with the testflow diagnostic prior to trusting their LaTeX platform ***
+% *** with production work. IEEE's font choices can trigger bugs that do ***
+% *** not appear when using other class files. ***
+% Testflow can be obtained at:
+% http://www.ctan.org/tex-archive/macros/latex/contrib/supported/IEEEtran/testflow
+
+% File: !comp!expand("%:p:t")!comp!
+% Created: !comp!strftime("%a %b %d %I:00 %p %Y ").substitute(strftime('%Z'), '\<\(\w\)\(\w*\)\>\(\W\|$\)', '\1', 'g')!comp!
+% Last Change: !comp!strftime("%a %b %d %I:00 %p %Y ").substitute(strftime('%Z'), '\<\(\w\)\(\w*\)\>\(\W\|$\)', '\1', 'g')!comp!
+%
+\documentclass[journal]{IEEEtran}
+
+\usepackage{cite, graphicx, subfigure, amsmath}
+\interdisplaylinepenalty=2500
+
+% *** Do not adjust lengths that control margins, column widths, etc. ***
+% *** Do not use packages that alter fonts (such as pslatex). ***
+% There should be no need to do such things with IEEEtran.cls V1.6 and later.
+
+<++>
+% correct bad hyphenation here
+\hyphenation{<+op-tical net-works semi-conduc-tor+>}
+
+
+\begin{document}
+%
+% paper title
+\title{<+Skeleton of IEEEtran.cls for Journals in VIM-Latex+>}
+%
+%
+% author names and IEEE memberships
+% note positions of commas and nonbreaking spaces ( ~ ) LaTeX will not break
+% a structure at a ~ so this keeps an author's name from being broken across
+% two lines.
+% use \thanks{} to gain access to the first footnote area
+% a separate \thanks must be used for each paragraph as LaTeX2e's \thanks
+% was not built to handle multiple paragraphs
+\author{<+Sumit Bhardwaj+>~\IEEEmembership{<+Student~Member,~IEEE,+>}
+<+John~Doe+>,~\IEEEmembership{<+Fellow,~OSA,+>}
+<+and~Jane~Doe,+>~\IEEEmembership{<+Life~Fellow,~IEEE+>}}% <-this % stops a space
+\thanks{<+Manuscript received January 20, 2002; revised August 13, 2002.
+This work was supported by the IEEE.+>}% <-this % stops a space
+\thanks{<+S. Bhardwaj is with the Indian Institute of Technology, Delhi.+>}
+%
+% The paper headers
+\markboth{<+Journal of VIM-\LaTeX\ Class Files,~Vol.~1, No.~8,~August~2002+>}{
+<+Bhardwaj \MakeLowercase{\textit{et al.}+>}: <+Skeleton of IEEEtran.cls for Journals in VIM-Latex+>}
+% The only time the second header will appear is for the odd numbered pages
+% after the title page when using the twoside option.
+
+
+% If you want to put a publisher's ID mark on the page
+% (can leave text blank if you just want to see how the
+% text height on the first page will be reduced by IEEE)
+%\pubid{0000--0000/00\$00.00~\copyright~2002 IEEE}
+
+% use only for invited papers
+%\specialpapernotice{(Invited Paper)}
+
+% make the title area
+\maketitle
+
+
+\begin{abstract}
+<+The abstract goes here.+>
+\end{abstract}
+
+\begin{keywords}
+<+IEEEtran, journal, \LaTeX, paper, template, VIM, VIM-\LaTeX+>.
+\end{keywords}
+
+\section{Introduction}
+\PARstart{<+T+>}{<+his+>} <+demo file is intended to serve as a ``starter file"
+for IEEE journal papers produced under \LaTeX\ using IEEEtran.cls version
+1.6 and later.+>
+% You must have at least 2 lines in the paragraph with the drop letter
+% (should never be an issue)
+<+May all your publication endeavors be successful.+>
+
+% needed in second column of first page if using \pubid
+%\pubidadjcol
+
+% trigger a \newpage just before the given reference
+% number - used to balance the columns on the last page
+% adjust value as needed - may need to be readjusted if
+% the document is modified later
+%\IEEEtriggeratref{8}
+% The "triggered" command can be changed if desired:
+%\IEEEtriggercmd{\enlargethispage{-5in}}
+
+% references section
+
+%\bibliographystyle{IEEEtran.bst}
+%\bibliography{IEEEabrv,../bib/paper}
+\begin{thebibliography}{1}
+
+\bibitem{IEEEhowto:kopka}
+H.~Kopka and P.~W. Daly, \emph{A Guide to {\LaTeX}}, 3rd~ed.\hskip 1em plus
+0.5em minus 0.4em\relax Harlow, England: Addison-Wesley, 1999.
+
+\end{thebibliography}
+
+% biography section
+%
+\begin{biography}{Sumit Bhardwaj}
+Biography text here.
+\end{biography}
+
+% if you will not have a photo
+\begin{biographynophoto}{John Doe}
+Biography text here.
+\end{biographynophoto}
+
+% insert where needed to balance the two columns on the last page
+%\newpage
+
+\begin{biographynophoto}{Jane Doe}
+Biography text here.
+\end{biographynophoto}
+
+% You can push biographies down or up by placing
+% a \vfill before or after them. The appropriate
+% use of \vfill depends on what kind of text is
+% on the last page and whether or not the columns
+% are being equalized.
+
+%\vfill
+
+% Can be used to pull up biographies so that the bottom of the last one
+% is flush with the other column.
+%\enlargethispage{-5in}
+
+\end{document}
diff --git a/dot_vim/ftplugin/latex-suite/templates/article.tex b/dot_vim/ftplugin/latex-suite/templates/article.tex
new file mode 100644
index 0000000..ea7e1d1
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/templates/article.tex
@@ -0,0 +1,9 @@
+<+ +> !comp! !exe!
+% File: !comp!expand("%:p:t")!comp!
+% Created: !comp!strftime("%a %b %d %I:00 %p %Y ").substitute(strftime('%Z'), '\<\(\w\)\(\w*\)\>\(\W\|$\)', '\1', 'g')!comp!
+% Last Change: !comp!strftime("%a %b %d %I:00 %p %Y ").substitute(strftime('%Z'), '\<\(\w\)\(\w*\)\>\(\W\|$\)', '\1', 'g')!comp!
+%
+\documentclass[a4paper]{article}
+\begin{document}
+<++>
+\end{document}
diff --git a/dot_vim/ftplugin/latex-suite/templates/report.tex b/dot_vim/ftplugin/latex-suite/templates/report.tex
new file mode 100644
index 0000000..479c7b3
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/templates/report.tex
@@ -0,0 +1,9 @@
+<+ +> !comp! !exe!
+% File: !comp!expand("%")!comp!
+% Created: !comp!strftime("%a %b %d %I:00 %p %Y ").substitute(strftime('%Z'), '\<\(\w\)\(\w*\)\>\(\W\|$\)', '\1', 'g')!comp!
+% Last Change: !comp!strftime("%a %b %d %I:00 %p %Y ").substitute(strftime('%Z'), '\<\(\w\)\(\w*\)\>\(\W\|$\)', '\1', 'g')!comp!
+%
+\documentclass[a4paper]{report}
+\begin{document}
+<++>
+\end{document}
diff --git a/dot_vim/ftplugin/latex-suite/templates/report_two_column.tex b/dot_vim/ftplugin/latex-suite/templates/report_two_column.tex
new file mode 100644
index 0000000..15bd95e
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/templates/report_two_column.tex
@@ -0,0 +1,9 @@
+<+ +> !comp! !exe!
+% File: !comp!expand("%:p:t")!comp!
+% Created: !comp!strftime("%a %b %d %I:00 %p %Y ").substitute(strftime('%Z'), '\<\(\w\)\(\w*\)\>\(\W\|$\)', '\1', 'g')!comp!
+% Last Change: !comp!strftime("%a %b %d %I:00 %p %Y ").substitute(strftime('%Z'), '\<\(\w\)\(\w*\)\>\(\W\|$\)', '\1', 'g')!comp!
+%
+\documentclass[a4paper,twocolumn]{report}
+\begin{document}
+<++>
+\end{document}
diff --git a/dot_vim/ftplugin/latex-suite/texmenuconf.vim b/dot_vim/ftplugin/latex-suite/texmenuconf.vim
new file mode 100644
index 0000000..405e46a
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/texmenuconf.vim
@@ -0,0 +1,131 @@
+"=============================================================================
+" File: texmenuconf.vim
+" Author: Srinath Avadhanula
+" Copyright: Vim charityware license. :help license
+" Description:
+" CVS: $Id: texmenuconf.vim 997 2006-03-20 09:45:45Z srinathava $
+"
+"=============================================================================
+
+" Paths, crucial for functions
+let s:path = expand("<sfile>:p:h")
+let s:up_path = expand("<sfile>:p:h:h")
+let s:mainmenuname = g:Tex_MenuPrefix.'S&uite.'
+let s:mapleader = exists('mapleader') ? mapleader : "\\"
+
+" This glboal variable is incremented each time a top-level latex-suite menu
+" is created. We should always use this variable for setting the locations of
+" newly created top-level menus.
+let g:Tex_NextMenuLocation = g:Tex_MainMenuLocation
+
+" The templates and macros menus are always nested within the main latex-suit
+" menu.
+let g:Tex_TemplatesMenuLocation = g:Tex_MainMenuLocation.'.20 '.s:mainmenuname.'&Templates.'
+let g:Tex_MacrosMenuLocation = g:Tex_MainMenuLocation.'.20 '.s:mainmenuname.'&Macros.'
+
+" The packages menu can either be a child of the main menu or be a top-level
+" menu by itself.
+if g:Tex_NestPackagesMenu
+ let g:Tex_PackagesMenuLocation = (g:Tex_MainMenuLocation).'.10 '.s:mainmenuname.'&Packages.'
+else
+ let g:Tex_PackagesMenuLocation = (g:Tex_NextMenuLocation).'.10 '.g:Tex_MenuPrefix.'Packages.'
+ let g:Tex_NextMenuLocation = g:Tex_NextMenuLocation + 1
+endif
+
+" Environments are always a top-level menu.
+let g:Tex_EnvMenuLocation = (g:Tex_NextMenuLocation).'.20 '.g:Tex_MenuPrefix.'E&nvironments.'
+let g:Tex_NextMenuLocation = g:Tex_NextMenuLocation + 1
+
+" Elements are always a top-level menu.
+" If we choose to nest elements, then the top-level &TeX-Elements menu
+" contains <Fonts / Counters / Dimensions>
+" otherwise, the Fonts, Counters and Dimensions menus become top-level menus.
+if g:Tex_NestElementMenus
+ let g:Tex_ElementsMenuLocation = (g:Tex_NextMenuLocation).'.20 '.g:Tex_MenuPrefix.'E&lements.'
+else
+ let g:Tex_ElementsMenuLocation = (g:Tex_NextMenuLocation).'.20 '.g:Tex_MenuPrefix
+endif
+let g:Tex_NextMenuLocation = g:Tex_NextMenuLocation + 1
+
+
+" Set up the compiler/viewer menus. {{{
+"
+if has('gui_running') && g:Tex_Menus
+ exec 'anoremenu '.g:Tex_MainMenuLocation.'.25 '. s:mainmenuname.'-sepsuite0- :'
+
+ " menus for compiling / viewing etc.
+ exec 'anoremenu '.g:Tex_MainMenuLocation.'.30 '.s:mainmenuname.'&Compile<tab>'.s:mapleader.'ll'.
+ \' :silent! call Tex_RunLaTeX()<CR>'
+ exec 'anoremenu '.g:Tex_MainMenuLocation.'.40 '.s:mainmenuname.'&View<tab>'.s:mapleader.'lv'.
+ \' :silent! call Tex_ViewLaTeX()<CR>'
+ exec 'anoremenu '.g:Tex_MainMenuLocation.'.50 '.s:mainmenuname.'&Search<tab>'.s:mapleader.'ls'.
+ \' :silent! call ForwardSearchLaTeX()<CR>'
+ exec 'anoremenu '.g:Tex_MainMenuLocation.'.60 '.s:mainmenuname.'&Target\ Format<tab>:TTarget'.
+ \' :call SetTeXTarget()<CR>'
+ exec 'anoremenu '.g:Tex_MainMenuLocation.'.70 '.s:mainmenuname.'&Compiler\ Target<tab>:TCTarget'.
+ \' :call Tex_SetTeXCompilerTarget("Compile", "")<CR>'
+ exec 'anoremenu '.g:Tex_MainMenuLocation.'.80 '.s:mainmenuname.'&Viewer\ Target<tab>:TVTarget'.
+ \' :call Tex_SetTeXCompilerTarget("View", "")<CR>'
+ exec 'anoremenu '.g:Tex_MainMenuLocation.'.90 '.s:mainmenuname.'Set\ &Ignore\ Level<tab>:TCLevel'.
+ \' :TCLevel<CR>'
+ exec 'imenu '.g:Tex_MainMenuLocation.'.100 '.s:mainmenuname.'C&omplete\ Ref/Cite'.
+ \' <Plug>Tex_Completion'
+ exec 'anoremenu '.g:Tex_MainMenuLocation.'.110 '.s:mainmenuname.'-sepsuite1- :'
+ " refreshing folds
+ if g:Tex_Folding
+ exec 'anoremenu '.g:Tex_MainMenuLocation.'.120 '.s:mainmenuname.'&Refresh\ Folds<tab>'.s:mapleader.'rf'.
+ \' :call MakeTexFolds(1)<CR>'
+ exec 'anoremenu '.g:Tex_MainMenuLocation.'.130 '.s:mainmenuname.'-sepsuite2- :'
+ endif
+endif
+
+" }}}
+
+" ==============================================================================
+" MenuConf: configure the menus as compact/extended, with/without math
+" ==============================================================================
+function! Tex_MenuConfigure(type, action) " {{{
+ let menuloc = s:mainmenuname.'Configure\ Menu.'
+ if a:type == 'math'
+ if a:action == 1
+ let g:Tex_MathMenus = 1
+ exe 'so '.s:path.'/mathmacros.vim'
+ exe 'amenu disable '.menuloc.'Add\ Math\ Menu'
+ exe 'amenu enable '.menuloc.'Remove\ Math\ Menu'
+ elseif a:action == 0
+ call Tex_MathMenuRemove()
+ exe 'amenu enable '.menuloc.'Add\ Math\ Menu'
+ exe 'amenu disable '.menuloc.'Remove\ Math\ Menu'
+ endif
+ elseif a:type == 'elements'
+ if a:action == 'expand'
+ let g:Tex_ElementsMenuLocation = '80.20 '.g:Tex_MenuPrefix
+ exe 'amenu disable '.menuloc.'Expand\ Elements'
+ exe 'amenu enable '.menuloc.'Compress\ Elements'
+ elseif a:action == 'nest'
+ let g:Tex_ElementsMenuLocation = '80.20 '.g:Tex_MenuPrefix.'Elements.'
+ exe 'amenu enable '.menuloc.'Expand\ Elements'
+ exe 'amenu disable '.menuloc.'Compress\ Elements'
+ endif
+ exe 'source '.s:path.'/elementmacros.vim'
+ elseif a:type == 'packages'
+ if a:action == 1
+ let g:Tex_PackagesMenu = 1
+ exe 'so '.s:path.'/packages.vim'
+ exe 'amenu disable '.menuloc.'Load\ Packages\ Menu'
+ endif
+ endif
+endfunction
+
+" }}}
+
+" configuration menu.
+if g:Tex_Menus
+ exe 'amenu '.g:Tex_MainMenuLocation.'.900 '.s:mainmenuname.'Configure\ Menu.Add\ Math\ Menu :call Tex_MenuConfigure("math", 1)<cr>'
+ exe 'amenu '.g:Tex_MainMenuLocation.'.900 '.s:mainmenuname.'Configure\ Menu.Remove\ Math\ Menu :call Tex_MenuConfigure("math", 0)<cr>'
+ exe 'amenu '.g:Tex_MainMenuLocation.'.900 '.s:mainmenuname.'Configure\ Menu.Expand\ Elements :call Tex_MenuConfigure("elements", "expand")<cr>'
+ exe 'amenu '.g:Tex_MainMenuLocation.'.900 '.s:mainmenuname.'Configure\ Menu.Compress\ Elements :call Tex_MenuConfigure("elements", "nest")<cr>'
+ exe 'amenu '.g:Tex_MainMenuLocation.'.900 '.s:mainmenuname.'Configure\ Menu.Load\ Packages\ Menu :call Tex_MenuConfigure("packages", 1)<cr>'
+endif
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
diff --git a/dot_vim/ftplugin/latex-suite/texproject.vim b/dot_vim/ftplugin/latex-suite/texproject.vim
new file mode 100644
index 0000000..bed9ed3
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/texproject.vim
@@ -0,0 +1,54 @@
+"=============================================================================
+" File: texproject.vim
+" Author: Mikolaj Machowski
+" Version: 1.0
+" Created: Wen Apr 16 05:00 PM 2003
+"
+" Description: Handling tex projects.
+"=============================================================================
+
+let s:path = expand("<sfile>:p:h")
+
+command! -nargs=0 TProjectEdit :call <SID>Tex_ProjectEdit()
+
+" Tex_ProjectEdit: Edit project file " {{{
+" Description: If project file exists (*.latexmain) open it in window created
+" with ':split', if no create ':new' window and read there
+" project template
+"
+function! s:Tex_ProjectEdit()
+
+ let file = expand("%:p")
+ let mainfname = Tex_GetMainFileName()
+ if glob(mainfname.'.latexmain') != ''
+ exec 'split '.Tex_EscapeSpaces(mainfname.'.latexmain')
+ else
+ echohl WarningMsg
+ echomsg "Master file not found."
+ echomsg " :help latex-master-file"
+ echomsg "for more information"
+ echohl None
+ endif
+
+endfunction " }}}
+" Tex_ProjectLoad: loads the .latexmain file {{{
+" Description: If a *.latexmain file exists, then sources it
+function! Tex_ProjectLoad()
+ let curd = getcwd()
+ call Tex_CD(expand('%:p:h'))
+
+ if glob(Tex_GetMainFileName(':p').'.latexmain') != ''
+ call Tex_Debug("Tex_ProjectLoad: sourcing [".Tex_GetMainFileName().".latexmain]", "proj")
+ exec 'source '.Tex_GetMainFileName().'.latexmain'
+ endif
+
+ call Tex_CD(curd)
+endfunction " }}}
+
+augroup LatexSuite
+ au LatexSuite User LatexSuiteFileType
+ \ call Tex_Debug("texproject.vim: catching LatexSuiteFileType event", "proj") |
+ \ call Tex_ProjectLoad()
+augroup END
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
diff --git a/dot_vim/ftplugin/latex-suite/texrc b/dot_vim/ftplugin/latex-suite/texrc
new file mode 100644
index 0000000..79068a8
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/texrc
@@ -0,0 +1,738 @@
+"=============================================================================
+" vim:ft=vim:ts=4:sw=4:noet:fdm=marker:commentstring=\"\ %s:ff=unix
+" File: texrc.vim
+" Author: Srinath Avadhanula
+" Created: Mon Apr 01 11:00 AM 2002 PST
+" CVS: $Id: texrc 998 2006-03-20 09:52:12Z srinathava $
+"
+" Description: This file contains resource configuration information for the
+" latex-suite package.
+"
+" NOTE: Do NOT be edit this file directly:
+" this file will be over-written each time you install a new copy
+" of latex-suite.
+"
+" You can do one of the following:
+" 1. Copy this file into $VIMFILES/ftplugin/tex/texrc
+" and edit the values in that file.
+" $VIMFILES is ~/.vim for UNIX systems and ~/vimfiles for
+" WINDOWS systems.
+"
+" 2. Just set values of each setting individually in your
+" $VIMFILES/ftplugin/tex.vim file. (See above for what
+" $VIMFILES is). You will need to use :let instead of :TexLet
+" in this case.
+"
+" NOTE: This file is best viewed with Vim-6.0+ with folding turned on.
+" CVS: $Id: texrc 998 2006-03-20 09:52:12Z srinathava $
+"=============================================================================
+
+" ==============================================================================
+" SafeLet: checks for value before giving default value {{{
+" Description: The function takes in a single argument and splits it into 2
+" parts, the first being the first <CWORD> found. this is taken
+" as a variable name and the next part is assigned to it
+" depending on whether the variable already exists or not.
+" handles the case where the next part is quoted or not.
+" All these calls work:
+" TexLet g:varname = 1
+" TexLet g:varname = '1'
+" TexLet g:varname = 'foo bar'
+" TexLet g:varname = "foo\nbar"
+" TexLet g:varname = foo bar
+function! <SID>SafeLet(arg)
+ let name = matchstr(a:arg, '^\s*\zs\(\S\+\)\ze\s*=')
+ let value = matchstr(a:arg, '=\s*\zs.*\ze')
+ let value = substitute(value, '\s*$', '', '')
+ if !exists(name)
+ if value =~ "^'\\|^\""
+ exec "let ".name." = ".value
+ else
+ exe "let ".name." = value"
+ endif
+ endif
+endfunction
+com! -nargs=+ TexLet :call <SID>SafeLet(<q-args>)
+" }}}
+" ==============================================================================
+
+" ==============================================================================
+" General settings {{{
+
+TexLet g:Tex_UsePython = 1
+
+" the system command which pulls in a file.
+if &shell =~ 'sh'
+ TexLet g:Tex_CatCmd = 'cat'
+ TexLet g:Tex_RmCmd = 'rm'
+else
+ TexLet g:Tex_CatCmd = 'type'
+ TexLet g:Tex_RmCmd = 'del'
+endif
+
+" whether to turn on debugging
+TexLet g:Tex_Debug = 0
+" If non empty, all the debugging information will be written to a file of
+" this name.
+TexLet g:Tex_DebugLog = ''
+
+" }}}
+" ==============================================================================
+" Rules: specifications of programs for compiling and viewing {{{
+"
+
+" By default, when you compile a tex file using \ll, then you will be
+" generating a .dvi file. Change this line if you want to set another default.
+" NOTE: Make sure that a target for this format exists in the 'Compiler rules'
+" section below and is set up properly for your system.
+if has('macunix')
+ TexLet g:Tex_DefaultTargetFormat = 'pdf'
+else
+ TexLet g:Tex_DefaultTargetFormat = 'dvi'
+endif
+
+" A comma seperated list of formats which need multiple compilations to be
+" correctly compiled.
+TexLet g:Tex_MultipleCompileFormats = 'dvi'
+
+" Uncomment this line if you compile ps files via dvi files.
+" TexLet g:Tex_FormatDependency_ps = 'dvi,ps'
+
+" ------------------------------------------------------------------------------
+" Compiler rules {{{
+" This is the first thing you should customize. It is set up for most common
+" values, but if use some other compiler, then you will want to change this.
+" As CompileFlags value you'd perhaps like to use, e.g., '-src-specials',
+" but it is known that it can sometimes give different results in the output,
+" so use it with care.
+TexLet g:Tex_CompileRule_dvi = 'latex -interaction=nonstopmode $*'
+TexLet g:Tex_EscapeChars = '{}\'
+
+TexLet g:Tex_CompileRule_ps = 'dvips -Ppdf -o $*.ps $*.dvi'
+
+" ways to generate pdf files. there are soo many...
+" NOTE: pdflatex generates the same output as latex. therefore quickfix is
+" possible.
+TexLet g:Tex_CompileRule_pdf = 'pdflatex -interaction=nonstopmode $*'
+
+" TexLet g:Tex_CompileRule_pdf = 'ps2pdf $*.ps'
+" TexLet g:Tex_CompileRule_pdf = 'dvipdfm $*.dvi'
+" TexLet g:Tex_CompileRule_pdf = 'dvipdf $*.dvi'
+
+TexLet g:Tex_CompileRule_html = 'latex2html $*.tex'
+
+TexLet g:Tex_CompileRule_bib = g:Tex_BibtexFlavor . ' $*'
+
+" Set Tex_UseMakefile to 0 if you want to ignore the presence of a Makefile
+" when deciding how to compile
+TexLet g:Tex_UseMakefile = 1
+
+" }}}
+" ------------------------------------------------------------------------------
+" Viewer rules {{{
+" these programs are for viewing other formats.
+" NOTE: latex-suite will automatically append file.<format> to these functions
+" when calling them. The viewer therefore cannot accept arguments after
+" the filename.
+" NOTE: Windows users:
+" Set your $PATH variable to include the full path to these programs.
+if has('win32')
+ TexLet g:Tex_ViewRule_ps = 'gsview32'
+ TexLet g:Tex_ViewRule_pdf = 'AcroRd32'
+ TexLet g:Tex_ViewRule_dvi = 'yap -1'
+elseif has('macunix')
+ " Let the system pick. If you want, you can override the choice here.
+ TexLet g:Tex_ViewRule_ps = ''
+ TexLet g:Tex_ViewRule_pdf = ''
+ " TexLet g:Tex_ViewRule_pdf = 'Acrobat\ Reader\ 5.1'
+ TexLet g:Tex_ViewRule_dvi = ''
+else
+ TexLet g:Tex_ViewRule_ps = 'ghostview'
+ TexLet g:Tex_ViewRule_pdf = 'xpdf'
+ TexLet g:Tex_ViewRule_dvi = 'xdvi'
+ " the option below specifies an editor for the dvi viewer while starting
+ " up the dvi viewer according to Dimitri Antoniou's tip on vim.sf.net (tip
+ " #225)
+ TexLet g:Tex_UseEditorSettingInDVIViewer = 0
+endif
+
+" Tex_ViewRuleComplete_{format}
+"
+" If a variable like this is specified, then it takes precedence over the
+" variable with the same suffix defined above. i.e, Tex_ViewRuleComplete_dvi
+" takes precedence over Tex_ViewRule_dvi.
+"
+" If only Tex_ViewRule_{format} is specified, then latex-suite constructs the
+" actual system command which calls that program automatically. For example,
+" if you specify Tex_ViewRule_dvi = 'kdvi', then latex-suite will issue the
+" command
+" !kdvi --unique file.dvi &
+"
+" However, if your viewer program accepts the file to be viewed in a way which
+" doesn't fit with the way latex-suite constructs the system command, then
+" specify it using this variable. You can use the same format here which
+" 'makeprg' accepts. So $* can be used in place of the main file name.
+"
+" IMPORTANT: Make sure you make the process go into the background otherwise
+" vim will wait for the viewer to terminate before letting you edit
+" the file again.
+"
+" Example:
+" Suppose you have a latex->html converter which converts a file say foo.tex
+" to a file foo/index.html. Then you would use:
+"
+" let g:Tex_ViewRuleComplete_html = 'MozillaFirebird $*/index.html &'
+"
+" Doing something like this would not be possible using Tex_ViewRule_html
+TexLet g:Tex_ViewRuleComplete_dvi = ''
+
+" }}}
+" ------------------------------------------------------------------------------
+" }}}
+" ==============================================================================
+" Compiler: latex-suite comes with a customizable compiler plugin. {{{
+" :help latex-compiling for a detailed description of these options.
+"
+" this is the list of patterns which will be ignored from the compiler output.
+" This is a handy way of specifying which warnings/errors to ignore. This is a
+" list of patterns seperated by '¡'
+TexLet g:Tex_IgnoredWarnings =
+ \'Underfull'."\n".
+ \'Overfull'."\n".
+ \'specifier changed to'."\n".
+ \'You have requested'."\n".
+ \'Missing number, treated as zero.'."\n".
+ \'There were undefined references'."\n".
+ \'Citation %.%# undefined'
+
+" the 'ignore level' of the 'efm'. A value of 4 says that the first 4 kinds of
+" warnings in the list above will be ignored. Use the command TCLevel to set a
+" level dynamically.
+TexLet g:Tex_IgnoreLevel = 7
+
+" NOTE: The values of g:Tex_Flavor and g:Tex_CompilerFlags are provided as a
+" way to make compiler/tex.vim standalone. i.e independent of the rest
+" of latex-suite. These variables are NOT used if you have already
+" defined g:Tex_CompileRule_dvi above.
+"
+" specifies the current latex flavor.
+TexLet g:Tex_Flavor = 'latex'
+
+" specifies the BibTeX flavor and if necessary options. If you use $* in this
+" setting, it will be replaced by the *root* of the main file name, i.e, if
+" the main file is "thesis.tex", $* will be "thesis".
+TexLet g:Tex_BibtexFlavor = 'bibtex'
+
+" specifies the MakeIndedx flavor and if necessary options. $* will be
+" replaced by the *root* of the main file name. See above.
+TexLet g:Tex_MakeIndexFlavor = 'makeindex $*.idx'
+
+" By default the program described by g:Tex_Flavor above is called with the
+" flags '--src-specials --interaction=nonstopmode'. If your particular version
+" of latex does not accept these arguments, you will need to set this variable
+" to the appropriate value.
+" NOTE: leave commented for using the default flags.
+" TODO: Is it necessary (or even desirable) to use 2 variables to specify a
+" flavor and flags seperately? --SA
+" TexLet g:Tex_CompilerFlags = ''
+
+" If disabled (set to 0) LaTeX-Suite doesn't go immediately to warnings or
+" errors after compilation
+TexLet g:Tex_GotoError = 1
+
+" If set to 1, then latex-suite shows the context of the error in a preview
+" window beneath the window showing the actual errors.
+TexLet g:Tex_ShowErrorContext = 1
+
+" Remove temp files created during part compilations when vim exits.
+TexLet g:Tex_RemoveTempFiles = 1
+
+" }}}
+" ==============================================================================
+" Project: how to deal with multi file projects via latex-suite {{{
+
+" Use a valid vim expression here if you want to customize the way latex-suite
+" searches for a master file from within another file.
+TexLet g:Tex_MainFileExpression = ''
+
+" }}}
+" ==============================================================================
+" Macros: latex-suite comes with a large number of macros to speed up typing {{{
+" latex.
+"
+" Place Holder Options: {{{
+" (See |placeholders| for a description of what place-holders are).
+"
+" these options are actually used by imaps.vim, therefore the prefix is Imap_
+" and not Tex_. See |placeholders| for a description of how to use
+" place-holders. You can either completely disable placeholders (not
+" recommended) and/or you can change the place holder characters.
+
+TexLet g:Imap_UsePlaceHolders = 1
+TexLet g:Imap_PlaceHolderStart = '<+'
+TexLet g:Imap_PlaceHolderEnd = '+>'
+
+" This option when set to 1 makes <C-J> in insert mode delete
+" non-descriptive (empty) placeholders and enters insert mode.
+" NOTE: This option _has_ to be set in the .vimrc. Setting this in a filetype
+" plugin file such as ftplugin/tex.vim will not have any affect.
+TexLet g:Imap_DeleteEmptyPlaceHolders = 0
+
+" When set to 1, in visual mode, <C-J> takes you to the next placeholder
+" without deleting the current placeholder.
+" NOTE: This option _has_ to be set in the .vimrc. Setting this in a filetype
+" plugin file such as ftplugin/tex.vim will not have any affect.
+TexLet g:Imap_StickyPlaceHolders = 1
+
+
+" }}}
+" Menu Wizard Option: {{{
+" If the following variable is set to 1, then when an enviroment is chosen
+" from the menu then for selected environments, latex-suite asks a series of
+" questions on the command line and inserts a template with the corresponding
+" fields already filled in.
+" Setting this to zero will insert a template with |placeholders| marking off
+" the places where fields need to be filled.
+TexLet g:Tex_UseMenuWizard = 0
+
+" }}}
+" Visual Mode Mapping Correction: {{{
+" With so many visual maps, its helpful to have a way of catching typing
+" errors made in visual mode. What this does is to prompt you to correct your
+" visual mode mapping if you start out with g:Tex_Leader and then type some
+" illegal keys.
+" It basically maps just the g:Tex_Leader character to a function
+TexLet g:Tex_CatchVisMapErrors = 1
+
+" }}}
+" Diacritics: {{{
+" whether or not you want to use diacritics
+" (diacritics speed up typing some languages. the way they are set up in
+" latex-suite is
+" =char> = \'{<char>}
+" +char> = \v{<char>}
+" +} = \"a
+" :o = \^o
+" Default: 0
+TexLet g:Tex_Diacritics = 0
+
+" }}}
+" Leader Options: {{{
+" The mappings in latex-suite are by default prefixed with the back-tick
+" character. For example, `/ inserts \frac{<++>}{<++>}<++> etc. You can change the
+" prefix with the following setting.
+" ',', '/', '`' are preferred values. '' or '\' will lead to a _lot_ of
+" trouble.
+" g:Tex_Leader is also used for visual mode mappings for fonts.
+TexLet g:Tex_Leader = '`'
+
+" In order to avoid ambiguity between the large number of visual mode macros
+" provided, the visual mode macros for environments and sections start with a
+" character different from '`'.
+TexLet g:Tex_Leader2 = ','
+
+" }}}
+" Environment Macros: {{{
+" These mappings insert LaTeX "environments" such as
+" \begin{center}
+" <++>
+" \end{center}<++>
+" with the cursor left at the first place-holder.
+" (See |placeholders| for what these are.)
+" Mnemonic:
+" 1. All environment mappings begin with 'E'
+" 2. The next two capital letters are (for the common environments) the
+" first 2 letters of the environment name converted into upper case. For
+" example, for the center environment above, use ECE. There are a few
+" necessary exceptions such as:
+" equation --> EEQ
+" eqnarray --> EEA
+" Please see texmaps.vim for the complete list.
+"
+" Along with the insert mode mappings, a set of visual mode mappings is
+" provided which encloses the visually selected region in an environment.
+" These maps are related to the corresponding insert mode mappings by the
+" following rule:
+" EFI --> ,fi
+" and so on. i.e, the leading E becomes '`' and the next 2 letters are small
+" case. Some of the visual mode mappings are sensetive to whether you choose
+" line-wise or character wise. For example, if you choose a word and press
+" `ve, then you get \verb|word|, whereas if you press `ve on a line-wise
+" selection, you get:
+" \begin{verbatim}
+" line
+" \end{verbatim}
+"
+" these 2 options give finer control on which aspect of the macros you want
+" to enable.
+TexLet g:Tex_EnvironmentMaps = 1
+TexLet g:Tex_EnvironmentMenus = 1
+
+
+" }}}
+" Font Macros: {{{
+" These mappings insert font descriptions such as:
+" \textsf{<++>}<++>
+" again with the cursor at the first place-holder.
+" Mnemonic:
+" 1. first letter is always F (F for font)
+" 2. next 2 letters are the 2 letters describing the font.
+"
+" Example: the above mapping is triggered by FSF.
+"
+" Just like environment mappings, you can visually select an area and press
+" `sf to have it enclosed in:
+" \textsf{word}
+" or
+" {\sffamily
+" line
+" }
+" depending on character-wise or line-wise selection.
+TexLet g:Tex_FontMaps = 1
+TexLet g:Tex_FontMenus = 1
+
+" }}}
+" Section Macros: {{{
+" Inserts LaTeX sections:
+" \section
+" etc. Just as in the case of environments and fonts, can be enclosed with a
+" visual selection. The enclosing is not sensetive to character or line-wise
+" selection.
+" NOTE: In visual mode, you are supposed to select the name of the section
+" etc, not the whole section.
+" In the following case, select just the first line, not lines 1-3.
+" 1 section name
+" 2 some lines in this section
+" 3 and some more lines
+" Mnemonic: (make your own!)
+" SPA for part
+" SCH for chapter
+" SSE for section
+" SSS for subsection
+" SS2 for subsubsection
+" SPG for paragraph
+" SSP for subparagraph
+TexLet g:Tex_SectionMaps = 1
+TexLet g:Tex_SectionMenus = 1
+
+" }}}
+" Auctex Style Mappings: {{{
+" Auctex.vim has heavily inspired various portions of latex-suite providing
+" various new ways of conviniently inserting environments.
+"
+" If you press <F5> in the insert mode while on an empty line, latex-suite
+" prompts you with a list of environments you might want to insert. You can
+" either choose one from the list or type in a new environment name.
+" The variable below (which is a comma seperated list of environment names)
+" decides the prompt which latex-suite generates.
+" You can place as many items as you want here. If the environment name is a
+" standard latex environment such as table or figure, then latex-suite will
+" insert a template with additional fields, if not, just a bare bones
+" \begin{env}
+" <++>
+" \end{env}
+" is inserted.
+" \[ and $$ are also recognized.
+" NOTE: Setting this variable to the empty string is a way of leaving the
+" <F5> key unmapped
+
+TexLet g:Tex_PromptedEnvironments =
+ \ 'eqnarray*,eqnarray,equation,equation*,\[,$$,align,align*'
+
+" Another quick way of inserting environments is to press one of the shifted
+" function keys from <F1> through <F4>.
+" Each environment in the following list is mapped to a corresponding shifted
+" function key.
+" NOTE: Setting this variable to the empty string is a way of leaving all the
+" shifted function keys untouched by latex-suite.
+" NOTE: Only the first 4 items of the list are used. The rest will be silently
+" ignored.
+" The number of items in this list decides how many shifted function keys are
+" mapped.
+TexLet g:Tex_HotKeyMappings =
+ \ 'eqnarray*,eqnarray,bmatrix'
+
+" Similar to above mechanisms works <F7> key. It prompts for command with list
+" of commands from g:Tex_PromptedCommands. There are not HotKeys for commands.
+" It works for commands of style \com{}. Changing of current command is done
+" with <S-F7>
+
+TexLet g:Tex_PromptedCommands =
+ \ 'footnote,cite,pageref,label'
+
+" }}}
+" Smart Key Mappings: {{{
+" Latex-suite shites with a number of 'smart' maps, where the behavior of
+" standard keys is modified in a way which makes editing tex files easy.
+
+" Pressing <BS> in insert mode checks to see whether we are just after
+" something like \'{a} and if so, deletes all of it. i.e, diacritics are
+" treated as single characters for backspacing.
+" Setting this to zero will leave the <BS> key unmapped.
+" Default: 1
+TexLet g:Tex_SmartKeyBS = 1
+" The pattern used to detect whether the previous characters comprise a
+" diacritic character. This default pattern detects the standard LaTeX
+" diacritics
+TexLet g:Tex_SmartBSPattern =
+ \ '\(' .
+ \ "\\\\[\"^'=v]{\\S}" . '\|' .
+ \ "\\\\[\"^'=]\\S" . '\|' .
+ \ '\\v \S' . '\|' .
+ \ "\\\\[\"^'=v]{\\\\[iI]}" . '\|' .
+ \ '\\v \\[iI]' . '\|' .
+ \ '\\q \S' . '\|' .
+ \ '\\-' .
+ \ '\)' . "$"
+
+" Pressing " (english double quote) will insert `` or '' by making an
+" intelligent guess about whether we intended to open or close a quote.
+" Default: 1
+TexLet g:Tex_SmartKeyQuote = 1
+
+" Users of other languages might want to change the quote characters to suit
+" their locale. These global values will be ignored if there are buffer-local
+" versions, which may be set in the language-specific package files, such as
+" ftplugin/latex-suite/packages/german
+TexLet g:Tex_SmartQuoteOpen = "``"
+TexLet g:Tex_SmartQuoteClose = "''"
+
+" Latex-suite maps the <space> key in such a way that $ characters are not
+" broken across lines.
+" NOTE: Setting this to 1 has the side-effect of making the 'tw' setting be 0.
+" Default:
+TexLet g:Tex_SmartKeySpace = 0
+
+" Pressing ... (3 dots) results in \ldots outside math mode and \cdots in math
+" mode.
+"
+" TODO: Make it more intelligent within math mode. For example
+" $1+...+3$ should expand to $1+\cdots+n$, whereas $1,...,n$ should expand
+" to $1,\ldots,n$. The amsmath package actually provides a command \dots
+" which does this. Maybe use that if amsmath is detected?
+" Default: 1
+TexLet g:Tex_SmartKeyDot = 1
+
+" }}}
+" Advanced Math: {{{
+" These mappings allow for fast inserting of math constructions
+" brackets, better handling of space in math mode, unfortunately
+" they use <M-> mappings which conflicts with some encodings. This is easy way
+" of turning them off.
+"
+" <M-b> encloses the previous character in \mathbf{}
+" <M-c> is polymorphic as follows:
+" Insert mode:
+" 1. If the previous character is a letter or number, then capitalize it and
+" enclose it in \mathcal{}
+" 2. otherwise insert \cite{}
+" Visual Mode:
+" 1. Enclose selection in \mathcal{}
+" <M-l> is also polymorphic as follows:
+" If the character before typing <M-l> is one of '([{|<q', then do the
+" following:
+" 1. (<M-l> \left(\right
+" similarly for [, |
+" {<M-l> \left\{\right\}
+" 2. <<M-l> \langle\rangle
+" 3. q<M-l> \lefteqn{}
+" otherwise insert \label{}
+" <M-i> inserts \item commands at the current cursor location depending on
+" the surrounding environment. For example, inside itemize, it will
+" insert a simple \item, but within a description, it will insert
+" \item[<+label+>] etc.
+"
+" Default: 1
+TexLet g:Tex_AdvancedMath = 1
+
+" }}}
+
+" }}}
+" ==============================================================================
+" TeX Completion: {{{
+
+" Options for controlling the window sizes of the completion windows {{{
+
+" The height of the window which contains the \label's (when completing a
+" \ref) or bibtex entries (when completing a \cite). This option is used in
+" the newer methods of completing \ref's and \cite's.
+TexLet g:Tex_OutlineWindowHeight = 15
+
+" Options for preview window for ref/cite completion. The next two options
+" are used only when g:Tex_UseOutlineCompletion = 0 or
+" g:Tex_UseCiteCompletionVer2 = 0, i.e, when we use a classic method of
+" completing \refs and \cites.
+" Height of cwindow
+TexLet g:Tex_ViewerCwindowHeight = 5
+" Height of preview window
+TexLet g:Tex_ViewerPreviewHeight = 10
+
+" Options for explorer completion.
+" Height of explorer window
+TexLet g:Tex_ExplorerHeight = 10
+
+" Directory for images. Read |latex-completion-explorer| before changing
+TexLet g:Tex_ImageDir = ''
+
+" }}}
+" Options for completing a \ref {{{
+
+" Whether to use the "outline mode" for displaying the \label's while doing
+" \ref completion. In this mode, each label is displayed within the
+" document element it resides in. The entire thing is folded to ease
+" navigation. Should be easier/faster than the classical mode.
+TexLet g:Tex_UseOutlineCompletion = 1
+
+" This option should be set via the .latexmain file. It should be a newline
+" seperated list of files which make up all the "source" files in the
+" current project. This enables latex-suite to skip the more complicated
+" algorithm of finding the source files by recursively searching for
+" \input'ed files from the |latex-master-file|.
+"
+" Only used when g:Tex_UseOutlineCompletion = 0.
+TexLet g:Tex_ProjectSourceFiles = ''
+
+" Whether latex-suite simply searches for \\label's in all the .tex file
+" found in the current directory or whether it will use a more complex
+" algorithm. This is used only g:Tex_UseOutlineCompletion = 0 and
+" g:Tex_ProjectSourceFiles = ''.
+" See
+" :help Tex_UseSimpleLabelSearch
+" for more information
+TexLet g:Tex_UseSimpleLabelSearch = 0
+
+" }}}
+" Options for completing a \cite'ation {{{
+
+" If set to 1, then the newer way of presenting the bibtex entries is used.
+" Instead of a |cwindow| showing just the keys and a synced |preview|
+" window beneath, show a single window containing a nicely formatted list
+" of bibtex entries. This should be faster and easier to use than the
+" classic mode
+TexLet g:Tex_UseCiteCompletionVer2 = 1
+
+" This is a string which is displayed to the user when he wants to sort or
+" filter the bibtex entries. This string also serves to define acronyms for
+" the various fields of a bibtex entry.
+TexLet g:Tex_BibFieldPrompt =
+ \ "Field acronyms: (`:let g:Tex_EchoBibFields = 0` to avoid this message)\n" .
+ \ " [t] title [a] author [b] booktitle \n" .
+ \ " [j] journal [y] year [p] bibtype \n" .
+ \ " (you can also enter the complete field name) \n"
+
+" Whether or not to display the string above to aid the user in choosing
+" the field to filter/sort with.
+TexLet g:Tex_EchoBibFields = 1
+
+" A setting of this form defines the letter 'a' as standing for the field
+" 'author'. Thus when the user types
+" a ellington
+" when asked to enter a filter, it is equivalent to the user specifying the
+" filter
+" author ellington
+" TexLet g:Tex_BibAcronym_a = 'author'
+
+" Whether or not to use Jabref to complete citations
+" See
+" :help latex-suite-jabref
+" for more infomration
+TexLet g:Tex_UseJabref = 0
+
+" whether or not searches for \cite's are cached.
+TexLet g:Tex_RememberCiteSearch = 0
+" Paths to the bibliography files and custom packages.
+TexLet g:Tex_BIBINPUTS = ''
+TexLet g:Tex_TEXINPUTS = ''
+
+" }}}
+
+" }}}
+" ==============================================================================
+" Menus: set the kinds of menus which you would like to see. {{{
+"
+" Setting this variable to zero will immediately disable _all_ menus.
+" for finer control set this to 1 and then play with the other options.
+" Default: 1
+TexLet g:Tex_Menus = 1
+
+" The location of the main menu
+TexLet g:Tex_MainMenuLocation = 80
+
+" Math contains a large number of tex math elemets such as arrows,
+" mathematical fonts (\mathrm), mathematical diacritics (\dot), binary
+" relational operators etc. This menu compromises about 75% of the menus.
+" Default: 1
+TexLet g:Tex_MathMenus = 1
+
+" The following options control the "compactness" of the menus.
+"
+" Setting this option to 1 makes the Font, Counter and Dimensioning menus to
+" be collected together into a single 'Tex-Elements' menu. Setting this to 0
+" creates seperate menus for each of them.
+" Default: 1
+TexLet g:Tex_NestElementMenus = 1
+
+" Sometimes when you are using a lot of packages with lots of options etc,
+" then a lot of time might be spent at startup loading the menus.
+" Setting the following variable to 0 will stop autoloading the packages menu.
+" You can still goto TeX-Suite.Configure Menu and load this after startup.
+" Default: 1
+TexLet g:Tex_PackagesMenu = 1
+" The following option will create the packages option within the TeX-Suite
+" menu.
+" Default: 1
+TexLet g:Tex_NestPackagesMenu = 1
+
+" This is the prefix added to the menu names created by latex suite. Add a
+" dot to the following option to nest the menus under the menu name before the
+" dot.
+" NOTE: With a '.' as the last character of the following setting, every
+" single menu created by latex suite will be nested under the same menu.
+" Default: 'TeX-'
+TexLet g:Tex_MenuPrefix = 'TeX-'
+
+" Use utf-8 menus. There is plenty of math symbols in LaTeX. It is hard to
+" remember them. You can display them with utf-8. Your system/GUI interface
+" have to support utf-8. This addition is necessary for resetting 'encoding'.
+TexLet g:Tex_UseUtfMenus = 0
+
+if g:Tex_UseUtfMenus != 0 && has("gui_running")
+ set encoding=utf-8
+endif
+
+" }}}
+" ==============================================================================
+" Folding: latex-suite comes with 'fake' syntax folding. {{{
+"
+" specifies whether the MakeTeXFolds() function will be defined. If this is
+" set to zero, then esentially you have disabled all of latex-suite's folding
+" functions. no maps for refreshing folds will be set up etc.
+" NOTE: However, the function TexFoldTextFunction() is still avaiable
+" and 'foldexpr' is set to point to it. This is so you can continue
+" using another folding scheme but still use the fold text function.
+TexLet g:Tex_Folding = 1
+
+" specifies whether a latex file is automatically folded up when opened.
+" Setting this to zero means that a file is not folded up as soon as its
+" opened.
+" NOTE: the MakeTeXFolds() function will still be available (unless disabled
+" by g:Tex_Folding), so you can do <F6> or \rf to refresh/create folds.
+TexLet g:Tex_AutoFolding = 1
+
+" }}}
+" ==============================================================================
+" Taglist: Support for taglist.vim {{{
+"
+" LaTeX-Suite offers now support for taglist.vim, the most popular Vim
+" interface for ctags. You should use ctags version >= 5.0 and taglist >= 3.0.
+TexLet g:Tex_TaglistSupport = 1
+
+" This option turns on definition of tags for LaTeX.
+" NOTE: In taglist window you may see duplicate entries for the same tag. It
+" means some definitions are repeated somewhere else. You can turn off
+" internal definitions or remove external (read ctags description
+" where).
+TexLet g:Tex_InternalTagsDefinitions = 1
+
+" }}}
+" ==============================================================================
diff --git a/dot_vim/ftplugin/latex-suite/texviewer.vim b/dot_vim/ftplugin/latex-suite/texviewer.vim
new file mode 100644
index 0000000..4dc8861
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/texviewer.vim
@@ -0,0 +1,1052 @@
+" ============================================================================
+" File: texviewer.vim
+" Author: Mikolaj Machowski
+" Created: Sun Jan 26 06:00 PM 2003
+" Description: make a viewer for various purposes: \cite{, \ref{
+" License: Vim Charityware License
+" Part of vim-latexSuite: http://vim-latex.sourceforge.net
+" CVS: $Id: texviewer.vim 1004 2006-03-25 08:40:15Z srinathava $
+" ============================================================================
+" Tex_SetTexViewerMaps: sets maps for this ftplugin {{{
+function! Tex_SetTexViewerMaps()
+ inoremap <silent> <Plug>Tex_Completion <Esc>:call Tex_Complete("default","text")<CR>
+ if !hasmapto('<Plug>Tex_Completion', 'i')
+ if has('gui_running')
+ imap <buffer> <silent> <F9> <Plug>Tex_Completion
+ else
+ imap <buffer> <F9> <Plug>Tex_Completion
+ endif
+ endif
+endfunction
+
+augroup LatexSuite
+ au LatexSuite User LatexSuiteFileType
+ \ call Tex_Debug('texviewer.vim: Catching LatexSuiteFileType event', 'view') |
+ \ call Tex_SetTexViewerMaps()
+augroup END
+
+command -nargs=1 TLook call Tex_Complete(<q-args>, 'tex')
+command -nargs=1 TLookAll call Tex_Complete(<q-args>, 'all')
+command -nargs=1 TLookBib call Tex_Complete(<q-args>, 'bib')
+
+" }}}
+
+" ==============================================================================
+" Main completion function
+" ==============================================================================
+" Tex_Complete: main function {{{
+" Description:
+function! Tex_Complete(what, where)
+
+ " Get info about current window and position of cursor in file
+ let s:winnum = winnr()
+
+ " Change to the directory of the file being edited before running all the
+ " :grep commands. We will change back to the original directory after we
+ " finish with the grep.
+ let s:origdir = getcwd()
+ cd %:p:h
+
+ let s:pos = line('.').' | normal! '.virtcol('.').'|'
+
+ unlet! s:type
+ unlet! s:typeoption
+
+ if Tex_GetVarValue('Tex_WriteBeforeCompletion') == 1
+ wall
+ endif
+
+ if a:where == "text"
+ " What to do after <F9> depending on context
+ let s:curfile = expand("%:p")
+ let s:curline = strpart(getline('.'), 0, col('.'))
+ let s:prefix = matchstr(s:curline, '.*{\zs.\{-}\(}\|$\)')
+ " a command is of the type
+ " \psfig[option=value]{figure=}
+ " Thus
+ " s:curline = '\psfig[option=value]{figure='
+ " (with possibly some junk before \psfig)
+ " from which we need to extract
+ " s:type = 'psfig'
+ " s:typeoption = '[option=value]'
+ let pattern = '.*\\\(\w\{-}\)\(\[.\{-}\]\)\?{\(\S\+\)\?$'
+ if s:curline =~ pattern
+ let s:type = substitute(s:curline, pattern, '\1', 'e')
+ let s:typeoption = substitute(s:curline, pattern, '\2', 'e')
+ call Tex_Debug('Tex_Complete: s:type = '.s:type.', typeoption = '.s:typeoption, 'view')
+ endif
+
+ if exists("s:type") && s:type =~ 'ref'
+ if Tex_GetVarValue('Tex_UseOutlineCompletion') == 1
+ call Tex_Debug("Tex_Complete: using outline search method", "view")
+ call Tex_StartOutlineCompletion()
+
+ elseif Tex_GetVarValue('Tex_UseSimpleLabelSearch') == 1
+ call Tex_Debug("Tex_Complete: searching for \\labels in all .tex files in the present directory", "view")
+ call Tex_Debug("Tex_Complete: silent! grep! ".Tex_EscapeForGrep('\\label{'.s:prefix)." *.tex", 'view')
+ call Tex_Grep('\\label{'.s:prefix, '*.tex')
+ call <SID>Tex_SetupCWindow()
+
+ elseif Tex_GetVarValue('Tex_ProjectSourceFiles') != ''
+ call Tex_Debug('Tex_Complete: searching for \\labels in all Tex_ProjectSourceFiles', 'view')
+ call Tex_CD(Tex_GetMainFileName(':p:h'))
+ call Tex_Grep('\\label{'.s:prefix, Tex_GetVarValue('Tex_ProjectSourceFiles'))
+ call <SID>Tex_SetupCWindow()
+
+ else
+ call Tex_Debug("Tex_Complete: calling Tex_GrepHelper", "view")
+ silent! grep! ____HIGHLY_IMPROBABLE___ %
+ call Tex_GrepHelper(s:prefix, 'label')
+ call <SID>Tex_SetupCWindow()
+ endif
+
+ redraw!
+
+ elseif exists("s:type") && s:type =~ 'cite'
+
+ let s:prefix = matchstr(s:prefix, '\([^,]\+,\)*\zs\([^,]\+\)\ze$')
+ call Tex_Debug(":Tex_Complete: using s:prefix = ".s:prefix, "view")
+
+ if has('python') && Tex_GetVarValue('Tex_UsePython')
+ \ && Tex_GetVarValue('Tex_UseCiteCompletionVer2') == 1
+
+ call Tex_CD(s:origdir)
+ silent! call Tex_StartCiteCompletion()
+
+ elseif Tex_GetVarValue('Tex_UseJabref') == 1
+
+ call Tex_CD(s:origdir)
+ let g:Remote_WaitingForCite = 1
+ let citation = input('Enter citation from jabref (<enter> to leave blank): ')
+ let g:Remote_WaitingForCite = 0
+ call Tex_CompleteWord(citation)
+
+ else
+ " grep! nothing %
+ " does _not_ clear the search history contrary to what the
+ " help-docs say. This was expected. So use something improbable.
+ " TODO: Is there a way to clear the search-history w/o making a
+ " useless, inefficient search?
+ silent! grep! ____HIGHLY_IMPROBABLE___ %
+ if g:Tex_RememberCiteSearch && exists('s:citeSearchHistory')
+ call <SID>Tex_SetupCWindow(s:citeSearchHistory)
+ else
+ call Tex_GrepHelper(s:prefix, 'bib')
+ redraw!
+ call <SID>Tex_SetupCWindow()
+ endif
+ if g:Tex_RememberCiteSearch && &ft == 'qf'
+ let _a = @a
+ silent! normal! ggVG"ay
+ let s:citeSearchHistory = @a
+ let @a = _a
+ endif
+ endif
+
+ elseif exists("s:type") && (s:type =~ 'includegraphics' || s:type == 'psfig')
+ call Tex_SetupFileCompletion(
+ \ '',
+ \ '^\.\\|\.tex$\\|\.bib$\\|\.bbl$\\|\.zip$\\|\.gz$',
+ \ 'noext')
+
+ elseif exists("s:type") && s:type == 'bibliography'
+ call Tex_SetupFileCompletion(
+ \ '\.b..$',
+ \ '',
+ \ 'noext')
+
+ elseif exists("s:type") && s:type =~ 'include\(only\)\='
+ call Tex_SetupFileCompletion(
+ \ '\.t..$',
+ \ '',
+ \ 'noext')
+
+ elseif exists("s:type") && s:type == 'input'
+ call Tex_SetupFileCompletion(
+ \ '',
+ \ '',
+ \ 'ext')
+
+ elseif exists('s:type') && exists("g:Tex_completion_".s:type)
+ call <SID>Tex_CompleteRefCiteCustom('plugin_'.s:type)
+
+ else
+ let s:word = expand('<cword>')
+ if s:word == ''
+ if col('.') == strlen(getline('.'))
+ startinsert!
+ return
+ else
+ normal! l
+ startinsert
+ return
+ endif
+ endif
+ call Tex_Debug("silent! grep! ".Tex_EscapeForGrep('\<'.s:word.'\>')." *.tex", 'view')
+ call Tex_Grep('\<'.s:word.'\>', '*.tex')
+
+ call <SID>Tex_SetupCWindow()
+ endif
+
+ elseif a:where == 'tex'
+ " Process :TLook command
+ call Tex_Grep(a:what, "*.tex")
+ call <SID>Tex_SetupCWindow()
+
+ elseif a:where == 'bib'
+ " Process :TLookBib command
+ call Tex_Grep(a:what, "*.bib")
+ call Tex_Grepadd(a:what, "*.bbl")
+ call <SID>Tex_SetupCWindow()
+
+ elseif a:where == 'all'
+ " Process :TLookAll command
+ call Tex_Grep(a:what, "*")
+ call <SID>Tex_SetupCWindow()
+ endif
+
+endfunction
+" }}}
+" Tex_CompleteWord: inserts a word at the chosen location {{{
+" Description: This function is meant to be called when the user press
+" ``<enter>`` in one of the [Error List] windows which shows the list of
+" matches. completeword is the rest of the word which needs to be inserted.
+function! Tex_CompleteWord(completeword)
+ exe s:pos
+
+ " Complete word, check if add closing }
+ exe 'normal! a'.a:completeword."\<Esc>"
+
+ if getline('.')[col('.')-1] !~ '{' && getline('.')[col('.')] !~ '}'
+ exe "normal! a}\<Esc>"
+ endif
+
+ " Return to Insert mode
+ if col('.') == strlen(getline('.'))
+ startinsert!
+ else
+ normal! l
+ startinsert
+ endif
+endfunction " }}}
+
+" ==============================================================================
+" File name completion helper functons
+" ==============================================================================
+" Tex_SetupFileCompletion: {{{
+" Description:
+function! Tex_SetupFileCompletion(accept, reject, ext)
+ call FB_SetVar('FB_AllowRegexp', a:accept)
+ call FB_SetVar('FB_RejectRegexp', a:reject)
+ call FB_SetVar('FB_CallBackFunction', 'Tex_CompleteFileName')
+ call FB_SetVar('FB_CallBackFunctionArgs', '"'.a:ext.'"')
+
+ call FB_OpenFileBrowser('.')
+endfunction " }}}
+" Tex_CompleteFileName: {{{
+" Description:
+function! Tex_CompleteFileName(filename, ext)
+ call Tex_Debug('+Tex_CompleteFileName: getting filename '.a:filename, 'view')
+
+ if a:ext == 'noext'
+ let completeword = fnamemodify(a:filename, ':r')
+ endif
+ let completeword = Tex_RelPath(completeword, Tex_GetMainFileName(':p:h'))
+
+ call Tex_Debug(":Tex_CompleteFileName: completing with ".completeword, "view")
+ call Tex_CompleteWord(completeword)
+endfunction " }}}
+" Tex_Common: common part of strings {{{
+function! s:Tex_Common(path1, path2)
+ " Assume the caller handles 'ignorecase'
+ if a:path1 == a:path2
+ return a:path1
+ endif
+ let n = 0
+ while a:path1[n] == a:path2[n]
+ let n = n+1
+ endwhile
+ return strpart(a:path1, 0, n)
+endfunction " }}}
+" Tex_NormalizePath: {{{
+" Description:
+function! Tex_NormalizePath(path)
+ let retpath = a:path
+ if has("win32") || has("win16") || has("dos32") || has("dos16")
+ let retpath = substitute(retpath, '\\', '/', 'ge')
+ endif
+ if isdirectory(retpath) && retpath !~ '/$'
+ let retpath = retpath.'/'
+ endif
+ return retpath
+endfunction " }}}
+" Tex_RelPath: ultimate file name {{{
+function! Tex_RelPath(explfilename,texfilename)
+ let path1 = Tex_NormalizePath(a:explfilename)
+ let path2 = Tex_NormalizePath(a:texfilename)
+
+ let n = matchend(<SID>Tex_Common(path1, path2), '.*/')
+ let path1 = strpart(path1, n)
+ let path2 = strpart(path2, n)
+ if path2 !~ '/'
+ let subrelpath = ''
+ else
+ let subrelpath = substitute(path2, '[^/]\{-}/', '../', 'ge')
+ let subrelpath = substitute(subrelpath, '[^/]*$', '', 'ge')
+ endif
+ let relpath = subrelpath.path1
+ return escape(Tex_NormalizePath(relpath), ' ')
+endfunction " }}}
+
+" ==============================================================================
+" Helper functions for dealing with the 'quickfix' and 'preview' windows.
+" ==============================================================================
+" Tex_SetupCWindow: set maps and local settings for cwindow {{{
+" Description: Set local maps jkJKq<cr> for cwindow. Also size and basic
+" settings
+"
+function! s:Tex_SetupCWindow(...)
+ call Tex_Debug('+Tex_SetupCWindow', 'view')
+ cclose
+ exe 'copen '. g:Tex_ViewerCwindowHeight
+ " If called with an argument, it means we want to re-use some search
+ " history from last time. Therefore, just paste it here and proceed.
+ if a:0 == 1
+ set modifiable
+ % d _
+ silent! 0put!=a:1
+ $ d _
+ endif
+ setlocal nonumber
+ setlocal nowrap
+
+ let s:scrollOffVal = &scrolloff
+ call <SID>Tex_SyncPreviewWindow()
+
+ " If everything went well, then we should be situated in the quickfix
+ " window. If there were problems, (no matches etc), then we will not be.
+ " Therefore return.
+ if &ft != 'qf'
+ call Tex_Debug('not in quickfix window, quitting', 'view')
+ return
+ endif
+
+ nnoremap <buffer> <silent> j j:call <SID>Tex_SyncPreviewWindow()<CR>
+ nnoremap <buffer> <silent> k k:call <SID>Tex_SyncPreviewWindow()<CR>
+ nnoremap <buffer> <silent> <up> <up>:call <SID>Tex_SyncPreviewWindow()<CR>
+ nnoremap <buffer> <silent> <down> <down>:call <SID>Tex_SyncPreviewWindow()<CR>
+
+ " Change behaviour of <cr> only for 'ref' and 'cite' context.
+ if exists("s:type") && s:type =~ 'ref\|cite'
+ exec 'nnoremap <buffer> <silent> <cr> '
+ \ .':set scrolloff='.s:scrollOffVal.'<CR>'
+ \ .':cd '.s:origdir.'<CR>'
+ \ .':silent! call <SID>Tex_CompleteRefCiteCustom("'.s:type.'")<CR>'
+
+ else
+ " In other contexts jump to place described in cwindow and close small
+ " windows
+ exec 'nnoremap <buffer> <silent> <cr> '
+ \ .':set scrolloff='.s:scrollOffVal.'<CR>'
+ \ .':cd '.s:origdir.'<CR>'
+ \ .':call <SID>Tex_GoToLocation()<cr>'
+
+ endif
+
+ " Scroll the preview window while in the quickfix window
+ nnoremap <buffer> <silent> J :wincmd j<cr><c-e>:wincmd k<cr>
+ nnoremap <buffer> <silent> K :wincmd j<cr><c-y>:wincmd k<cr>
+
+ " Exit the quickfix window without doing anything.
+ exe 'nnoremap <buffer> <silent> q '
+ \ .':set scrolloff='.s:scrollOffVal.'<CR>'
+ \ .':cd '.s:origdir.'<CR>'
+ \ .':call Tex_CloseSmallWindows()<CR>'
+
+endfunction " }}}
+" Tex_CompleteRefCiteCustom: complete/insert name for current item {{{
+" Description: handle completion of items depending on current context
+"
+function! s:Tex_CompleteRefCiteCustom(type)
+
+ if a:type =~ 'cite'
+ if getline('.') =~ '\\bibitem{'
+ let bibkey = matchstr(getline('.'), '\\bibitem{\zs.\{-}\ze}')
+ else
+ let bibkey = matchstr(getline('.'), '{\zs.\{-}\ze\(,\|$\)')
+ endif
+ let completeword = strpart(bibkey, strlen(s:prefix))
+
+ elseif a:type =~ 'ref'
+ let label = matchstr(getline('.'), '\\label{\zs.\{-}\ze}')
+ let completeword = strpart(label, strlen(s:prefix))
+
+ elseif a:type =~ '^plugin_'
+ let type = substitute(a:type, '^plugin_', '', '')
+ let completeword = <SID>Tex_DoCompletion(type)
+
+ endif
+
+ call Tex_CloseSmallWindows()
+ call Tex_Debug(":Tex_CompleteRefCiteCustom: completing with ".completeword, "view")
+ call Tex_CompleteWord(completeword)
+endfunction " }}}
+" Tex_SyncPreviewWindow: synchronize quickfix and preview window {{{
+" Description: Usually quickfix engine takes care about most of these things
+" but we discard it for better control of events.
+"
+function! s:Tex_SyncPreviewWindow()
+ call Tex_Debug('+Tex_SyncPreviewWindow', 'view')
+
+ let viewfile = matchstr(getline('.'), '^\f*\ze|\d')
+ let viewline = matchstr(getline('.'), '|\zs\d\+\ze')
+
+ " Hilight current line in cwindow
+ " Normally hightlighting is done with quickfix engine but we use something
+ " different and have to do it separately
+ syntax clear
+ runtime syntax/qf.vim
+ exe 'syn match vTodo /\%'. line('.') .'l.*/'
+ hi link vTodo Todo
+
+ " Close preview window and open it again in new place
+ pclose
+ exe 'silent! bot pedit +'.viewline.' '.viewfile
+
+ " Vanilla 6.1 has bug. This additional setting of cwindow height prevents
+ " resizing of this window
+ exe g:Tex_ViewerCwindowHeight.' wincmd _'
+
+ " Handle situation if there is no item beginning with s:prefix.
+ " Unfortunately, because we know it late we have to close everything and
+ " return as in complete process
+ if v:errmsg =~ 'E32\>'
+ exe s:winnum.' wincmd w'
+ pclose!
+ cclose
+ if exists("s:prefix")
+ echomsg 'No bibkey, label or word beginning with "'.s:prefix.'"'
+ endif
+ if col('.') == strlen(getline('.'))
+ startinsert!
+ else
+ normal! l
+ startinsert
+ endif
+ let v:errmsg = ''
+ call Tex_Debug('Tex_SyncPreviewWindow: got error E32, no matches found, quitting', 'view')
+ return 0
+ endif
+
+ " Move to preview window. Really is it under cwindow?
+ wincmd j
+
+ " Settings of preview window
+ exe g:Tex_ViewerPreviewHeight.' wincmd _'
+ setlocal nofoldenable
+
+ if exists('s:type') && s:type =~ 'cite'
+ " In cite context place bibkey at the top of preview window.
+ setlocal scrolloff=0
+ normal! zt
+ else
+ " In other contexts in the middle. Highlight this line?
+ setlocal scrolloff=100
+ normal! z.
+ endif
+
+ " Return to cwindow
+ wincmd p
+
+endfunction " }}}
+" Tex_CloseSmallWindows: {{{
+" Description:
+"
+function! Tex_CloseSmallWindows()
+ exe s:winnum.' wincmd w'
+ pclose!
+ cclose
+ exe s:pos
+endfunction " }}}
+" Tex_GoToLocation: Go to chosen location {{{
+" Description: Get number of current line and go to this number
+"
+function! s:Tex_GoToLocation()
+ pclose!
+ let errmsg = v:errmsg
+ let v:errmsg = ''
+ exe 'silent! cc ' . line('.')
+ " If the current buffer is modified, then split
+ if v:errmsg =~ '^E37:'
+ split
+ exe 'silent! cc ' . line('.')
+ endif
+ cclose
+ let v:errmsg = errmsg
+endfunction " }}}
+
+" ==============================================================================
+" Functions for finding \\label's or \\bibitem's in the main file.
+" ==============================================================================
+" Tex_GrepHelper: grep main filename for \\bibitem's or \\label's {{{
+" Description:
+function! Tex_GrepHelper(prefix, what)
+ let _path = &path
+ let _suffixesadd = &suffixesadd
+ let _hidden = &hidden
+
+ let mainfname = Tex_GetMainFileName(':p')
+ " If we are already editing the file, then use :split without any
+ " arguments so it works even if the file is modified.
+ " FIXME: If mainfname is being presently edited in another window and
+ " is 'modified', then the second split statement will not work.
+ " We will need to travel to that window and back.
+ if mainfname == expand('%:p')
+ split
+ else
+ exec 'split '.Tex_EscapeSpaces(mainfname)
+ endif
+
+ let pos = line('.').'| normal! '.virtcol('.').'|'
+ if a:what =~ 'bib'
+ call Tex_ScanFileForCite(a:prefix)
+ else
+ call Tex_ScanFileForLabels(a:prefix)
+ endif
+ exec pos
+
+ q
+ let &path = _path
+ let &suffixesadd = _suffixesadd
+
+endfunction " }}}
+" Tex_ScanFileForCite: search for \bibitem's in .bib or .bbl or tex files {{{
+" Description:
+" Search for bibliographic entries in the presently edited file in the
+" following manner:
+" 1. First see if the file has a \bibliography command.
+" If YES:
+" 1. If a .bib file corresponding to the \bibliography command can be
+" found, then search for '@.*'.a:prefix inside it.
+" 2. Otherwise, if a .bbl file corresponding to the \bibliography command
+" can be found, then search for '\bibitem'.a:prefix inside it.
+" 2. Next see if the file has a \thebibliography environment
+" If YES:
+" 1. Search for '\bibitem'.a:prefix in this file.
+"
+" If neither a \bibliography or \begin{thebibliography} are found, then repeat
+" steps 1 and 2 for every file \input'ed into this file. Abort any searching
+" as soon as the first \bibliography or \begin{thebibliography} is found.
+function! Tex_ScanFileForCite(prefix)
+ call Tex_Debug('+Tex_ScanFileForCite: searching for bibkeys in '.bufname('%').' (buffer #'.bufnr('%').')', 'view')
+ let presBufNum = bufnr('%')
+
+ let foundCiteFile = 0
+ " First find out if this file has a \bibliography command in it. If so,
+ " assume that this is the only file in the project which defines a
+ " bibliography.
+ if search('\\\(no\)\?bibliography{', 'w')
+ call Tex_Debug('Tex_ScanFileForCite: found bibliography command in '.bufname('%'), 'view')
+ " convey that we have found a bibliography command. we do not need to
+ " proceed any further.
+ let foundCiteFile = 1
+
+ " extract the bibliography filenames from the command.
+ let bibnames = matchstr(getline('.'), '\\\(no\)\?bibliography{\zs.\{-}\ze}')
+ let bibnames = substitute(bibnames, '\s', '', 'g')
+
+ call Tex_Debug('trying to search through ['.bibnames.']', 'view')
+
+ let &path = '.,'.g:Tex_BIBINPUTS
+
+ let i = 1
+ while 1
+ let bibname = Tex_Strntok(bibnames, ',', i)
+ if bibname == ''
+ break
+ endif
+
+ " first try to find if a .bib file exists. If so do not search in
+ " the corresponding .bbl file. (because the .bbl file will most
+ " probly be generated automatically from the .bib file with
+ " bibtex).
+
+ let fname = Tex_FindFile(bibname, '.,'.g:Tex_BIBINPUTS, '.bib')
+ if fname != ''
+ call Tex_Debug('finding .bib file ['.bufname('%').']', 'view')
+ exec 'split '.Tex_EscapeSpaces(fname)
+ call Tex_Grepadd('@.*{'.a:prefix, "%")
+ q
+ else
+ let fname = Tex_FindFile(bibname, '.,'.g:Tex_BIBINPUTS, '.bbl')
+ if fname != ''
+ exec 'split '.Tex_EscapeSpaces(fname)
+ call Tex_Debug('finding .bbl file ['.bufname('.').']', 'view')
+ call Tex_Grepadd('\\bibitem{'.a:prefix, "%")
+ q
+ endif
+ endif
+
+ let i = i + 1
+ endwhile
+
+ if foundCiteFile
+ return 1
+ endif
+ endif
+
+ " If we have a thebibliography environment, then again assume that this is
+ " the only file which defines the bib-keys. Aand convey this information
+ " upwards by returning 1.
+ if search('^\s*\\begin{thebibliography}', 'w')
+ call Tex_Debug('got a thebibliography environment in '.bufname('%'), 'view')
+
+ let foundCiteFile = 1
+
+ split
+ lcd %:p:h
+ call Tex_Debug("silent! grepadd! ".Tex_EscapeForGrep('\\bibitem{'.a:prefix)." %", 'view')
+ call Tex_Grepadd('\\bibitem{'.a:prefix, "%")
+ q
+
+ return 1
+ endif
+
+ " If we have not found any \bibliography or \thebibliography environment
+ " in this file, search for these environments in all the files which this
+ " file includes.
+
+ exec 0
+ let wrap = 'w'
+ while search('^\s*\\\(input\|include\)', wrap)
+ let wrap = 'W'
+
+ let filename = matchstr(getline('.'), '\\\(input\|include\){\zs.\{-}\ze}')
+
+ let foundfile = Tex_FindFile(filename, '.,'.g:Tex_TEXINPUTS, '.tex')
+ if foundfile != ''
+ exec 'split '.Tex_EscapeSpaces(foundfile)
+ call Tex_Debug('scanning recursively in ['.foundfile.']', 'view')
+ let foundCiteFile = Tex_ScanFileForCite(a:prefix)
+ q
+ endif
+
+ if foundCiteFile
+ return 1
+ endif
+ endwhile
+
+
+ return 0
+endfunction " }}}
+" Tex_ScanFileForLabels: greps present file and included files for \\label's {{{
+" Description:
+" Grep the presently edited file for \\label's. If the present file \include's
+" or \input's other files, then recursively scan those as well, i.e we support
+" arbitrary levels of \input'ed-ness.
+function! Tex_ScanFileForLabels(prefix)
+ call Tex_Debug("+Tex_ScanFileForLabels: grepping in file [".bufname('%')."]", "view")
+
+ lcd %:p:h
+ call Tex_Grepadd('\\label{'.a:prefix, "%")
+
+ " Then recursively grep for all \include'd or \input'ed files.
+ exec 0
+ let wrap = 'w'
+ while search('^\s*\\\(input\|include\)', wrap)
+ let wrap = 'W'
+
+ let filename = matchstr(getline('.'), '\\\(input\|include\){\zs.\{-}\ze}')
+ let foundfile = Tex_FindFile(filename, '.,'.Tex_TEXINPUTS, '.tex')
+ if foundfile != ''
+ exec 'split '.Tex_EscapeSpaces(foundfile)
+ call Tex_Debug('Tex_ScanFileForLabels: scanning recursively in ['.foundfile.']', 'view')
+ call Tex_ScanFileForLabels(a:prefix)
+ q
+ endif
+ endwhile
+
+endfunction " }}}
+
+" ==============================================================================
+" Functions for custom command completion
+" ==============================================================================
+" Tex_completion_{var}: similar variables can be set in package files {{{
+let g:Tex_completion_bibliographystyle = 'abbr,alpha,plain,unsrt'
+let g:Tex_completion_addtocontents = 'lof}{,lot}{,toc}{'
+let g:Tex_completion_addcontentsline = 'lof}{figure}{,lot}{table}{,toc}{chapter}{,toc}{part}{,'.
+ \ 'toc}{section}{,toc}{subsection}{,toc}{paragraph}{,'.
+ \ 'toc}{subparagraph}{'
+" }}}
+" Tex_PromptForCompletion: prompts for a completion {{{
+" Description:
+function! s:Tex_PromptForCompletion(texcommand,ask)
+
+ let common_completion_prompt =
+ \ Tex_CreatePrompt(g:Tex_completion_{a:texcommand}, 2, ',') . "\n" .
+ \ 'Enter number or completion: '
+
+ let inp = input(a:ask."\n".common_completion_prompt)
+ if inp =~ '^[0-9]\+$'
+ let completion = Tex_Strntok(g:Tex_completion_{a:texcommand}, ',', inp)
+ else
+ let completion = inp
+ endif
+
+ return completion
+endfunction " }}}
+" Tex_DoCompletion: fast insertion of completion {{{
+" Description:
+"
+function! s:Tex_DoCompletion(texcommand)
+ let completion = <SID>Tex_PromptForCompletion(a:texcommand, 'Choose a completion to insert: ')
+ if completion != ''
+ return completion
+ else
+ return ''
+ endif
+endfunction " }}}
+
+" ==============================================================================
+" Functions for presenting an outlined version for completion
+" ==============================================================================
+" Tex_StartOutlineCompletion: sets up an outline window {{{
+
+" get the place where this plugin resides for setting cpt and dict options.
+" these lines need to be outside the function.
+let s:path = expand('<sfile>:p:h')
+if has('python') && Tex_GetVarValue('Tex_UsePython')
+ python import sys, re
+ exec "python sys.path += [r'". s:path . "']"
+ python import outline
+endif
+
+function! Tex_StartOutlineCompletion()
+ let mainfname = Tex_GetMainFileName(':p')
+
+ " open the buffer
+ let _report = &report
+ let _cmdheight=&cmdheight
+ let _lazyredraw = &lazyredraw
+ set report=1000
+ set cmdheight=1
+ set lazyredraw
+
+ bot split __OUTLINE__
+ exec Tex_GetVarValue('Tex_OutlineWindowHeight', 15).' wincmd _'
+
+ setlocal modifiable
+ setlocal noswapfile
+ setlocal buftype=nowrite
+ setlocal bufhidden=delete
+ setlocal nowrap
+ setlocal foldmethod=marker
+ setlocal foldmarker=<<<,>>>
+
+ " delete everything in it to the blackhole
+ % d _
+
+ if has('python') && Tex_GetVarValue('Tex_UsePython')
+ exec 'python retval = outline.main('
+ \. 'r"' . fnamemodify(mainfname, ':p') . '", '
+ \. 'r"' . s:prefix . '")'
+
+ " transfer variable from python to a local variable.
+ python vim.command("""let retval = "%s" """ % re.sub(r'"|\\', r'\\\g<0>', retval))
+
+ 0put!=retval
+ else
+ exec '0r!'.s:path.'/outline.py '.mainfname.' '.s:prefix
+ endif
+
+ 0
+
+ call Tex_SetupOutlineSyntax()
+
+ exec 'nnoremap <buffer> <cr> '
+ \ .':cd '.s:origdir.'<CR>'
+ \ .':call Tex_FinishOutlineCompletion()<CR>'
+ exec 'nnoremap <buffer> q '
+ \ .':cd '.s:origdir.'<CR>'
+ \ .':close<CR>'
+
+ " once the buffer is initialized, go back to the original settings.
+ setlocal nomodifiable
+ setlocal nomodified
+ let &report = _report
+ let &cmdheight = _cmdheight
+ let &lazyredraw = _lazyredraw
+
+endfunction " }}}
+" Tex_SetupOutlineSyntax: sets up the syntax items for the outline {{{
+" Description:
+function! Tex_SetupOutlineSyntax()
+ syn match outlineFileName "<\f\+>$" contained
+ syn match foldMarkers "<<<\d$" contained
+ syn match firstSemiColon '^:' contained
+ syn match firstAngle '^>' contained
+
+ syn match sectionNames '\(\d\.\)\+ .*' contains=foldMarkers
+ syn match previousLine '^:.*' contains=firstSemiColon
+ syn match labelLine '^>.*' contains=firstAngle,outlineFileName
+
+ hi def link outlineFileName Ignore
+ hi def link foldMarkers Ignore
+ hi def link firstSemiColon Ignore
+ hi def link firstAngle Ignore
+
+ hi def link sectionNames Type
+ hi def link previousLine Special
+ hi def link labelLine Comment
+endfunction " }}}
+" Tex_FinishOutlineCompletion: inserts the reference back in the text {{{
+function! Tex_FinishOutlineCompletion()
+ if getline('.') !~ '^[>:]'
+ return
+ endif
+
+ if getline('.') =~ '^>'
+ let ref_complete = matchstr(getline('.'), '^>\s\+\zs\S\+\ze')
+ elseif getline('.') =~ '^:'
+ let ref_complete = matchstr(getline(line('.')-1), '^>\s\+\zs\S\+\ze')
+ endif
+
+ let ref_remaining = strpart(ref_complete, strlen(s:prefix))
+ close
+ call Tex_CompleteWord(ref_remaining)
+endfunction " }}}
+
+" ==============================================================================
+" Functions for presenting a nicer list of bibtex entries
+" ==============================================================================
+" Tex_FindBibFiles: finds all .bib files used by the main file {{{
+" Description:
+function! Tex_FindBibFiles()
+
+ let mainfname = Tex_GetMainFileName(':p')
+ wincmd n
+ exec 'silent! e '.mainfname
+
+ if search('\\\(no\)\?bibliography{', 'w')
+
+ call Tex_Debug('Tex_FindBibFiles: found bibliography command in '.bufname('%'), 'view')
+
+ " extract the bibliography filenames from the command.
+ let bibnames = matchstr(getline('.'), '\\\(no\)\?bibliography{\zs.\{-}\ze}')
+ let bibnames = substitute(bibnames, '\s', '', 'g')
+
+ call Tex_Debug(':Tex_FindBibFiles: trying to search through ['.bibnames.']', 'view')
+
+ let bibfiles = ''
+ let i = 1
+ while 1
+ let bibname = Tex_Strntok(bibnames, ',', i)
+ if bibname == ''
+ break
+ endif
+ let fname = Tex_FindFile(bibname, '.,'.g:Tex_BIBINPUTS, '.bib')
+ if fname != ''
+ let bibfiles = bibfiles.fname."\n"
+ endif
+ let i = i + 1
+ endwhile
+
+ call Tex_Debug(":Tex_FindBibFiles: returning [".bibfiles."]", "view")
+ q
+ return bibfiles
+
+ else
+ q
+ return ''
+ endif
+
+endfunction " }}}
+" Tex_StartBibtexOutline: sets up an outline window {{{
+
+" get the place where this plugin resides for setting cpt and dict options.
+" these lines need to be outside the function.
+if has('python') && Tex_GetVarValue('Tex_UsePython')
+ python import sys, re
+ exec "python sys.path += [r'". s:path . "']"
+ python import bibtools
+endif
+
+function! Tex_StartCiteCompletion()
+ let bibfiles = Tex_FindBibFiles()
+ if bibfiles !~ '\S'
+ echohl WarningMsg
+ echomsg 'No bibfiles found! Sorry'
+ echohl None
+ return
+ endif
+
+ bot split __OUTLINE__
+ exec Tex_GetVarValue('Tex_OutlineWindowHeight', 15).' wincmd _'
+
+ exec 'python Tex_BibFile = bibtools.BibFile("""'.bibfiles.'""")'
+ exec 'python Tex_BibFile.addfilter("key ^'.s:prefix.'")'
+ call Tex_DisplayBibList()
+
+ nnoremap <Plug>Tex_JumpToNextBibEntry :call search('^\S.*\]$', 'W')<CR>:call Tex_EchoBibShortcuts()<CR>z.
+ nnoremap <Plug>Tex_JumpToPrevBibEntry :call search('^\S.*\]$', 'bW')<CR>:call Tex_EchoBibShortcuts()<CR>z.
+ nnoremap <Plug>Tex_FilterBibEntries :call Tex_HandleBibShortcuts('filter')<CR>
+ nnoremap <Plug>Tex_RemoveBibFilters :call Tex_HandleBibShortcuts('remove_filters')<CR>
+ nnoremap <Plug>Tex_SortBibEntries :call Tex_HandleBibShortcuts('sort')<CR>
+ nnoremap <Plug>Tex_CompleteCiteEntry :call Tex_CompleteCiteEntry()<CR>
+
+ nmap <buffer> <silent> n <Plug>Tex_JumpToNextBibEntry
+ nmap <buffer> <silent> p <Plug>Tex_JumpToPrevBibEntry
+ nmap <buffer> <silent> f <Plug>Tex_FilterBibEntries
+ nmap <buffer> <silent> s <Plug>Tex_SortBibEntries
+ nmap <buffer> <silent> a <Plug>Tex_RemoveBibFilters
+ nmap <buffer> <silent> q :close<CR>
+ nmap <buffer> <silent> <CR> <Plug>Tex_CompleteCiteEntry
+
+endfunction " }}}
+" Tex_DisplayBibList: displays the list of bibtex entries {{{
+" Description:
+function! Tex_DisplayBibList()
+ " open the buffer
+ let _report = &report
+ let _cmdheight=&cmdheight
+ let _lazyredraw = &lazyredraw
+ set report=1000
+ set cmdheight=1
+ set lazyredraw
+
+ setlocal modifiable
+ setlocal noswapfile
+ setlocal buftype=nowrite
+ setlocal bufhidden=delete
+ setlocal nowrap
+ setlocal foldmethod=marker
+ setlocal foldmarker=<<<,>>>
+
+
+ " delete everything in it to the blackhole
+ % d _
+
+ exec 'python Tex_CurBuf = vim.current.buffer'
+ exec 'python Tex_CurBuf[:] = str(Tex_BibFile).splitlines()'
+
+ call Tex_SetupBibSyntax()
+
+ 0
+ call Tex_EchoBibShortcuts()
+
+ " once the buffer is initialized, go back to the original settings.
+ setlocal nomodifiable
+ setlocal nomodified
+ let &report = _report
+ let &cmdheight = _cmdheight
+ let &lazyredraw = _lazyredraw
+
+endfunction " }}}
+" Tex_EchoBibShortcuts: echos all the shortcuts in the status line {{{
+" Description:
+function! Tex_EchoBibShortcuts()
+ echomsg '(a) all (f) filter (s) sort (n) next (p) previous (q) quit (<CR>) choose'
+endfunction " }}}
+" Tex_SetupBibSyntax: sets up the syntax items for the outline {{{
+" Description:
+function! Tex_SetupBibSyntax()
+ syn match BibTitleHeader "^TI" contained
+ syn match BibAuthorHeader "^AU" contained
+ syn match BibLocationHeader "^IN" contained
+ syn match BibMiscHeader "^MI" contained
+
+ syn match BibKeyLine '^\S.*\]$' contains=BibKey
+ syn match BibTitle "^TI .*" contains=BibTitleHeader
+ syn match BibAuthor "^AU .*" contains=BibAuthorHeader
+ syn match BibLocation "^IN .*" contains=BibLocationHeader
+ syn match BibMisc "^MI .*" contains=BibMiscHeader
+
+ hi def link BibTitleHeader Ignore
+ hi def link BibAuthorHeader Ignore
+ hi def link BibLocationHeader Ignore
+ hi def link BibMiscHeader Ignore
+
+ hi def link BibKeyLine Visual
+ hi def link BibTitle Type
+ hi def link BibAuthor Special
+ hi def link BibLocation Comment
+ hi def link BibMisc Comment
+endfunction " }}}
+" Tex_HandleBibShortcuts: handles user keypresses {{{
+" Description:
+function! Tex_HandleBibShortcuts(command)
+
+ if a:command == 'filter' || a:command == 'sort'
+
+ let fieldprompt =
+ \ "Field acronyms: (`:let g:Tex_EchoBibFields = 0` to avoid this message)\n" .
+ \ " [t] title [a] author [b] booktitle \n" .
+ \ " [j] journal [y] year [p] bibtype \n" .
+ \ " (you can also enter the complete field name) \n"
+
+ let fieldprompt = Tex_GetVarValue('Tex_BibFieldPrompt', fieldprompt)
+
+ if Tex_GetVarValue('Tex_EchoBibFields', 1) == 1
+ echo fieldprompt
+ endif
+
+ let inp = input('Enter '.a:command.' criterion [field<space>value]: ')
+ if inp !~ '\v^\S+\s+\S.*'
+ echohl WarningMsg
+ echomsg 'Invalid filter specification. Use "field<space>value"'
+ echohl None
+ return
+ endif
+
+ if inp != ''
+ " If the field is specified as a single character, then replace
+ " it with the corresponding 'full form'.
+ if inp =~ '^[a-z]\>'
+ if Tex_GetVarValue('Tex_BibAcronym_'.inp[0]) != ''
+ let inp = substitute(inp, '.', Tex_GetVarValue('Tex_BibAcronym_'.inp[0]), '')
+ elseif fieldprompt =~ '\['.inp[0].'\]'
+ let full = matchstr(fieldprompt, '\['.inp[0].'\] \zs\w\+\ze')
+ let inp = substitute(inp, '.', full, '')
+ endif
+ endif
+ call Tex_Debug(":Tex_HandleBibShortcuts: using inp = [".inp."]", "view")
+ if a:command == 'filter'
+ exec 'python Tex_BibFile.addfilter("'.inp.'")'
+ elseif a:command == 'sort'
+ exec "python Tex_BibFile.addsortfield(\"".inp."\")"
+ exec 'python Tex_BibFile.sort()'
+ endif
+ silent! call Tex_DisplayBibList()
+ endif
+
+ elseif a:command == 'remove_filters'
+
+ exec 'python Tex_BibFile.rmfilters()'
+ exec 'python Tex_BibFile.addfilter("key ^'.s:prefix.'")'
+ call Tex_DisplayBibList()
+
+ endif
+
+endfunction " }}}
+" Tex_CompleteCiteEntry: completes cite entry {{{
+" Description:
+function! Tex_CompleteCiteEntry()
+ normal! 0
+ call search('\[\S\+\]$', 'W')
+ if getline('.') !~ '\[\S\+\]$'
+ call search('\[\S\+\]$', 'bW')
+ endif
+
+ if getline('.') !~ '\[\S\+\]$'
+ return
+ endif
+
+ let ref = matchstr(getline('.'), '\[\zs\S\+\ze\]$')
+ close
+ call Tex_Debug(":Tex_CompleteCiteEntry: completing with ".ref, "view")
+ call Tex_CompleteWord(strpart(ref, strlen(s:prefix)))
+endfunction " }}}
+
+com! -nargs=0 TClearCiteHist unlet! s:citeSearchHistory
+
+" vim:fdm=marker:nowrap:noet:ff=unix:ts=4:sw=4
diff --git a/dot_vim/ftplugin/latex-suite/version.vim b/dot_vim/ftplugin/latex-suite/version.vim
new file mode 100644
index 0000000..41089cf
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/version.vim
@@ -0,0 +1,30 @@
+" Tex_Version: returns a string which gives the current version number of latex-suite
+" Description:
+" Each time a bug fix/addition is done in any source file in latex-suite,
+" not just this file, the number below has to be incremented by the author.
+" This will ensure that there is a single 'global' version number for all of
+" latex-suite.
+"
+" If a change is done in the doc/ directory, i.e an addition/change in the
+" documentation, then this number should NOT be incremented.
+"
+" Latex-suite will follow a 3-tier system of versioning just as Vim. A
+" version number will be of the form:
+"
+" X.Y.ZZ
+"
+" 'X' will only be incremented for a major over-haul or feature addition.
+" 'Y' will be incremented for significant changes which do not qualify
+" as major.
+" 'ZZ' will be incremented for bug-fixes and very trivial additions such
+" as adding an option etc. Once ZZ reaches 50, then Y will be
+" incremented and ZZ will be reset to 01. Each time we have a
+" version number of the form X.Y.01, then we'll make a release on
+" vim.sf.net and also create a cvs tag at that point. We'll try to
+" "stabilize" that version by releasing a few pre-releases and then
+" keep that as a stable point.
+function! Tex_Version()
+ return "Latex-Suite: version 1.8.13"
+endfunction
+
+com! -nargs=0 TVersion echo Tex_Version()
diff --git a/dot_vim/ftplugin/latex-suite/wizardfuncs.vim b/dot_vim/ftplugin/latex-suite/wizardfuncs.vim
new file mode 100644
index 0000000..113271c
--- /dev/null
+++ b/dot_vim/ftplugin/latex-suite/wizardfuncs.vim
@@ -0,0 +1,377 @@
+" File: wizardfuncs.vim
+" Author: Mikolaj Machowski <mikmach@wp.pl>
+" Description:
+"
+" Installation:
+" History: pluginized by Srinath Avadhanula
+"=============================================================================
+
+if exists('s:doneOnce')
+ finish
+endif
+let s:doneOnce = 1
+
+let s:mapleader = exists('mapleader') ? mapleader : "\\"
+" ==============================================================================
+" Specialized functions for handling sections from command line
+" ==============================================================================
+
+com! -nargs=? TSection call Tex_section(<f-args>)
+com! -nargs=? TSectionAdvanced call Tex_section_adv(<f-args>)
+
+" Tex_VisSecAdv: handles visual selection for sections {{{
+function! Tex_VisSecAdv(section)
+ let shorttitle = input("Short title? ")
+ let toc = input("Include in table of contents [y]/n ? ")
+ let sstructure = "\\".a:section
+ if ( toc == "" || toc == "y" )
+ let toc = ""
+ else
+ let toc = "*"
+ endif
+ if shorttitle != ""
+ let shorttitle = '['.shorttitle.']'
+ endif
+ exe "normal `>a}\<cr>\<esc>`<i".sstructure.toc.shorttitle."{"
+endfunction
+
+" }}}
+" Tex_InsSecAdv: section wizard in insert mode {{{
+function! Tex_InsSecAdv(structure)
+ let ttitle = input("Title? ")
+ let shorttitle = input("Short title? ")
+ let toc = input("Include in table of contents [y]/n ? ")
+ "Structure
+ let sstructure = "\\".a:structure
+ "TOC
+ if ( toc == "" || toc == "y" )
+ let toc = ""
+ else
+ let toc = "*"
+ endif
+ "Shorttitle
+ if shorttitle != ""
+ let shorttitle = '['.shorttitle.']'
+ endif
+ "Title
+ let ttitle = '{'.ttitle.'}'
+ "Happy end?
+ return sstructure.toc.shorttitle.ttitle
+endfunction
+
+
+" }}}
+function! Tex_section(...) "{{{
+ silent let pos = line('.').' | normal! '.virtcol('.').'|'
+ silent let last_section_value = s:Tex_section_detection()
+ if a:0 == 0
+ silent let last_section_name = s:Tex_section_name(last_section_value)
+ silent call s:Tex_section_call(last_section_name)
+ elseif a:1 =~ "[+=\-]"
+ silent let sec_arg = a:1
+ silent let curr_section_value = s:Tex_section_curr_rel_value(sec_arg, last_section_value)
+ silent let curr_section_name = s:Tex_section_name(curr_section_value)
+ silent call s:Tex_section_call(curr_section_name)
+ elseif a:1 == "?"
+ echo s:last_section_line
+ else
+ silent let curr_section_value = s:Tex_section_curr_value(a:1)
+ silent let curr_section_name = s:Tex_section_name(curr_section_value)
+ silent call s:Tex_section_call(curr_section_name)
+ endif
+ silent exe pos
+endfunction "}}}
+function! Tex_section_adv(...) "{{{
+ let pos = line('.').' | normal! '.virtcol('.').'|'
+ silent let last_section_value = s:Tex_section_detection()
+ if a:0 == 0
+ silent let last_section_name = s:Tex_section_name(last_section_value)
+ let section = Tex_InsSecAdv(last_section_name)
+ elseif a:1 =~ "[+=\-]"
+ silent let sec_arg = a:1
+ silent let curr_section_value = s:Tex_section_curr_rel_value(sec_arg, last_section_value)
+ silent let curr_section_name = s:Tex_section_name(curr_section_value)
+ let section = Tex_InsSecAdv(curr_section_name)
+ else
+ silent let curr_section_value = s:Tex_section_curr_value(a:1)
+ silent let curr_section_name = s:Tex_section_name(curr_section_value)
+ silent call s:Tex_section_call(curr_section_name)
+ let section = Tex_InsSecAdv(curr_section_name)
+ endif
+ exe "normal i".section
+ exe pos
+endfunction "}}}
+function! s:Tex_section_detection() "{{{
+ let pos = line('.').' | normal! '.virtcol('.').'|'
+ let last_section1 = search("\\\\\subparagraph\\|\\\\paragraph\\|\\\\subsubsection\\|\\\\subsection\\|\\\\section\\|\\\\chapter\\|\\\part\)", "b")
+ exe pos
+ let last_section2 = search("\\\\\part\\|\\\\chapter\\|\\\\section\\|\\\\subsection\\|\\\\subsubsection\\|\\\\paragraph\\|\\\subparagraph\)", "b")
+ if last_section1 > last_section2
+ let last_section = last_section1
+ else
+ let last_section = last_section2
+ endif
+ if last_section != 0
+ exe last_section
+ if getline(".") =~ "\\\\part"
+ let last_section_value = 0
+ elseif getline(".") =~ "\\\\chapter"
+ let last_section_value = 1
+ elseif getline(".") =~ "\\\\section"
+ let last_section_value = 2
+ elseif getline(".") =~ "\\\\subsection"
+ let last_section_value = 3
+ elseif getline(".") =~ "\\\\subsubsection"
+ let last_section_value = 4
+ elseif getline(".") =~ "\\\\paragraph"
+ let last_section_value = 5
+ elseif getline(".") =~ "\\\\subparagraph"
+ let last_section_value = 6
+ endif
+ let s:last_section_line = getline(".")
+ else
+ let last_section_value = 0
+ endif
+ exe pos
+ return last_section_value
+endfunction "}}}
+function! s:Tex_section_curr_value(sec_arg) "{{{
+ if a:sec_arg == "pa" || a:sec_arg == "0" || a:sec_arg == "part"
+ let curr_section_value = 0
+ elseif a:sec_arg == "ch" || a:sec_arg == "1" || a:sec_arg == "chapter"
+ let curr_section_value = 1
+ elseif a:sec_arg == "se" || a:sec_arg == "2" || a:sec_arg == "section"
+ let curr_section_value = 2
+ elseif a:sec_arg == "ss" || a:sec_arg == "3" || a:sec_arg == "subsection"
+ let curr_section_value = 3
+ elseif a:sec_arg == "s2" || a:sec_arg == "4" || a:sec_arg == "subsubsection"
+ let curr_section_value = 4
+ elseif a:sec_arg == "pr" || a:sec_arg == "5" || a:sec_arg == "paragraph"
+ let curr_section_value = 5
+ elseif a:sec_arg == "sp" || a:sec_arg == "6" || a:sec_arg == "subparagraph"
+ let curr_section_value = 6
+ endif
+ return curr_section_value
+endfunction "}}}
+function! s:Tex_section_curr_rel_value(sec_arg, last_section_value) "{{{
+ let last_section_value = a:last_section_value
+ if a:sec_arg == "+" || a:sec_arg == "+1"
+ let curr_section_value = last_section_value + 1
+ elseif a:sec_arg == "++" || a:sec_arg == "+2"
+ let curr_section_value = last_section_value + 2
+ elseif a:sec_arg == "-" || a:sec_arg == "-1"
+ let curr_section_value = last_section_value - 1
+ elseif a:sec_arg == "--" || a:sec_arg == "-2"
+ let curr_section_value = last_section_value - 2
+ elseif a:sec_arg == "="
+ let curr_section_value = last_section_value
+ else
+ exe "let curr_section_value = last_section_value".a:sec_arg
+ endif
+ if curr_section_value < 0
+ let curr_section_value = 0
+ elseif curr_section_value > 6
+ let curr_section_value = 6
+ endif
+ return curr_section_value
+endfunction "}}}
+function! s:Tex_section_name(section_value) "{{{
+ if a:section_value == 0
+ let section_name = "part"
+ elseif a:section_value == 1
+ let section_name = "chapter"
+ elseif a:section_value == 2
+ let section_name = "section"
+ elseif a:section_value == 3
+ let section_name = "subsection"
+ elseif a:section_value == 4
+ let section_name = "subsubsection"
+ elseif a:section_value == 5
+ let section_name = "paragraph"
+ elseif a:section_value == 6
+ let section_name = "subparagraph"
+ endif
+ return section_name
+endfunction "}}}
+function! s:Tex_section_call(section_name) "{{{
+ exe "normal! i\\".a:section_name."{<++>}<++>\<Esc>0\<C-j>"
+" let ret_section = "\\".a:section_name."{<++>}<++>"
+" exe "normal! i\<C-r>=IMAP_PutTextWithMovement(ret_section)\<CR>"
+" normal f}i
+endfunction "}}}
+
+" ==============================================================================
+" Add looking help into latexhelp.txt
+" ==============================================================================
+
+inoremap <silent> <Plug>Tex_Help <C-o>:call <SID>TexHelp()<CR>
+nnoremap <silent> <Plug>Tex_Help :call <SID>TexHelp()<CR>
+command! -nargs=0 THelp call <SID>TexHelp()
+call Tex_MakeMap('<F1>', '<Plug>Tex_Help', 'i', '')
+call Tex_MakeMap('<F1>', '<Plug>Tex_Help', 'n', '')
+
+" TexHelp: Cursor being on LaTeX item check if exists help tag about it " {{{
+function! s:TexHelp()
+ let syntax_item = synIDattr(synID(line('.'),col('.')-1,0),"name")
+ if syntax_item =~ '^tex'
+ setlocal isk+=\
+ let curword = expand('<cword>')
+ setlocal isk-=\
+ let v:errmsg = ''
+ if curword =~ "^\\" || syntax_item == 'texSectionName'
+ exe 'silent! help '.curword
+ if v:errmsg =~ '^E149:'
+ echohl ErrorMsg
+ exe "echomsg 'Sorry, no help for LaTeX: ".curword."'"
+ echohl None
+ let v:errmsg = ''
+ endif
+ else
+ help
+ endif
+ else
+ help
+ endif
+endfunction " }}}
+
+" ==============================================================================
+" Tables of shortcuts
+" ==============================================================================
+"
+command! -nargs=? Tshortcuts call Tex_shortcuts(<f-args>)<CR>
+
+" Tex_shortcuts: Show shortcuts in terminal after : command {{{
+function! Tex_shortcuts(...)
+ if a:0 == 0
+ let shorts = input(" Allowed arguments are:"
+ \."\n g General"
+ \."\n e Environments"
+ \."\n f Fonts"
+ \."\n s Sections"
+ \."\n m Math"
+ \."\n a All"
+ \."\n Enter your choice (<Enter> quits) : ")
+ call Tex_shortcuts(shorts)
+ elseif a:1 == 'g'
+ echo g:generalshortcuts
+ elseif a:1 == 'e'
+ echo g:environmentshortcuts
+ elseif a:1 == 'f'
+ echo g:fontshortcuts
+ elseif a:1 == 's'
+ echo g:sectionshortcuts
+ elseif a:1 == 'm'
+ echo g:mathshortcuts
+ elseif a:1 == 'a'
+ echo g:generalshortcuts
+ echo g:environmentshortcuts
+ echo g:fontshortcuts
+ echo g:sectionshortcuts
+ echo g:mathshortcuts
+ endif
+
+endfunction
+" }}}
+
+" General shortcuts {{{
+let g:generalshortcuts = ''
+\."\n General shortcuts"
+\."\n <mapleader> is a value of <Leader>"
+\."\n ".s:mapleader.'ll compile whole document'
+\."\n ".s:mapleader.'lv view compiled document'
+\."\n ".s:mapleader.'ls forward searching (if possible)'
+\."\n ".s:mapleader.'rf refresh folds'
+" }}}
+" Environment shortcuts {{{
+let g:environmentshortcuts = ''
+\."\n Environment shortcuts"
+\."\n <mapleader> is a value of g:Tex_Leader2"
+\."\n I v&V I v&V"
+\."\n ELI ".g:Tex_Leader2."li list EQN ".g:Tex_Leader2."qn quotation"
+\."\n EDE ".g:Tex_Leader2."de description ESB ".g:Tex_Leader2."sb sloppybar"
+\."\n EEN ".g:Tex_Leader2."en enumerate ETI ".g:Tex_Leader2."ti theindex"
+\."\n EIT ".g:Tex_Leader2."it itemize ETP ".g:Tex_Leader2."tp titlepage"
+\."\n ETI ".g:Tex_Leader2."ti theindex EVM ".g:Tex_Leader2."vm verbatim"
+\."\n ETL ".g:Tex_Leader2."tl trivlist EVE ".g:Tex_Leader2."ve verse"
+\."\n ETE ".g:Tex_Leader2."te table ETB ".g:Tex_Leader2."tb thebibliography"
+\."\n ETG ".g:Tex_Leader2."tg tabbing ENO ".g:Tex_Leader2."no note"
+\."\n ETR ".g:Tex_Leader2."tr tabular EOV ".g:Tex_Leader2."ov overlay"
+\."\n EAR ".g:Tex_Leader2."ar array ESL ".g:Tex_Leader2."sl slide"
+\."\n EDM ".g:Tex_Leader2."dm displaymath EAB ".g:Tex_Leader2."ab abstract"
+\."\n EEA ".g:Tex_Leader2."ea eqnarray EAP ".g:Tex_Leader2."ap appendix"
+\."\n EEQ ".g:Tex_Leader2."eq equation ECE ".g:Tex_Leader2."ce center"
+\."\n EDO ".g:Tex_Leader2."do document EFI ".g:Tex_Leader2."fi figure"
+\."\n EFC ".g:Tex_Leader2."fc filecontents ELR ".g:Tex_Leader2."lr lrbox"
+\."\n EFL ".g:Tex_Leader2."fl flushleft EMP ".g:Tex_Leader2."mp minipage"
+\."\n EFR ".g:Tex_Leader2."fr flushright EPI ".g:Tex_Leader2."pi picture"
+\."\n EMA ".g:Tex_Leader2."ma math EQE ".g:Tex_Leader2."qe quote"
+" }}}
+" Font shortcuts {{{
+let g:fontshortcuts = ''
+\."\n Font shortcuts"
+\."\n <mapleader> is a value of g:Tex_Leader"
+\."\n Shortcuts Effects"
+\."\n I v&V I&v V"
+\."\n FBF ".g:Tex_Leader."bf \\textbf{} {\\bfseries }"
+\."\n FMD ".g:Tex_Leader."md \\textmd{} {\\mdseries }"
+\."\n"
+\."\n FTT ".g:Tex_Leader."tt \\texttt{} {\\ttfamily }"
+\."\n FSF ".g:Tex_Leader."sf \\textsf{} {\\sffamily }"
+\."\n FRM ".g:Tex_Leader."rm \\textrm{} {\\rmfamily }"
+\."\n"
+\."\n FUP ".g:Tex_Leader."up \\textup{} {\\upshape }"
+\."\n FSL ".g:Tex_Leader."sl \\textsl{} {\\slshape }"
+\."\n FSC ".g:Tex_Leader."sc \\textsc{} {\\scshape }"
+\."\n FIT ".g:Tex_Leader."it \\textit{} {\\itshape }"
+" }}}
+" Section shortcuts {{{
+let g:sectionshortcuts = ''
+\."\n Section shortcuts"
+\."\n <mapleader> is a value of g:Tex_Leader2"
+\."\n I v&V"
+\."\n SPA ".g:Tex_Leader2."pa part"
+\."\n SCH ".g:Tex_Leader2."ch chapter"
+\."\n SSE ".g:Tex_Leader2."se section"
+\."\n SSS ".g:Tex_Leader2."ss subsection"
+\."\n SS2 ".g:Tex_Leader2."s2 subsubsection"
+\."\n SPG ".g:Tex_Leader2."pg paragraph"
+\."\n SSP ".g:Tex_Leader2."sp subparagraph"
+" }}}
+" Math shortcuts {{{
+let g:mathshortcuts = ''
+\."\n Math shortcuts - Insert mode"
+\."\n `a \\alpha `b \\beta"
+\."\n `g \\gamma `d \\delta"
+\."\n `e \\varepsilon `z \\zeta"
+\."\n `h \\eta `q \\theta"
+\."\n `i \\iota `k \\kappa"
+\."\n `l \\lambda `m \\mu"
+\."\n `n \\nu `x \\xi"
+\."\n `p \\pi `r \\rho"
+\."\n `s \\sigma `v \\varsigma"
+\."\n `t \\tau `u \\upsilon"
+\."\n `f \\varphi `c \\chi"
+\."\n `y \\psi `w \\omega"
+\."\n `A \\Alpha `B \\Beta"
+\."\n `G \\Gamma `D \\Delta"
+\."\n `E \\Epsilon `Z \\mathrm{Z}"
+\."\n `H \\Eta `K \\Kappa"
+\."\n `L \\Lambda `M \\Mu"
+\."\n `N \\Nu `X \\Xi"
+\."\n `P \\Pi `R \\Rho"
+\."\n `S \\Sigma `T \\Tau"
+\."\n `U \\Upsilon `C \\Chi"
+\."\n `Y \\Psi `W \\Omega"
+\."\n `( \\subset `) \\Subset"
+\."\n `= \\equiv =~ \\approx"
+\."\n `- \\bigcap `+ \\bigcup"
+\."\n `. \\cdot `* \\times"
+\."\n `\\ \\setminus `@ \\circ"
+\."\n `& \\wedge `, \\nonumber"
+\."\n `8 \\infty `_ \\bar{}"
+\."\n `: \\ddot{} `; \\dot{}"
+\."\n `^ \\hat{} `~ \\tilde{}"
+\."\n `6 \\partial"
+" }}}
+
+" vim:fdm=marker:ff=unix:noet:ts=4:sw=4
diff --git a/dot_vim/ftplugin/po.vim b/dot_vim/ftplugin/po.vim
new file mode 100644
index 0000000..8b083ab
--- /dev/null
+++ b/dot_vim/ftplugin/po.vim
@@ -0,0 +1,407 @@
+" Vim ftplugin for PO file (GNU gettext) editing.
+" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+" Last Change: Tue, 12 Apr 2005 13:49:55 -0400
+"
+" *** Latest version: http://www.vim.org/scripts/script.php?script_id=695 ***
+"
+" DESCRIPTION
+" This file is a Vim ftplugin for editing PO files (GNU gettext -- the GNU
+" i18n and l10n system). It automates over a dozen frequent tasks that
+" occur while editing files of this type.
+"
+" Key mappings
+" Action (Insert mode) GUI Vim Vim
+" ===============================================================
+" Move to an untransl. string forward <S-F1> \m
+" Move to an untransl. string backward <S-F2> \p
+" Copy the msgid string to msgstr <S-F3> \c
+" Delete the msgstr string <S-F4> \d
+" Move to the next fuzzy translation <S-F5> \f
+" Move to the previous fuzzy translation <S-F6> \b
+" Label the translation fuzzy <S-F7> \z
+" Remove the fuzzy label <S-F8> \r
+" Show msgfmt statistics for the file(*) <S-F11> \s
+" Browse through msgfmt errors for the file(*) <S-F12> \e
+" Put the translator info in the header \t \t
+" Put the lang. team info in the header \l \l
+" ---------------------------------------------------------------
+" (*) Only available on UNIX computers.
+"
+"
+" Key mappings
+" Action (Normal mode) GUI Vim Vim
+" ===============================================================
+" Move to an untransl. string forward <S-F1> \m
+" Move to an untransl. string backward <S-F2> \p
+" Move to the next fuzzy translation <S-F5> \f
+" Move to the previous fuzzy translation <S-F6> \b
+" Label the translation fuzzy <S-F7> \z
+" Remove the fuzzy label <S-F8> \r
+" Split-open the file under cursor gf gf
+" Show msgfmt statistics for the file(*) <S-F11> \s
+" Browse through msgfmt errors for the file(*) <S-F12> \e
+" Put the translator info in the header \t \t
+" Put the lang. team info in the header \l \l
+" ---------------------------------------------------------------
+" (*) Only available on UNIX computers.
+"
+" Remarks:
+" - "S" in the above key mappings stands for the <Shift> key and "\" in
+" fact means "<LocalLeader>" (:help <LocalLeader>), which is "\" by
+" Vim's default.
+" - Information about the translator and language team is supplied by two
+" global variables: 'g:po_translator' and 'g:po_lang_team'. They should
+" be defined in the ".vimrc" (UNIX) or "_vimrc" (Windows) file. If they
+" are not defined, the default values (descriptive strings) are put
+" instead.
+" - Vim's "gf" Normal mode command is remapped (local to the PO buffer, of
+" course). It will only function on lines starting with "#: ". Search
+" for the file is performed in the directories specified by the 'path'
+" option. The user can supply its own addition to this option via the
+" 'g:po_path' global variable. Its default value for PO files can be
+" found by typing ":set path?" from within a PO buffer. For the correct
+" format please see ":help 'path'". Warning messages are printed if no
+" or more than one file is found.
+" - Vim's Quickfix mode (see ":help quickfix") is used for browsing
+" through msgfmt-reported errors for the file. No MO file is created
+" when running the msgfmt program since its output is directed to
+" "/dev/null". The user can supply command-line arguments to the msgfmt
+" program via the global variable 'g:po_msgfmt_args'. All arguments are
+" allowed except the "-o" for output file. The default value is
+" "-vv -c".
+"
+" But there's even more!
+"
+" Every time the PO file is saved, a PO-formatted time stamp is
+" automatically added to the file header.
+"
+" INSTALLATION
+" Put this file in a Vim ftplugin directory. On UNIX computers it is
+" usually either "~/.vim/ftplugin" or "~/.vim/after/ftplugin". On Windows
+" computers, the defaults are "$VIM\vimfiles\ftplugin" or
+" "$VIM\vimfiles\after\ftplugin". For more information consult the Vim
+" help, ":help 'ftplugin'" and ":help 'runtimepath'".
+"
+" REMOVAL
+" Just delete the bloody file!
+
+" Only do this when not done yet for this buffer.
+if exists("b:did_po_mode_ftplugin") || exists("loaded_po_ftplugin")
+ finish
+endif
+let b:did_po_mode_ftplugin = 1
+let loaded_po_ftplugin = 1
+
+setlocal comments=
+setlocal errorformat=%f:%l:\ %m
+setlocal makeprg=msgfmt
+
+let b:po_path = '.,..,../src,../src/*'
+if exists("g:po_path")
+ let b:po_path = b:po_path . ',' . g:po_path
+endif
+exe "setlocal path=" . b:po_path
+unlet b:po_path
+
+" Check if GUI Vim is running.
+if has("gui_running")
+ let gui = 1
+else
+ let gui = 0
+endif
+
+" Move to the first untranslated msgstr string forward.
+if !hasmapto('<Plug>NextTransFwd')
+ if gui
+ imap <buffer> <unique> <S-F1> <Plug>NextTransFwd
+ nmap <buffer> <unique> <S-F1> <Plug>NextTransFwd
+ else
+ imap <buffer> <unique> <LocalLeader>m <Plug>NextTransFwd
+ nmap <buffer> <unique> <LocalLeader>m <Plug>NextTransFwd
+ endif
+endif
+inoremap <buffer> <unique> <Plug>NextTransFwd <ESC>/^msgstr\s*""\(\n\n\\|\%$\)<CR>:let @/=""<CR>:call histdel("/", -1)<CR>z.f"a
+nnoremap <buffer> <unique> <Plug>NextTransFwd /^msgstr\s*""\(\n\n\\|\%$\)<CR>:let @/=""<CR>:call histdel("/", -1)<CR><C-L>z.
+
+" Move to the first untranslated msgstr string backward.
+if !hasmapto('<Plug>NextTransBwd')
+ if gui
+ imap <buffer> <unique> <S-F2> <Plug>NextTransBwd
+ nmap <buffer> <unique> <S-F2> <Plug>NextTransBwd
+ else
+ imap <buffer> <unique> <LocalLeader>p <Plug>NextTransBwd
+ nmap <buffer> <unique> <LocalLeader>p <Plug>NextTransBwd
+ endif
+endif
+inoremap <buffer> <unique> <Plug>NextTransBwd <ESC>{?^msgstr\s*""\(\n\n\\|\%$\)<CR>:let @/=""<CR>:call histdel("/", -1)<CR>z.f"a
+nnoremap <buffer> <unique> <Plug>NextTransBwd {?^msgstr\s*""\(\n\n\\|\%$\)<CR>:let @/=""<CR>:call histdel("/", -1)<CR><C-L>z.
+
+" Copy original msgid string into msgstr string.
+if !hasmapto('<Plug>CopyMsgid')
+ if gui
+ imap <buffer> <unique> <S-F3> <Plug>CopyMsgid
+ else
+ imap <buffer> <unique> <LocalLeader>c <Plug>CopyMsgid
+ endif
+endif
+inoremap <buffer> <unique> <Plug>CopyMsgid <ESC>}?^msgid<CR>:let @/=""<CR>:call histdel("/", -1)<CR>f"y/^msgstr<CR>/^msgstr<CR>:let @/=""<CR>:call histdel("/", -1)<CR>f""_d$pa
+
+" Erase the translation string.
+if !hasmapto('<Plug>DeleteTrans')
+ if gui
+ imap <buffer> <unique> <S-F4> <Plug>DeleteTrans
+ else
+ imap <buffer> <unique> <LocalLeader>d <Plug>DeleteTrans
+ endif
+endif
+inoremap <buffer> <unique> <Plug>DeleteTrans <ESC>}?^msgstr<CR>:let @/=""<CR>:call histdel("/", -1)<CR>f"lc}"<ESC>i
+
+" Move to the first fuzzy translation forward.
+if !hasmapto('<Plug>NextFuzzy')
+ if gui
+ imap <buffer> <unique> <S-F5> <Plug>NextFuzzy
+ nmap <buffer> <unique> <S-F5> <Plug>NextFuzzy
+ else
+ imap <buffer> <unique> <LocalLeader>f <Plug>NextFuzzy
+ nmap <buffer> <unique> <LocalLeader>f <Plug>NextFuzzy
+ endif
+endif
+inoremap <buffer> <unique> <Plug>NextFuzzy <ESC>/^#,\(.*,\)\=\s*fuzzy<CR>:let @/=""<CR>:call histdel("/", -1)<CR>/^msgstr<CR>:let @/=""<CR>:call histdel("/", -1)<CR>z.$i
+nnoremap <buffer> <unique> <Plug>NextFuzzy /^#,\(.*,\)\=\s*fuzzy<CR>:let @/=""<CR>:call histdel("/", -1)<CR>/^msgstr<CR>:let @/=""<CR>:call histdel("/", -1)<CR><C-L>z.$
+
+" Move to the first fuzzy descriptor backward.
+if !hasmapto('<Plug>PreviousFuzzy')
+ if gui
+ imap <buffer> <unique> <S-F6> <Plug>PreviousFuzzy
+ nmap <buffer> <unique> <S-F6> <Plug>PreviousFuzzy
+ else
+ imap <buffer> <unique> <LocalLeader>b <Plug>PreviousFuzzy
+ nmap <buffer> <unique> <LocalLeader>b <Plug>PreviousFuzzy
+ endif
+endif
+inoremap <buffer> <unique> <Plug>PreviousFuzzy <ESC>{?^#,\(.*,\)\=\s*fuzzy<CR>:let @/=""<CR>:call histdel("/", -1)<CR>/^msgstr<CR>:let @/=""<CR>:call histdel("/", -1)<CR>z.$i
+nnoremap <buffer> <unique> <Plug>PreviousFuzzy {?^#,\(.*,\)\=\s*fuzzy<CR>:let @/=""<CR>:call histdel("/", -1)<CR>/^msgstr<CR>:let @/=""<CR>:call histdel("/", -1)<CR><C-L>z.$
+
+" Insert fuzzy description for the translation.
+if !hasmapto('<Plug>InsertFuzzy')
+ if gui
+ imap <buffer> <unique> <S-F7> <Plug>InsertFuzzy
+ nmap <buffer> <unique> <S-F7> <Plug>InsertFuzzy
+ else
+ imap <buffer> <unique> <LocalLeader>z <Plug>InsertFuzzy
+ nmap <buffer> <unique> <LocalLeader>z <Plug>InsertFuzzy
+ endif
+endif
+inoremap <buffer> <unique> <Plug>InsertFuzzy <ESC>{vap:call <SID>InsertFuzzy()<CR>gv<ESC>}i
+nnoremap <buffer> <unique> <Plug>InsertFuzzy {vap:call <SID>InsertFuzzy()<CR>gv<ESC>}
+
+fu! <SID>InsertFuzzy() range
+ let n = a:firstline
+ while n <= a:lastline
+ let line = getline(n)
+ if line =~ '^#,.*fuzzy'
+ return
+ elseif line =~ '^#,'
+ call setline(n, substitute(line, '#,','#, fuzzy,', ""))
+ return
+ elseif line =~ '^msgid'
+ call append(n-1, '#, fuzzy')
+ return
+ endif
+ let n = n + 1
+ endwhile
+endf
+
+" Remove fuzzy description from the translation.
+if !hasmapto('<Plug>RemoveFuzzy')
+ if gui
+ imap <buffer> <unique> <S-F8> <Plug>RemoveFuzzy
+ nmap <buffer> <unique> <S-F8> <Plug>RemoveFuzzy
+ else
+ imap <buffer> <unique> <LocalLeader>r <Plug>RemoveFuzzy
+ nmap <buffer> <unique> <LocalLeader>r <Plug>RemoveFuzzy
+ endif
+endif
+inoremap <buffer> <unique> <Plug>RemoveFuzzy <ESC>{vap:call <SID>RemoveFuzzy()<CR>i
+nnoremap <buffer> <unique> <Plug>RemoveFuzzy {vap:call <SID>RemoveFuzzy()<CR>
+
+fu! <SID>RemoveFuzzy()
+ let line = getline(".")
+ if line =~ '^#,\s*fuzzy$'
+ exe "normal! dd"
+ elseif line =~ '^#,\(.*,\)\=\s*fuzzy'
+ exe 's/,\s*fuzzy//'
+ endif
+endf
+
+" Show PO translation statistics. (Only available on UNIX computers for now.)
+if has("unix")
+ if !hasmapto('<Plug>MsgfmtStats')
+ if gui
+ imap <buffer> <unique> <S-F11> <Plug>MsgfmtStats
+ nmap <buffer> <unique> <S-F11> <Plug>MsgfmtStats
+ else
+ imap <buffer> <unique> <LocalLeader>s <Plug>MsgfmtStats
+ nmap <buffer> <unique> <LocalLeader>s <Plug>MsgfmtStats
+ endif
+ endif
+ inoremap <buffer> <unique> <Plug>MsgfmtStats <ESC>:call <SID>Msgfmt('stats')<CR>
+ nnoremap <buffer> <unique> <Plug>MsgfmtStats :call <SID>Msgfmt('stats')<CR>
+
+ if !hasmapto('<Plug>MsgfmtTest')
+ if gui
+ imap <buffer> <unique> <S-F12> <Plug>MsgfmtTest
+ nmap <buffer> <unique> <S-F12> <Plug>MsgfmtTest
+ else
+ imap <buffer> <unique> <LocalLeader>e <Plug>MsgfmtTest
+ nmap <buffer> <unique> <LocalLeader>e <Plug>MsgfmtTest
+ endif
+ endif
+ inoremap <buffer> <unique> <Plug>MsgfmtTest <ESC>:call <SID>Msgfmt('test')<CR>
+ nnoremap <buffer> <unique> <Plug>MsgfmtTest :call <SID>Msgfmt('test')<CR>
+
+ fu! <SID>Msgfmt(action)
+ " Check if the file needs to be saved first.
+ exe "if &modified | w | endif"
+ if a:action == 'stats'
+ exe "!msgfmt --statistics -o /dev/null %"
+ elseif a:action == 'test'
+ if exists("g:po_msgfmt_args")
+ let args = g:po_msgfmt_args
+ else
+ let args = '-vv -c'
+ endif
+ exe "make! " . args . " -o /dev/null %"
+ copen
+ endif
+ endf
+endif
+
+" Add translator info in the file header.
+if !hasmapto('<Plug>TranslatorInfo')
+ if gui
+ imap <buffer> <unique> <LocalLeader>t <Plug>TranslatorInfo
+ nmap <buffer> <unique> <LocalLeader>t <Plug>TranslatorInfo
+ else
+ imap <buffer> <unique> <LocalLeader>t <Plug>TranslatorInfo
+ nmap <buffer> <unique> <LocalLeader>t <Plug>TranslatorInfo
+ endif
+endif
+inoremap <buffer> <unique> <Plug>TranslatorInfo <ESC>:call <SID>AddHeaderInfo('person')<CR>i
+nnoremap <buffer> <unique> <Plug>TranslatorInfo :call <SID>AddHeaderInfo('person')<CR>
+
+" Add language team info in the file header.
+if !hasmapto('<Plug>LangTeamInfo')
+ if gui
+ imap <buffer> <unique> <LocalLeader>l <Plug>LangTeamInfo
+ nmap <buffer> <unique> <LocalLeader>l <Plug>LangTeamInfo
+ else
+ imap <buffer> <unique> <LocalLeader>l <Plug>LangTeamInfo
+ nmap <buffer> <unique> <LocalLeader>l <Plug>LangTeamInfo
+ endif
+endif
+inoremap <buffer> <unique> <Plug>LangTeamInfo <ESC>:call <SID>AddHeaderInfo('team')<CR>i
+nnoremap <buffer> <unique> <Plug>LangTeamInfo :call <SID>AddHeaderInfo('team')<CR>
+
+fu! <SID>AddHeaderInfo(action)
+ if a:action == 'person'
+ let search_for = 'Last-Translator'
+ if exists("g:po_translator")
+ let add = g:po_translator
+ else
+ let add = 'YOUR NAME <E-MAIL@ADDRESS>'
+ endif
+ elseif a:action == 'team'
+ let search_for = 'Language-Team'
+ if exists("g:po_lang_team")
+ let add = g:po_lang_team
+ else
+ let add = 'LANGUAGE TEAM <E-MAIL@ADDRESS or HOME PAGE>'
+ endif
+ else
+ " Undefined action -- just do nothing.
+ return
+ endif
+ let search_for = '"' . search_for . ':'
+ let add = add . '\\n"'
+
+ normal! 1G
+ if search('^' . search_for)
+ silent! exe 's/^\(' . search_for . '\).*$/\1 ' . add
+ endif
+ call histdel("/", -1)
+endf
+
+" Write automagically PO-formatted time stamp every time the file is saved.
+augroup PoFileTimestamp
+ au!
+ au BufWrite *.po,*.po.gz call <SID>PoFileTimestamp()
+augroup END
+
+fu! <SID>PoFileTimestamp()
+ " Prepare for cleanup at the end of this function.
+ let hist_search = histnr("/")
+ let old_report = 'set report='.&report
+ let &report = 100
+ let cursor_pos_cmd = line(".").'normal! '.virtcol(".").'|'
+ normal! H
+ let scrn_pos = line(".").'normal! zt'
+
+ " Put in time stamp.
+ normal! 1G
+ if search('^"PO-Revision-Date:')
+ silent! exe 's/^\("PO-Revision-Date:\).*$/\1 ' . strftime("%Y-%m-%d %H:%M%z") . '\\n"'
+ endif
+
+ " Cleanup and restore old cursor position.
+ while histnr("/") > hist_search && histnr("/") > 0
+ call histdel("/", -1)
+ endwhile
+ exe scrn_pos
+ exe cursor_pos_cmd
+ exe old_report
+endf
+
+" On "gf" Normal mode command, split window and open the file under the
+" cursor.
+if !hasmapto('<Plug>OpenSourceFile')
+ map <buffer> <unique> gf <Plug>OpenSourceFile
+endif
+noremap <buffer> <unique> <Plug>OpenSourceFile :call <SID>OpenSourceFile()<CR>
+
+" This opens the file under the cursor in a split-window.
+fu! <SID>OpenSourceFile()
+ " Check if we're at the right line. Return if not.
+ if getline(".") !~ '^#:\s\+' | return | endif
+
+ " Get the reference, check it, and return if it doesn't have the assumed
+ " format.
+ let ref = expand("<cWORD>")
+ if ref !~ ':\d\+$' | return | endif
+
+ " Split the reference into the file name and the line number parts.
+ let d = match(ref, ':')
+ let flnm = strpart(ref, 0, d)
+ let lnr = strpart(ref, d+1, 100)
+
+ " Start searching for the file in the directories specified with the 'path'
+ " option.
+ let ff = globpath(&path, flnm)
+
+ " Check what's been found. Report if no or more than one file found and
+ " return.
+ if ff == ''
+ echohl WarningMsg | echo "No file found in the path."
+ echohl None
+ exe "normal \<Esc>"
+ elseif match(ff, "\n") > 0
+ echohl WarningMsg | echo "More than one file found: " . ff . "\nAborting."
+ echohl None
+ exe "normal \<Esc>"
+ else
+ " Split the window and open the file at the correct line.
+ execute "silent sp +" . lnr . " " . ff
+ endif
+endf
+
+unlet gui
diff --git a/dot_vim/ftplugin/pythoncomplete.vim b/dot_vim/ftplugin/pythoncomplete.vim
new file mode 100644
index 0000000..57add71
--- /dev/null
+++ b/dot_vim/ftplugin/pythoncomplete.vim
@@ -0,0 +1,625 @@
+"pythoncomplete.vim - Omni Completion for python
+" Maintainer: Aaron Griffin <aaronmgriffin@gmail.com>
+" Version: 0.9
+" Last Updated: 18 Jun 2009
+"
+" Changes
+" TODO:
+" 'info' item output can use some formatting work
+" Add an "unsafe eval" mode, to allow for return type evaluation
+" Complete basic syntax along with import statements
+" i.e. "import url<c-x,c-o>"
+" Continue parsing on invalid line??
+"
+" v 0.9
+" * Fixed docstring parsing for classes and functions
+" * Fixed parsing of *args and **kwargs type arguments
+" * Better function param parsing to handle things like tuples and
+" lambda defaults args
+"
+" v 0.8
+" * Fixed an issue where the FIRST assignment was always used instead of
+" using a subsequent assignment for a variable
+" * Fixed a scoping issue when working inside a parameterless function
+"
+"
+" v 0.7
+" * Fixed function list sorting (_ and __ at the bottom)
+" * Removed newline removal from docs. It appears vim handles these better in
+" recent patches
+"
+" v 0.6:
+" * Fixed argument completion
+" * Removed the 'kind' completions, as they are better indicated
+" with real syntax
+" * Added tuple assignment parsing (whoops, that was forgotten)
+" * Fixed import handling when flattening scope
+"
+" v 0.5:
+" Yeah, I skipped a version number - 0.4 was never public.
+" It was a bugfix version on top of 0.3. This is a complete
+" rewrite.
+"
+
+if !has('python')
+ echo "Error: Required vim compiled with +python"
+ finish
+endif
+
+function! pythoncomplete#Complete(findstart, base)
+ "findstart = 1 when we need to get the text length
+ if a:findstart == 1
+ let line = getline('.')
+ let idx = col('.')
+ while idx > 0
+ let idx -= 1
+ let c = line[idx]
+ if c =~ '\w'
+ continue
+ elseif ! c =~ '\.'
+ let idx = -1
+ break
+ else
+ break
+ endif
+ endwhile
+
+ return idx
+ "findstart = 0 when we need to return the list of completions
+ else
+ "vim no longer moves the cursor upon completion... fix that
+ let line = getline('.')
+ let idx = col('.')
+ let cword = ''
+ while idx > 0
+ let idx -= 1
+ let c = line[idx]
+ if c =~ '\w' || c =~ '\.'
+ let cword = c . cword
+ continue
+ elseif strlen(cword) > 0 || idx == 0
+ break
+ endif
+ endwhile
+ execute "python vimcomplete('" . cword . "', '" . a:base . "')"
+ return g:pythoncomplete_completions
+ endif
+endfunction
+
+function! s:DefPython()
+python << PYTHONEOF
+import sys, tokenize, cStringIO, types
+from token import NAME, DEDENT, NEWLINE, STRING
+
+debugstmts=[]
+def dbg(s): debugstmts.append(s)
+def showdbg():
+ for d in debugstmts: print "DBG: %s " % d
+
+def vimcomplete(context,match):
+ global debugstmts
+ debugstmts = []
+ try:
+ import vim
+ def complsort(x,y):
+ try:
+ xa = x['abbr']
+ ya = y['abbr']
+ if xa[0] == '_':
+ if xa[1] == '_' and ya[0:2] == '__':
+ return xa > ya
+ elif ya[0:2] == '__':
+ return -1
+ elif y[0] == '_':
+ return xa > ya
+ else:
+ return 1
+ elif ya[0] == '_':
+ return -1
+ else:
+ return xa > ya
+ except:
+ return 0
+ cmpl = Completer()
+ cmpl.evalsource('\n'.join(vim.current.buffer),vim.eval("line('.')"))
+ all = cmpl.get_completions(context,match)
+ all.sort(complsort)
+ dictstr = '['
+ # have to do this for double quoting
+ for cmpl in all:
+ dictstr += '{'
+ for x in cmpl: dictstr += '"%s":"%s",' % (x,cmpl[x])
+ dictstr += '"icase":0},'
+ if dictstr[-1] == ',': dictstr = dictstr[:-1]
+ dictstr += ']'
+ #dbg("dict: %s" % dictstr)
+ vim.command("silent let g:pythoncomplete_completions = %s" % dictstr)
+ #dbg("Completion dict:\n%s" % all)
+ except vim.error:
+ dbg("VIM Error: %s" % vim.error)
+
+class Completer(object):
+ def __init__(self):
+ self.compldict = {}
+ self.parser = PyParser()
+
+ def evalsource(self,text,line=0):
+ sc = self.parser.parse(text,line)
+ src = sc.get_code()
+ dbg("source: %s" % src)
+ try: exec(src) in self.compldict
+ except: dbg("parser: %s, %s" % (sys.exc_info()[0],sys.exc_info()[1]))
+ for l in sc.locals:
+ try: exec(l) in self.compldict
+ except: dbg("locals: %s, %s [%s]" % (sys.exc_info()[0],sys.exc_info()[1],l))
+
+ def _cleanstr(self,doc):
+ return doc.replace('"',' ').replace("'",' ')
+
+ def get_arguments(self,func_obj):
+ def _ctor(obj):
+ try: return class_ob.__init__.im_func
+ except AttributeError:
+ for base in class_ob.__bases__:
+ rc = _find_constructor(base)
+ if rc is not None: return rc
+ return None
+
+ arg_offset = 1
+ if type(func_obj) == types.ClassType: func_obj = _ctor(func_obj)
+ elif type(func_obj) == types.MethodType: func_obj = func_obj.im_func
+ else: arg_offset = 0
+
+ arg_text=''
+ if type(func_obj) in [types.FunctionType, types.LambdaType]:
+ try:
+ cd = func_obj.func_code
+ real_args = cd.co_varnames[arg_offset:cd.co_argcount]
+ defaults = func_obj.func_defaults or ''
+ defaults = map(lambda name: "=%s" % name, defaults)
+ defaults = [""] * (len(real_args)-len(defaults)) + defaults
+ items = map(lambda a,d: a+d, real_args, defaults)
+ if func_obj.func_code.co_flags & 0x4:
+ items.append("...")
+ if func_obj.func_code.co_flags & 0x8:
+ items.append("***")
+ arg_text = (','.join(items)) + ')'
+
+ except:
+ dbg("arg completion: %s: %s" % (sys.exc_info()[0],sys.exc_info()[1]))
+ pass
+ if len(arg_text) == 0:
+ # The doc string sometimes contains the function signature
+ # this works for alot of C modules that are part of the
+ # standard library
+ doc = func_obj.__doc__
+ if doc:
+ doc = doc.lstrip()
+ pos = doc.find('\n')
+ if pos > 0:
+ sigline = doc[:pos]
+ lidx = sigline.find('(')
+ ridx = sigline.find(')')
+ if lidx > 0 and ridx > 0:
+ arg_text = sigline[lidx+1:ridx] + ')'
+ if len(arg_text) == 0: arg_text = ')'
+ return arg_text
+
+ def get_completions(self,context,match):
+ dbg("get_completions('%s','%s')" % (context,match))
+ stmt = ''
+ if context: stmt += str(context)
+ if match: stmt += str(match)
+ try:
+ result = None
+ all = {}
+ ridx = stmt.rfind('.')
+ if len(stmt) > 0 and stmt[-1] == '(':
+ result = eval(_sanitize(stmt[:-1]), self.compldict)
+ doc = result.__doc__
+ if doc is None: doc = ''
+ args = self.get_arguments(result)
+ return [{'word':self._cleanstr(args),'info':self._cleanstr(doc)}]
+ elif ridx == -1:
+ match = stmt
+ all = self.compldict
+ else:
+ match = stmt[ridx+1:]
+ stmt = _sanitize(stmt[:ridx])
+ result = eval(stmt, self.compldict)
+ all = dir(result)
+
+ dbg("completing: stmt:%s" % stmt)
+ completions = []
+
+ try: maindoc = result.__doc__
+ except: maindoc = ' '
+ if maindoc is None: maindoc = ' '
+ for m in all:
+ if m == "_PyCmplNoType": continue #this is internal
+ try:
+ dbg('possible completion: %s' % m)
+ if m.find(match) == 0:
+ if result is None: inst = all[m]
+ else: inst = getattr(result,m)
+ try: doc = inst.__doc__
+ except: doc = maindoc
+ typestr = str(inst)
+ if doc is None or doc == '': doc = maindoc
+
+ wrd = m[len(match):]
+ c = {'word':wrd, 'abbr':m, 'info':self._cleanstr(doc)}
+ if "function" in typestr:
+ c['word'] += '('
+ c['abbr'] += '(' + self._cleanstr(self.get_arguments(inst))
+ elif "method" in typestr:
+ c['word'] += '('
+ c['abbr'] += '(' + self._cleanstr(self.get_arguments(inst))
+ elif "module" in typestr:
+ c['word'] += '.'
+ elif "class" in typestr:
+ c['word'] += '('
+ c['abbr'] += '('
+ completions.append(c)
+ except:
+ i = sys.exc_info()
+ dbg("inner completion: %s,%s [stmt='%s']" % (i[0],i[1],stmt))
+ return completions
+ except:
+ i = sys.exc_info()
+ dbg("completion: %s,%s [stmt='%s']" % (i[0],i[1],stmt))
+ return []
+
+class Scope(object):
+ def __init__(self,name,indent,docstr=''):
+ self.subscopes = []
+ self.docstr = docstr
+ self.locals = []
+ self.parent = None
+ self.name = name
+ self.indent = indent
+
+ def add(self,sub):
+ #print 'push scope: [%s@%s]' % (sub.name,sub.indent)
+ sub.parent = self
+ self.subscopes.append(sub)
+ return sub
+
+ def doc(self,str):
+ """ Clean up a docstring """
+ d = str.replace('\n',' ')
+ d = d.replace('\t',' ')
+ while d.find(' ') > -1: d = d.replace(' ',' ')
+ while d[0] in '"\'\t ': d = d[1:]
+ while d[-1] in '"\'\t ': d = d[:-1]
+ dbg("Scope(%s)::docstr = %s" % (self,d))
+ self.docstr = d
+
+ def local(self,loc):
+ self._checkexisting(loc)
+ self.locals.append(loc)
+
+ def copy_decl(self,indent=0):
+ """ Copy a scope's declaration only, at the specified indent level - not local variables """
+ return Scope(self.name,indent,self.docstr)
+
+ def _checkexisting(self,test):
+ "Convienance function... keep out duplicates"
+ if test.find('=') > -1:
+ var = test.split('=')[0].strip()
+ for l in self.locals:
+ if l.find('=') > -1 and var == l.split('=')[0].strip():
+ self.locals.remove(l)
+
+ def get_code(self):
+ str = ""
+ if len(self.docstr) > 0: str += '"""'+self.docstr+'"""\n'
+ for l in self.locals:
+ if l.startswith('import'): str += l+'\n'
+ str += 'class _PyCmplNoType:\n def __getattr__(self,name):\n return None\n'
+ for sub in self.subscopes:
+ str += sub.get_code()
+ for l in self.locals:
+ if not l.startswith('import'): str += l+'\n'
+
+ return str
+
+ def pop(self,indent):
+ #print 'pop scope: [%s] to [%s]' % (self.indent,indent)
+ outer = self
+ while outer.parent != None and outer.indent >= indent:
+ outer = outer.parent
+ return outer
+
+ def currentindent(self):
+ #print 'parse current indent: %s' % self.indent
+ return ' '*self.indent
+
+ def childindent(self):
+ #print 'parse child indent: [%s]' % (self.indent+1)
+ return ' '*(self.indent+1)
+
+class Class(Scope):
+ def __init__(self, name, supers, indent, docstr=''):
+ Scope.__init__(self,name,indent, docstr)
+ self.supers = supers
+ def copy_decl(self,indent=0):
+ c = Class(self.name,self.supers,indent, self.docstr)
+ for s in self.subscopes:
+ c.add(s.copy_decl(indent+1))
+ return c
+ def get_code(self):
+ str = '%sclass %s' % (self.currentindent(),self.name)
+ if len(self.supers) > 0: str += '(%s)' % ','.join(self.supers)
+ str += ':\n'
+ if len(self.docstr) > 0: str += self.childindent()+'"""'+self.docstr+'"""\n'
+ if len(self.subscopes) > 0:
+ for s in self.subscopes: str += s.get_code()
+ else:
+ str += '%spass\n' % self.childindent()
+ return str
+
+
+class Function(Scope):
+ def __init__(self, name, params, indent, docstr=''):
+ Scope.__init__(self,name,indent, docstr)
+ self.params = params
+ def copy_decl(self,indent=0):
+ return Function(self.name,self.params,indent, self.docstr)
+ def get_code(self):
+ str = "%sdef %s(%s):\n" % \
+ (self.currentindent(),self.name,','.join(self.params))
+ if len(self.docstr) > 0: str += self.childindent()+'"""'+self.docstr+'"""\n'
+ str += "%spass\n" % self.childindent()
+ return str
+
+class PyParser:
+ def __init__(self):
+ self.top = Scope('global',0)
+ self.scope = self.top
+
+ def _parsedotname(self,pre=None):
+ #returns (dottedname, nexttoken)
+ name = []
+ if pre is None:
+ tokentype, token, indent = self.next()
+ if tokentype != NAME and token != '*':
+ return ('', token)
+ else: token = pre
+ name.append(token)
+ while True:
+ tokentype, token, indent = self.next()
+ if token != '.': break
+ tokentype, token, indent = self.next()
+ if tokentype != NAME: break
+ name.append(token)
+ return (".".join(name), token)
+
+ def _parseimportlist(self):
+ imports = []
+ while True:
+ name, token = self._parsedotname()
+ if not name: break
+ name2 = ''
+ if token == 'as': name2, token = self._parsedotname()
+ imports.append((name, name2))
+ while token != "," and "\n" not in token:
+ tokentype, token, indent = self.next()
+ if token != ",": break
+ return imports
+
+ def _parenparse(self):
+ name = ''
+ names = []
+ level = 1
+ while True:
+ tokentype, token, indent = self.next()
+ if token in (')', ',') and level == 1:
+ if '=' not in name: name = name.replace(' ', '')
+ names.append(name.strip())
+ name = ''
+ if token == '(':
+ level += 1
+ name += "("
+ elif token == ')':
+ level -= 1
+ if level == 0: break
+ else: name += ")"
+ elif token == ',' and level == 1:
+ pass
+ else:
+ name += "%s " % str(token)
+ return names
+
+ def _parsefunction(self,indent):
+ self.scope=self.scope.pop(indent)
+ tokentype, fname, ind = self.next()
+ if tokentype != NAME: return None
+
+ tokentype, open, ind = self.next()
+ if open != '(': return None
+ params=self._parenparse()
+
+ tokentype, colon, ind = self.next()
+ if colon != ':': return None
+
+ return Function(fname,params,indent)
+
+ def _parseclass(self,indent):
+ self.scope=self.scope.pop(indent)
+ tokentype, cname, ind = self.next()
+ if tokentype != NAME: return None
+
+ super = []
+ tokentype, next, ind = self.next()
+ if next == '(':
+ super=self._parenparse()
+ elif next != ':': return None
+
+ return Class(cname,super,indent)
+
+ def _parseassignment(self):
+ assign=''
+ tokentype, token, indent = self.next()
+ if tokentype == tokenize.STRING or token == 'str':
+ return '""'
+ elif token == '(' or token == 'tuple':
+ return '()'
+ elif token == '[' or token == 'list':
+ return '[]'
+ elif token == '{' or token == 'dict':
+ return '{}'
+ elif tokentype == tokenize.NUMBER:
+ return '0'
+ elif token == 'open' or token == 'file':
+ return 'file'
+ elif token == 'None':
+ return '_PyCmplNoType()'
+ elif token == 'type':
+ return 'type(_PyCmplNoType)' #only for method resolution
+ else:
+ assign += token
+ level = 0
+ while True:
+ tokentype, token, indent = self.next()
+ if token in ('(','{','['):
+ level += 1
+ elif token in (']','}',')'):
+ level -= 1
+ if level == 0: break
+ elif level == 0:
+ if token in (';','\n'): break
+ assign += token
+ return "%s" % assign
+
+ def next(self):
+ type, token, (lineno, indent), end, self.parserline = self.gen.next()
+ if lineno == self.curline:
+ #print 'line found [%s] scope=%s' % (line.replace('\n',''),self.scope.name)
+ self.currentscope = self.scope
+ return (type, token, indent)
+
+ def _adjustvisibility(self):
+ newscope = Scope('result',0)
+ scp = self.currentscope
+ while scp != None:
+ if type(scp) == Function:
+ slice = 0
+ #Handle 'self' params
+ if scp.parent != None and type(scp.parent) == Class:
+ slice = 1
+ newscope.local('%s = %s' % (scp.params[0],scp.parent.name))
+ for p in scp.params[slice:]:
+ i = p.find('=')
+ if len(p) == 0: continue
+ pvar = ''
+ ptype = ''
+ if i == -1:
+ pvar = p
+ ptype = '_PyCmplNoType()'
+ else:
+ pvar = p[:i]
+ ptype = _sanitize(p[i+1:])
+ if pvar.startswith('**'):
+ pvar = pvar[2:]
+ ptype = '{}'
+ elif pvar.startswith('*'):
+ pvar = pvar[1:]
+ ptype = '[]'
+
+ newscope.local('%s = %s' % (pvar,ptype))
+
+ for s in scp.subscopes:
+ ns = s.copy_decl(0)
+ newscope.add(ns)
+ for l in scp.locals: newscope.local(l)
+ scp = scp.parent
+
+ self.currentscope = newscope
+ return self.currentscope
+
+ #p.parse(vim.current.buffer[:],vim.eval("line('.')"))
+ def parse(self,text,curline=0):
+ self.curline = int(curline)
+ buf = cStringIO.StringIO(''.join(text) + '\n')
+ self.gen = tokenize.generate_tokens(buf.readline)
+ self.currentscope = self.scope
+
+ try:
+ freshscope=True
+ while True:
+ tokentype, token, indent = self.next()
+ #dbg( 'main: token=[%s] indent=[%s]' % (token,indent))
+
+ if tokentype == DEDENT or token == "pass":
+ self.scope = self.scope.pop(indent)
+ elif token == 'def':
+ func = self._parsefunction(indent)
+ if func is None:
+ print "function: syntax error..."
+ continue
+ dbg("new scope: function")
+ freshscope = True
+ self.scope = self.scope.add(func)
+ elif token == 'class':
+ cls = self._parseclass(indent)
+ if cls is None:
+ print "class: syntax error..."
+ continue
+ freshscope = True
+ dbg("new scope: class")
+ self.scope = self.scope.add(cls)
+
+ elif token == 'import':
+ imports = self._parseimportlist()
+ for mod, alias in imports:
+ loc = "import %s" % mod
+ if len(alias) > 0: loc += " as %s" % alias
+ self.scope.local(loc)
+ freshscope = False
+ elif token == 'from':
+ mod, token = self._parsedotname()
+ if not mod or token != "import":
+ print "from: syntax error..."
+ continue
+ names = self._parseimportlist()
+ for name, alias in names:
+ loc = "from %s import %s" % (mod,name)
+ if len(alias) > 0: loc += " as %s" % alias
+ self.scope.local(loc)
+ freshscope = False
+ elif tokentype == STRING:
+ if freshscope: self.scope.doc(token)
+ elif tokentype == NAME:
+ name,token = self._parsedotname(token)
+ if token == '=':
+ stmt = self._parseassignment()
+ dbg("parseassignment: %s = %s" % (name, stmt))
+ if stmt != None:
+ self.scope.local("%s = %s" % (name,stmt))
+ freshscope = False
+ except StopIteration: #thrown on EOF
+ pass
+ except:
+ dbg("parse error: %s, %s @ %s" %
+ (sys.exc_info()[0], sys.exc_info()[1], self.parserline))
+ return self._adjustvisibility()
+
+def _sanitize(str):
+ val = ''
+ level = 0
+ for c in str:
+ if c in ('(','{','['):
+ level += 1
+ elif c in (']','}',')'):
+ level -= 1
+ elif level == 0:
+ val += c
+ return val
+
+sys.path.extend(['.','..'])
+PYTHONEOF
+endfunction
+
+call s:DefPython()
+" vim: set et ts=4:
diff --git a/dot_vim/ftplugin/tex.vim b/dot_vim/ftplugin/tex.vim
new file mode 100644
index 0000000..e1d7438
--- /dev/null
+++ b/dot_vim/ftplugin/tex.vim
@@ -0,0 +1,10 @@
+" this is mostly a matter of taste. but LaTeX looks good with just a bit
+" of indentation.
+set sw=2
+" TIP: if you write your \label's as \label{fig:something}, then if you
+" type in \ref{fig: and press <C-n> you will automatically cycle through
+" all the figure labels. Very useful!
+set iskeyword+=:
+
+" So I can use e-acute
+imap <buffer> <leader>it <Plug>Tex_InsertItemOnThisLine
diff --git a/dot_vim/ftplugin/tex_latexSuite.vim b/dot_vim/ftplugin/tex_latexSuite.vim
new file mode 100644
index 0000000..582d014
--- /dev/null
+++ b/dot_vim/ftplugin/tex_latexSuite.vim
@@ -0,0 +1,13 @@
+" LaTeX filetype
+" Language: LaTeX (ft=tex)
+" Maintainer: Srinath Avadhanula
+" Email: srinath@fastmail.fm
+
+if !exists('s:initLatexSuite')
+ let s:initLatexSuite = 1
+ exec 'so '.expand('<sfile>:p:h').'/latex-suite/main.vim'
+
+ silent! do LatexSuite User LatexSuiteInitPost
+endif
+
+silent! do LatexSuite User LatexSuiteFileType