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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
|
*xml-plugin.txt* Help edit XML and SGML documents. v1.36
XML Edit ~
A filetype plugin to help edit XML and SGML documents.
This script provides some convenience when editing XML (and some SGML
including HTML) formated documents. It allows you to jump to the
beginning or end of the tag block your cursor is in. '%' will jump
between '<' and '>' within the tag your cursor is in. When in insert
mode and you finish a tag (pressing '>') the tag will be completed. If
you press '>' twice it will place the cursor in the middle of the tags
on it's own line (helps with nested tags).
Usage: Place this file into your ftplugin directory. To add html support
Sym-link or copy this file to html.vim in your ftplugin directory. To activte
the script place 'filetype plugin on' in your |.vimrc| file. See |ftplugins|
for more information on this topic.
If the file edited is of type "html" and "xml_use_html" is defined then
the following tags will not auto complete: <img>, <input>, <param>,
<frame>, <br>, <hr>, <meta>, <link>, <base>, <area>
If the file edited is of type 'html' and 'xml_use_xhtml' is defined the
above tags will autocomplete the xml closing staying xhtml compatable.
ex. <hr> becomes <hr /> (see |xml-plugin-settings|)
Known Bugs {{{1 ~
- < & > marks inside of a CDATA section are interpreted as actual XML tags
even if unmatched.
- The script can not handle leading spaces such as < tag></ tag> it is
illegal XML syntax and considered very bad form.
- Placing a literal `>' in an attribute value will auto complete despite that
the start tag isn't finished. This is poor XML anyway you should use
> instead.
------------------------------------------------------------------------------
*xml-plugin-settings*
Options {{{1
(All options must be placed in your |.vimrc| prior to the |ftplugin|
command.)
xml_tag_completion_map
Use this setting to change the default mapping to auto complete a
tag. By default typing a literal `>' will cause the tag your editing
to auto complete; pressing twice will auto nest the tag. By using
this setting the `>' will be a literal `>' and you must use the new
mapping to perform auto completion and auto nesting. For example if
you wanted Control-L to perform auto completion inmstead of typing a
`>' place the following into your .vimrc: >
let xml_tag_completion_map = "<C-l>"
<
xml_no_auto_nesting (Not Working!!!!!)
This turns off the auto nesting feature. After a completion is made
and another `>' is typed xml-edit automatically will break the tag
accross multiple lines and indent the curser to make creating nested
tqags easier. This feature turns it off. Enter the following in your
.vimrc: >
let xml_no_auto_nesting = 1
<
xml_use_xhtml
When editing HTML this will auto close the short tags to make valid
XML like <hr/> and <br/>. Enter the following in your vimrc to
turn this option on: >
let xml_use_xhtml = 1
if the filetype is xhtml and g:xml_use_xhtml doesn't exists
the script defines it to be 1. (This also assumes that you have linked
xml.vim to xhtml.vim. Otherwise this item is moot)
For a file to be of xhtml type there need to be a doctype declaration!!
just naming a file something.xhtml doesn't make it type xhtml!
<
xml_no_html
This turns of the support for HTML specific tags. Place this in your
.vimrc: >
let xml_no_html = 1
<
------------------------------------------------------------------------------
*xml-plugin-mappings*
Mapings and their functions {{{1
Typing '>' will start the tag closing routine.
Typing (Where | means cursor position)
<para>|
results in
<para>|</para>
Typing
<para>>|</para>
results in
<para>
|
</para>
typing a lone '>' and no '<' in front of it accepts the '>' (But having
lone '>' or '<' in a XML file is frown upon except in <!CDATA> sections,
and that will throw of the plugin!!).
Typing </tag> or <tag/> also results in na expanding. So when editing
html type <input .... />
The closing routing also ignores DTD tags '<!,,>' and processing
instructions '<?....?>'. Thus typing these result in no expansion.
<LocalLeader> is a setting in VIM that depicts a prefix for scripts and
plugins to use. By default this is the backslash key `\'. See |mapleader|
for details.
;; make element out previous word and close it {{{2
- when typing a word;; wil create <word>|</word>
when word on its own line it will be
<word>
|
</word>
the suffix can be changed by setting
let makeElementSuf = ',,,' in your .vimrc
Thanks to Bart van Deenen
(http://www.vim.org/scripts/script.php?script_id=632)
[ and ] mappings {{{2
<LocalLeader>[ Delete <![CDATA[ ]]> delimiters
<LocalLeader>{ Delete <![CDATA[ ]]> section
<LocalLeader>] Delete <!-- --> delimiters
<LocalLeader>} Delete <!-- --> section
[[ Goto to the previous open tag
[[ Goto to the next open tag
[] Goto to the previous close tag
][ Goto to the next close tag
[" Goto to the next comment
]" Goto the previous comment
<LocalLeader>5 Jump to the matching tag. {{{2
<LocalLeader>% Jump to the matching tag.
<LocalLeader>c Rename tag {{{2
<LocalLeader>C Rename tag and remove attributes {{{2
Will ask for attributes
<LocalLeader>d Deletes the surrounding tags from the cursor. {{{2
<tag1>outter <tag2>inner text</tag2> text</tag1>
|
Turns to:
outter <tag2>inner text</tag2> text
|
<LocalLeader>D Deletes the tag and it contents {{{2
- and put it in register x.
<tag1>outter <tag2>inner text</tag2> text</tag1>
|
Turns to:
<tag1>outter text</tag1>
<LocalLeader>e provide endtag for open tags. {{{2
- provide endtag for open tags. Watch where de cursor is
<para><listitem>list item content
|
pressing \e twice produces
<para><listitem>list item content</para></listitem>
<LocalLeader>f fold the tag under the cursor {{{2
<para>
line 1
line 2
line 3
</para>
\f produces
+-- 5 lines: <para>--------------------------
<LocalLeader>F all tags of name 'tag' will be fold. {{{2
- If there isn't a tag under
the cursor you will be asked for one.
<LocalLeader>g Format (Vim's gq function) {{{2
- will make a visual block of tag under cursor and then format using gq
<LocalLeader>G Format all tags under cursor (Vim's gq function) {{{2
- If there isn't a tag under
the cursor you will be asked for one.
<LocalLeader>I Indent all tags {{{2
- will create a multiline layout every opening tag will be shifted out
and every closing tag will be shifted in. Be aware that the rendering
of the XML through XSLT and/or DSSSL, might be changed by this.
Be aware tha if the file is big, more than 1000 lines, the reformatting
takes a long time because vim has to make a big undo buffer.
For example using \I on the example below:
<chapter><title>Indent</title><para>The documentation</para></chapter>
- Becomes
<chapter>
<title>
Indent
</title>
<para>
The documentation
</para>
</chapter>
<LocalLeader>j Joins two the SAME sections together. {{{2
- The sections must be next to each other.
<para> This is line 1
of a paragraph. </para>
<para> This is line 2
|
of a paragraph. </para>
\j produces
<para> This is line 1
of a paragraph.
This is line 2
of a paragraph. </para>
<LocalLeader>l visual surround the block with listitem and para {{{2
When marking up docbook tekst you have the issue that listitems
consist of 2 item. This key combination inserts them both,
blaah
|
\l produces
<listitem>
<para>blaah</para>
</listitem>
<LocalLeader>o Insert a tag inside the current one (like vim o) {{{2
You are asked for tag and attributes.
<tag1><tag2><tag3>blaah</tag3></tag2></tag1>
|
\o produces
<tag1>
<aftertag><tag2><tag3>blaah</tag3></tag2></aftertag>
</tag1>
<LocalLeader>O Insert a tag outside the current one (like vim O) {{{2
You are asked for tag and attributes.
<tag1><tag2><tag3>blaah</tag3></tag2></tag1>
|
\O produces
<beforetag>
<tag1><tag2><tag3>blaah</tag3></tag2></tag1>
</beforetag>
<LocalLeader>s Insert an opening tag for an closing tag. {{{2
list item content</para></listitem>
|
pressing \s twice produces
<para><listitem>list item content</para></listitem>
<LocalLeader>[ Delete <![CDATA[ ]]> delimiters {{{2
Removes Only <CDATA[ and ]]>
handy when you want to uncomment a section.
You need to stand in the tag and not on an other tag
<![CDATA[ <tag> ]]>
if you cursor is outside <tag> but inside the
CDATA tag the delition works.
<LocalLeader>{ Delete <![CDATA[ ]]> section {{{2
Removes everything tag and Content
<LocalLeader>] Delete <!-- --> delimiters {{{2
Uncommnet a block.
<LocalLeader>} Delete <!-- --> section {{{2
Removes everything tag and Content
<LocalLeader>> shift right opening tag and closing tag. {{{2
shift everything between the tags 1 shiftwide right
<LocalLeader>< shift left opening tag and closing tag. {{{2
shift everything between the tags 1 shiftwide left
<LocalLeader>c Visual Place a CDATA section around the selected text. {{{2
Place Cdata section around the block
<LocalLeader>< Visual Place a Comment around the selected text. {{{2
Place comment around the block
<LocalLeader>5 Extend the visual selection to the matching tag. {{{2
<LocalLeader>%
Extend the visual selection to the matching tag. Make sure you are at
the start of the opening tag or the end of the closing tag.
<LocalLeader>v Visual Place a tag around the selected text. {{{2
- You are asked for tag and attributes. You
need to have selected text in visual mode before you can use this
mapping. See |visual-mode| for details.
Be careful where you place the marks.
The top uses append
The bottom uses append
Useful when marking up a text file
------------------------------------------------------------------------------
*xml-plugin-callbacks*
Callback Functions {{{2 ~
A callback function is a function used to customize features on a per tag
basis. For example say you wish to have a default set of attributs when you
type an empty tag like this:
You type: <tag>
You get: <tag default="attributes"></tag>
This is for any script programmers who wish to add xml-plugin support to
there own filetype plugins.
Callback functions recive one attribute variable which is the tag name. The
all must return either a string or the number zero. If it returns a string
the plugin will place the string in the proper location. If it is a zero the
plugin will ignore and continue as if no callback existed.
The following are implemented callback functions:
HtmlAttribCallback
This is used to add default attributes to html tag. It is intended
for HTML files only.
XmlAttribCallback
This is a generic callback for xml tags intended to add attributes.
*xml-plugin-html*
Callback Example {{{2 ~
The following is an example of using XmlAttribCallback in your .vimrc
>
function XmlAttribCallback (xml_tag)
if a:xml_tag ==? "my-xml-tag"
return "attributes=\"my xml attributes\""
else
return 0
endif
endfunction
<
The following is a sample html.vim file type plugin you could use:
>
" Vim script file vim600:fdm=marker:
" FileType: HTML
" Maintainer: Devin Weaver <vim (at) tritarget.com>
" Location: http://www.vim.org/scripts/script.php?script_id=301
" This is a wrapper script to add extra html support to xml documents.
" Original script can be seen in xml-plugin documentation.
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
finish
endif
" Don't set 'b:did_ftplugin = 1' because that is xml.vim's responsability.
let b:html_mode = 1
if !exists("*HtmlAttribCallback")
function HtmlAttribCallback( xml_tag )
if a:xml_tag ==? "table"
return "cellpadding=\"0\" cellspacing=\"0\" border=\"0\""
elseif a:xml_tag ==? "link"
return "href=\"/site.css\" rel=\"StyleSheet\" type=\"text/css\""
elseif a:xml_tag ==? "body"
return "bgcolor=\"white\""
elseif a:xml_tag ==? "frame"
return "name=\"NAME\" src=\"/\" scrolling=\"auto\" noresize"
elseif a:xml_tag ==? "frameset"
return "rows=\"0,*\" cols=\"*,0\" border=\"0\""
elseif a:xml_tag ==? "img"
return "src=\"\" width=\"0\" height=\"0\" border=\"0\" alt=\"\""
elseif a:xml_tag ==? "a"
if has("browse")
" Look up a file to fill the href. Used in local relative file
" links. typeing your own href before closing the tag with `>'
" will override this.
let cwd = getcwd()
let cwd = substitute (cwd, "\\", "/", "g")
let href = browse (0, "Link to href...", getcwd(), "")
let href = substitute (href, cwd . "/", "", "")
let href = substitute (href, " ", "%20", "g")
else
let href = ""
endif
return "href=\"" . href . "\""
else
return 0
endif
endfunction
endif
" On to loading xml.vim
runtime ftplugin/xml.vim
<
vim:tw=78:ts=8:fen:fdm=marker:ft=help:norl:
|