Mercurial > vim
diff runtime/indent/tex.vim @ 3445:2cfb68fa26cd
Updated runtime files.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 28 Mar 2012 20:51:51 +0200 |
parents | 91e53bcb7946 |
children | eb6ab7e78925 |
line wrap: on
line diff
--- a/runtime/indent/tex.vim +++ b/runtime/indent/tex.vim @@ -1,33 +1,54 @@ " Vim indent file " Language: LaTeX -" Maintainer: Zhou YiChao <broken.zhou@gmail.com> +" Maintainer: Zhou YiChao <broken.zhou AT gmail.com> " Created: Sat, 16 Feb 2002 16:50:19 +0100 -" Last Change: 2011 Dec 24 -" Last Update: 25th Sep 2002, by LH : +" Last Change: 2012 Mar 18 19:19:50 +" Version: 0.7 +" Please email me if you found something we can do. Bug report and +" feature request is welcome. + +" Last Update: {{{ +" 25th Sep 2002, by LH : " (*) better support for the option " (*) use some regex instead of several '||'. " Oct 9th, 2003, by JT: " (*) don't change indentation of lines starting with '%' -" 2005/06/15, Moshe Kaminsky <kaminsky@math.huji.ac.il> +" 2005/06/15, Moshe Kaminsky <kaminsky AT math.huji.ac.il> " (*) New variables: " g:tex_items, g:tex_itemize_env, g:tex_noindent_env -" 2011/3/6, by Zhou YiChao <broken.zhou@gmail.com> +" 2011/3/6, by Zhou YiChao <broken.zhou AT gmail.com> " (*) Don't change indentation of lines starting with '%' " I don't see any code with '%' and it doesn't work properly " so I add some code. " (*) New features: Add smartindent-like indent for "{}" and "[]". " (*) New variables: g:tex_indent_brace -" 2011/9/25, by Zhou Yichao <broken.zhou@gmail.com> +" 2011/9/25, by Zhou Yichao <broken.zhou AT gmail.com> " (*) Bug fix: smartindent-like indent for "[]" " (*) New features: Align with "&". -" (*) New variable: g:tex_indent_and -" 2011/10/23 by Zhou Yichao <broken.zhou@gmail.com> +" (*) New variable: g:tex_indent_and. +" 2011/10/23 by Zhou Yichao <broken.zhou AT gmail.com> " (*) Bug fix: improve the smartindent-like indent for "{}" and " "[]". -" -" Version: 0.62 +" 2012/02/27 by Zhou Yichao <broken.zhou AT gmail.com> +" (*) Bug fix: support default folding marker. +" (*) Indent with "&" is not very handy. Make it not enable by +" default. +" 2012/03/06 by Zhou Yichao <broken.zhou AT gmail.com> +" (*) Modify "&" behavior and make it default again. Now "&" +" won't align when there are more then one "&" in the previous +" line. +" (*) Add indent "\left(" and "\right)" +" (*) Trust user when in "verbatim" and "lstlisting" +" 2012/03/11 by Zhou Yichao <broken.zhou AT gmail.com> +" (*) Modify "&" so that only indent when current line start with +" "&". +" 2012/03/12 by Zhou Yichao <broken.zhou AT gmail.com> +" (*) Modify indentkeys. +" 2012/03/18 by Zhou Yichao <broken.zhou AT gmail.com> +" (*) Add &cpo +" }}} -" Options: {{{ +" Document: {{{ " " To set the following options (ok, currently it's just one), add a line like " let g:tex_indent_items = 1 @@ -37,42 +58,42 @@ " " If this variable is unset or non-zero, it will use smartindent-like style " for "{}" and "[]" -" +" " * g:tex_indent_items " " If this variable is set, item-environments are indented like Emacs does " it, i.e., continuation lines are indented with a shiftwidth. -" +" " NOTE: I've already set the variable below; delete the corresponding line " if you don't like this behaviour. " " Per default, it is unset. -" +" " set unset " ---------------------------------------------------------------- -" \begin{itemize} \begin{itemize} +" \begin{itemize} \begin{itemize} " \item blablabla \item blablabla -" bla bla bla bla bla bla +" bla bla bla bla bla bla " \item blablabla \item blablabla -" bla bla bla bla bla bla -" \end{itemize} \end{itemize} +" bla bla bla bla bla bla +" \end{itemize} \end{itemize} " " " * g:tex_items " -" A list of tokens to be considered as commands for the beginning of an item -" command. The tokens should be separated with '\|'. The initial '\' should +" A list of tokens to be considered as commands for the beginning of an item +" command. The tokens should be separated with '\|'. The initial '\' should " be escaped. The default is '\\bibitem\|\\item'. " " * g:tex_itemize_env -" -" A list of environment names, separated with '\|', where the items (item -" commands matching g:tex_items) may appear. The default is +" +" A list of environment names, separated with '\|', where the items (item +" commands matching g:tex_items) may appear. The default is " 'itemize\|description\|enumerate\|thebibliography'. " " * g:tex_noindent_env " -" A list of environment names. separated with '\|', where no indentation is +" A list of environment names. separated with '\|', where no indentation is " required. The default is 'document\|verbatim'. " " * g:tex_indent_and @@ -82,14 +103,24 @@ " Note that this feature need to search back some line, so vim may become " a little slow. " -" }}} +" }}} + +" Only define the function once +if exists("*GetTeXIndent") + finish +endif if exists("b:did_indent") finish endif + +let s:cpo_save = &cpo +set cpo&vim + +" Define global variable {{{ + let b:did_indent = 1 -" Delete the next line to avoid the special indention of items if !exists("g:tex_indent_items") let g:tex_indent_items = 1 endif @@ -104,31 +135,30 @@ if g:tex_indent_items let g:tex_itemize_env = 'itemize\|description\|enumerate\|thebibliography' endif if !exists('g:tex_items') - let g:tex_items = '\\bibitem\|\\item' + let g:tex_items = '\\bibitem\|\\item' endif else let g:tex_items = '' endif +if !exists("g:tex_indent_paretheses") + let g:tex_indent_paretheses = 1 +endif + if !exists("g:tex_noindent_env") let g:tex_noindent_env = 'document\|verbatim\|lstlisting' -endif +endif "}}} +" VIM Setting " {{{ setlocal autoindent setlocal nosmartindent setlocal indentexpr=GetTeXIndent() -exec 'setlocal indentkeys+=},],\&' . substitute(g:tex_items, '^\|\(\\|\)', ',=', 'g') -let g:tex_items = '^\s*' . g:tex_items - +setlocal indentkeys& +exec 'setlocal indentkeys+=[,(,{,),},],\&' . substitute(g:tex_items, '^\|\(\\|\)', ',=', 'g') +let g:tex_items = '^\s*' . substitute(g:tex_items, '^\(\^\\s\*\)*', '', '') +" }}} -" Only define the function once -if exists("*GetTeXIndent") | finish -endif - -let s:cpo_save = &cpo -set cpo&vim - -function GetTeXIndent() +function GetTeXIndent() " {{{ " Find a non-blank line above the current line. let lnum = prevnonblank(v:lnum - 1) @@ -139,16 +169,25 @@ function GetTeXIndent() " At the start of the file use zero indent. if lnum == 0 - return 0 + return 0 endif - let line = getline(lnum) " last line - let cline = getline(v:lnum) " current line + let line = substitute(getline(lnum), '%.*', ' ','g') " last line + let cline = substitute(getline(v:lnum), '%.*', ' ', 'g') " current line + " We are in verbatim, so do what our user what. + if synIDattr(synID(v:lnum, indent(v:lnum), 1), "name") == "texZone" + if empty(cline) + return indent(lnum) + else + return indent(v:lnum) + end + endif + " You want to align with "&" if g:tex_indent_and - " Align with last line if last line has a "&" - if stridx(cline, "&") != -1 && stridx(line, "&") != -1 + " Align only when current line start with "&" + if line =~ '&.*\\\\' && cline =~ '^\s*&' return indent(v:lnum) + stridx(line, "&") - stridx(cline, "&") endif @@ -161,7 +200,7 @@ function GetTeXIndent() if lnum == 0 - return 0 + return 0 endif let ind = indent(lnum) @@ -173,12 +212,10 @@ function GetTeXIndent() " Add a 'shiftwidth' after beginning of environments. " Don't add it for \begin{document} and \begin{verbatim} - ""if line =~ '^\s*\\begin{\(.*\)}' && line !~ 'verbatim' + ""if line =~ '^\s*\\begin{\(.*\)}' && line !~ 'verbatim' " LH modification : \begin does not always start a line " ZYC modification : \end after \begin won't cause wrong indent anymore if line =~ '\\begin{.*}' && line !~ g:tex_noindent_env - \ && line !~ '\\begin{.\{-}}.*\\end{.*}' - let ind = ind + &sw if g:tex_indent_items @@ -189,9 +226,8 @@ function GetTeXIndent() endif endif - " Subtract a 'shiftwidth' when an environment ends - if cline =~ '^\s*\\end' && cline !~ g:tex_noindent_env + if cline =~ '\\end{.*}' && cline !~ g:tex_noindent_env if g:tex_indent_items " Remove another sw for item-environments @@ -204,23 +240,26 @@ function GetTeXIndent() endif if g:tex_indent_brace - " Add a 'shiftwidth' after a "{" or "[". let sum1 = 0 for i in range(0, strlen(line)-1) - if line[i] == "}" || line[i] == "]" + if line[i] == "}" || line[i] == "]" || + \ strpart(line, i, 7) == '\right)' let sum1 = max([0, sum1-1]) endif - if line[i] == "{" || line[i] == "[" + if line[i] == "{" || line[i] == "[" || + \ strpart(line, i, 6) == '\left(' let sum1 += 1 endif endfor let sum2 = 0 for i in reverse(range(0, strlen(cline)-1)) - if cline[i] == "{" || cline[i] == "[" + if cline[i] == "{" || cline[i] == "[" || + \ strpart(cline, i, 6) == '\left(' let sum2 = max([0, sum2-1]) endif - if cline[i] == "}" || cline[i] == "]" + if cline[i] == "}" || cline[i] == "]" || + \ strpart(cline, i, 7) == '\right)' let sum2 += 1 endif endfor @@ -228,6 +267,8 @@ function GetTeXIndent() let ind += (sum1 - sum2) * &sw endif + if g:tex_indent_paretheses + endif " Special treatment for 'item' " ---------------------------- @@ -247,7 +288,7 @@ function GetTeXIndent() endif return ind -endfunction +endfunction "}}} let &cpo = s:cpo_save unlet s:cpo_save