diff options
Diffstat (limited to 'dot_vim/ftplugin')
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 = { '<': '<', '>': '>', '&': '\\&' } + 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 Binary files differnew file mode 100644 index 0000000..c79961f --- /dev/null +++ b/dot_vim/ftplugin/latex-suite/bibtools.pyc 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 Binary files differnew file mode 100644 index 0000000..8049cdc --- /dev/null +++ b/dot_vim/ftplugin/latex-suite/outline.pyc 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 |