aboutsummaryrefslogtreecommitdiff
path: root/dot_vim/indent/tex.vim
blob: 5823dae4e8deaa6df8fe5900330e2bf2955f314a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
" Vim indent file
" Language:     LaTeX
" Maintainer:   Johannes Tanzler <jtanzler@yline.com>
" Created:      Sat, 16 Feb 2002 16:50:19 +0100
" Last Change:	Sun, 17 Feb 2002 00:09:11 +0100
" Last Update:  18th feb 2002, by LH :
"               (*) better support for the option
"               (*) use some regex instead of several '||'.
" Version: 0.02
" URL: comming soon: http://www.unet.univie.ac.at/~a9925098/vim/indent/tex.vim

" --> If you're a Vim guru & and you find something that could be done in a
"     better (perhaps in a more Vim-ish or Vi-ish) way, please let me know! 

" Options: {{{
"
" To set the following options (ok, currently it's just one), add a line like
"   let g:tex_indent_items = 1
" to your ~/.vimrc.
"
" * 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}  
"         \item blablabla                      \item blablabla
"           bla bla bla                        bla bla bla  
"         \item blablabla                      \item blablabla
"           bla bla bla                        bla bla bla  
"       \end{itemize}                        \end{itemize}    
"
"
"   This option applies to itemize, description, enumerate, and
"   thebibliography.
"
" }}} 

" Delete the next line to avoid the special indention of items
if !exists("g:tex_indent_items")
  let g:tex_indent_items = 1
endif

if exists("b:did_indent") | finish
endif
let b:did_indent = 1


setlocal indentexpr=GetTeXIndent()
setlocal nolisp
setlocal nosmartindent
setlocal autoindent
setlocal indentkeys+=},=\\item,=\\bibitem


" Only define the function once
if exists("*GetTeXIndent") | finish
endif



function GetTeXIndent()

  " Find a non-blank line above the current line.
  let lnum = prevnonblank(v:lnum - 1)

  " At the start of the file use zero indent.
  if lnum == 0 | return 0 
  endif

  let ind = indent(lnum)
  let line = getline(lnum)             " last line
  let cline = getline(v:lnum)          " current line

  " Do not change indentation of commented lines.
  if line =~ '^\s*%'
    return ind
  endif

  " Add a 'shiftwidth' after beginning of environments.
  " Don't add it for \begin{document} and \begin{verbatim}
  ""if line =~ '^\s*\\begin{\(.*\)}'  && line !~ 'verbatim' 
  " LH modification : \begin does not always start a line
  if line =~ '\\begin{\(.*\)}'  && line !~ 'verbatim' 
        \ && line !~ 'document'

    let ind = ind + &sw

    if g:tex_indent_items == 1
      " Add another sw for item-environments
      if line =~ 'itemize\|description\|enumerate\|thebibliography'
        let ind = ind + &sw
      endif
    endif
  endif

  
  " Subtract a 'shiftwidth' when an environment ends
  if cline =~ '^\s*\\end' && cline !~ 'verbatim' 
        \&& cline !~ 'document'

    if g:tex_indent_items == 1
      " Remove another sw for item-environments
      if cline =~ 'itemize\|description\|enumerate\|thebibliography'
        let ind = ind - &sw
      endif
    endif

    let ind = ind - &sw
  endif

  
  " Special treatment for 'item'
  " ----------------------------
  
  if g:tex_indent_items == 1

    " '\item' or '\bibitem' itself:
    if cline =~ '^\s*\\\(bib\)\=item' 
      let ind = ind - &sw
    endif

    " lines following to '\item' are intented once again:
    if line =~ '^\s*\\\(bib\)\=item' 
      let ind = ind + &sw
    endif

  endif

  return ind
endfunction