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
|