forked from vim-jp/vimdoc-ja-working
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsyntax.txt
6403 lines (4950 loc) · 246 KB
/
syntax.txt
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
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
*syntax.txt* For Vim version 9.1. Last change: 2025 Mar 10
VIM REFERENCE MANUAL by Bram Moolenaar
Syntax highlighting *syntax* *syntax-highlighting* *coloring*
Syntax highlighting enables Vim to show parts of the text in another font or
color. Those parts can be specific keywords or text matching a pattern. Vim
doesn't parse the whole file (to keep it fast), so the highlighting has its
limitations. Lexical highlighting might be a better name, but since everybody
calls it syntax highlighting we'll stick with that.
Vim supports syntax highlighting on all terminals. But since most ordinary
terminals have very limited highlighting possibilities, it works best in the
GUI version, gvim.
In the User Manual:
|usr_06.txt| introduces syntax highlighting.
|usr_44.txt| introduces writing a syntax file.
1. Quick start |:syn-qstart|
2. Syntax files |:syn-files|
3. Syntax loading procedure |syntax-loading|
4. Converting to HTML |2html.vim|
5. Syntax file remarks |:syn-file-remarks|
6. Defining a syntax |:syn-define|
7. :syntax arguments |:syn-arguments|
8. Syntax patterns |:syn-pattern|
9. Syntax clusters |:syn-cluster|
10. Including syntax files |:syn-include|
11. Synchronizing |:syn-sync|
12. Listing syntax items |:syntax|
13. Colorschemes |color-schemes|
14. Highlight command |:highlight|
15. Linking groups |:highlight-link|
16. Cleaning up |:syn-clear|
17. Highlighting tags |tag-highlight|
18. Window-local syntax |:ownsyntax|
19. Color xterms |xterm-color|
20. When syntax is slow |:syntime|
{Vi does not have any of these commands}
Syntax highlighting is not available when the |+syntax| feature has been
disabled at compile time.
==============================================================================
1. Quick start *:syn-qstart*
*:syn-enable* *:syntax-enable*
This command switches on syntax highlighting: >
:syntax enable
What this command actually does is to execute the command >
:source $VIMRUNTIME/syntax/syntax.vim
If the VIM environment variable is not set, Vim will try to find
the path in another way (see |$VIMRUNTIME|). Usually this works just
fine. If it doesn't, try setting the VIM environment variable to the
directory where the Vim stuff is located. For example, if your syntax files
are in the "/usr/vim/vim82/syntax" directory, set $VIMRUNTIME to
"/usr/vim/vim82". You must do this in the shell, before starting Vim.
This command also sources the |menu.vim| script when the GUI is running or
will start soon. See |'go-M'| about avoiding that.
*:syn-on* *:syntax-on*
The `:syntax enable` command will keep most of your current color settings.
This allows using `:highlight` commands to set your preferred colors before or
after using this command. If you want Vim to overrule your settings with the
defaults, use: >
:syntax on
<
*:hi-normal* *:highlight-normal*
If you are running in the GUI, you can get white text on a black background
with: >
:highlight Normal guibg=Black guifg=White
For a color terminal see |:hi-normal-cterm|.
For setting up your own colors syntax highlighting see |syncolor|.
NOTE: The syntax files on MS-Windows have lines that end in <CR><NL>.
The files for Unix end in <NL>. This means you should use the right type of
file for your system. Although on MS-Windows the right format is
automatically selected if the 'fileformats' option is not empty.
NOTE: When using reverse video ("gvim -fg white -bg black"), the default value
of 'background' will not be set until the GUI window is opened, which is after
reading the |gvimrc|. This will cause the wrong default highlighting to be
used. To set the default value of 'background' before switching on
highlighting, include the ":gui" command in the |gvimrc|: >
:gui " open window and set default for 'background'
:syntax on " start highlighting, use 'background' to set colors
NOTE: Using ":gui" in the |gvimrc| means that "gvim -f" won't start in the
foreground! Use ":gui -f" then.
*g:syntax_on*
You can toggle the syntax on/off with this command: >
:if exists("g:syntax_on") | syntax off | else | syntax enable | endif
To put this into a mapping, you can use: >
:map <F7> :if exists("g:syntax_on") <Bar>
\ syntax off <Bar>
\ else <Bar>
\ syntax enable <Bar>
\ endif <CR>
[using the |<>| notation, type this literally]
Details:
The ":syntax" commands are implemented by sourcing a file. To see exactly how
this works, look in the file:
command file ~
:syntax enable $VIMRUNTIME/syntax/syntax.vim
:syntax on $VIMRUNTIME/syntax/syntax.vim
:syntax manual $VIMRUNTIME/syntax/manual.vim
:syntax off $VIMRUNTIME/syntax/nosyntax.vim
Also see |syntax-loading|.
NOTE: If displaying long lines is slow and switching off syntax highlighting
makes it fast, consider setting the 'synmaxcol' option to a lower value.
==============================================================================
2. Syntax files *:syn-files*
The syntax and highlighting commands for one language are normally stored in
a syntax file. The name convention is: "{name}.vim". Where {name} is the
name of the language, or an abbreviation (to fit the name in 8.3 characters,
a requirement in case the file is used on a DOS filesystem).
Examples:
c.vim perl.vim java.vim html.vim
cpp.vim sh.vim csh.vim
The syntax file can contain any Ex commands, just like a vimrc file. But
the idea is that only commands for a specific language are included. When a
language is a superset of another language, it may include the other one,
for example, the cpp.vim file could include the c.vim file: >
:so $VIMRUNTIME/syntax/c.vim
The .vim files are normally loaded with an autocommand. For example: >
:au Syntax c runtime! syntax/c.vim
:au Syntax cpp runtime! syntax/cpp.vim
These commands are normally in the file $VIMRUNTIME/syntax/synload.vim.
MAKING YOUR OWN SYNTAX FILES *mysyntaxfile*
When you create your own syntax files, and you want to have Vim use these
automatically with ":syntax enable", do this:
1. Create your user runtime directory. You would normally use the first item
of the 'runtimepath' option. Example for Unix: >
mkdir ~/.vim
2. Create a directory in there called "syntax". For Unix: >
mkdir ~/.vim/syntax
3. Write the Vim syntax file. Or download one from the internet. Then write
it in your syntax directory. For example, for the "mine" syntax: >
:w ~/.vim/syntax/mine.vim
Now you can start using your syntax file manually: >
:set syntax=mine
You don't have to exit Vim to use this.
If you also want Vim to detect the type of file, see |new-filetype|.
If you are setting up a system with many users and you don't want each user
to add the same syntax file, you can use another directory from 'runtimepath'.
ADDING TO AN EXISTING SYNTAX FILE *mysyntaxfile-add*
If you are mostly satisfied with an existing syntax file, but would like to
add a few items or change the highlighting, follow these steps:
1. Create your user directory from 'runtimepath', see above.
2. Create a directory in there called "after/syntax". For Unix: >
mkdir -p ~/.vim/after/syntax
3. Write a Vim script that contains the commands you want to use. For
example, to change the colors for the C syntax: >
highlight cComment ctermfg=Green guifg=Green
4. Write that file in the "after/syntax" directory. Use the name of the
syntax, with ".vim" added. For our C syntax: >
:w ~/.vim/after/syntax/c.vim
That's it. The next time you edit a C file the Comment color will be
different. You don't even have to restart Vim.
If you have multiple files, you can use the filetype as the directory name.
All the "*.vim" files in this directory will be used, for example:
~/.vim/after/syntax/c/one.vim
~/.vim/after/syntax/c/two.vim
REPLACING AN EXISTING SYNTAX FILE *mysyntaxfile-replace*
If you don't like a distributed syntax file, or you have downloaded a new
version, follow the same steps as for |mysyntaxfile| above. Just make sure
that you write the syntax file in a directory that is early in 'runtimepath'.
Vim will only load the first syntax file found, assuming that it sets
b:current_syntax.
NAMING CONVENTIONS *group-name* *{group-name}* *E669* *W18*
A syntax group name is to be used for syntax items that match the same kind of
thing. These are then linked to a highlight group that specifies the color.
A syntax group name doesn't specify any color or attributes itself.
The name for a highlight or syntax group must consist of ASCII letters,
digits, underscores, dots, or hyphens. As a regexp: "[a-zA-Z0-9_.-]*".
However, Vim does not give an error when using other characters. The maximum
length of a group name is about 200 bytes. *E1249*
To be able to allow each user to pick their favorite set of colors, there must
be preferred names for highlight groups that are common for many languages.
These are the suggested group names (if syntax highlighting works properly
you can see the actual color, except for "Ignore"):
*Comment any comment
*Constant any constant
String a string constant: "this is a string"
Character a character constant: 'c', '\n'
Number a number constant: 234, 0xff
Boolean a boolean constant: TRUE, false
Float a floating point constant: 2.3e10
*Identifier any variable name
Function function name (also: methods for classes)
*Statement any statement
Conditional if, then, else, endif, switch, etc.
Repeat for, do, while, etc.
Label case, default, etc.
Operator "sizeof", "+", "*", etc.
Keyword any other keyword
Exception try, catch, throw
*PreProc generic Preprocessor
Include preprocessor #include
Define preprocessor #define
Macro same as Define
PreCondit preprocessor #if, #else, #endif, etc.
*Type int, long, char, etc.
StorageClass static, register, volatile, etc.
Structure struct, union, enum, etc.
Typedef A typedef
*Special any special symbol
SpecialChar special character in a constant
Tag you can use CTRL-] on this
Delimiter character that needs attention
SpecialComment special things inside a comment
Debug debugging statements
*Underlined text that stands out, HTML links
*Ignore left blank, hidden |hl-Ignore|
*Error any erroneous construct
*Todo anything that needs extra attention; mostly the
keywords TODO FIXME and XXX
*Added added line in a diff
*Changed changed line in a diff
*Removed removed line in a diff
The names marked with * are the preferred groups; the others are minor groups.
For the preferred groups, the "syntax.vim" file contains default highlighting.
The minor groups are linked to the preferred groups, so they get the same
highlighting. You can override these defaults by using ":highlight" commands
after sourcing the "syntax.vim" file.
Note that highlight group names are not case sensitive. "String" and "string"
can be used for the same group.
The following names are reserved and cannot be used as a group name:
NONE ALL ALLBUT contains contained
*hl-Ignore*
When using the Ignore group, you may also consider using the conceal
mechanism. See |conceal|.
==============================================================================
3. Syntax loading procedure *syntax-loading*
This explains the details that happen when the command ":syntax enable" is
issued. When Vim initializes itself, it finds out where the runtime files are
located. This is used here as the variable |$VIMRUNTIME|.
":syntax enable" and ":syntax on" do the following:
Source $VIMRUNTIME/syntax/syntax.vim
|
+- Clear out any old syntax by sourcing $VIMRUNTIME/syntax/nosyntax.vim
|
+- Source first syntax/synload.vim in 'runtimepath'
| |
| +- Setup the colors for syntax highlighting. If a color scheme is
| | defined it is loaded again with ":colors {name}". Otherwise
| | ":runtime! syntax/syncolor.vim" is used. ":syntax on" overrules
| | existing colors, ":syntax enable" only sets groups that weren't
| | set yet.
| |
| +- Set up syntax autocmds to load the appropriate syntax file when
| | the 'syntax' option is set. *synload-1*
| |
| +- Source the user's optional file, from the |mysyntaxfile| variable.
| This is for backwards compatibility with Vim 5.x only. *synload-2*
|
+- Do ":filetype on", which does ":runtime! filetype.vim". It loads any
| filetype.vim files found. It should always Source
| $VIMRUNTIME/filetype.vim, which does the following.
| |
| +- Install autocmds based on suffix to set the 'filetype' option
| | This is where the connection between file name and file type is
| | made for known file types. *synload-3*
| |
| +- Source the user's optional file, from the *myfiletypefile*
| | variable. This is for backwards compatibility with Vim 5.x only.
| | *synload-4*
| |
| +- Install one autocommand which sources scripts.vim when no file
| | type was detected yet. *synload-5*
| |
| +- Source $VIMRUNTIME/menu.vim, to setup the Syntax menu. |menu.vim|
|
+- Install a FileType autocommand to set the 'syntax' option when a file
| type has been detected. *synload-6*
|
+- Execute syntax autocommands to start syntax highlighting for each
already loaded buffer.
Upon loading a file, Vim finds the relevant syntax file as follows:
Loading the file triggers the BufReadPost autocommands.
|
+- If there is a match with one of the autocommands from |synload-3|
| (known file types) or |synload-4| (user's file types), the 'filetype'
| option is set to the file type.
|
+- The autocommand at |synload-5| is triggered. If the file type was not
| found yet, then scripts.vim is searched for in 'runtimepath'. This
| should always load $VIMRUNTIME/scripts.vim, which does the following.
| |
| +- Source the user's optional file, from the *myscriptsfile*
| | variable. This is for backwards compatibility with Vim 5.x only.
| |
| +- If the file type is still unknown, check the contents of the file,
| again with checks like "getline(1) =~ pattern" as to whether the
| file type can be recognized, and set 'filetype'.
|
+- When the file type was determined and 'filetype' was set, this
| triggers the FileType autocommand |synload-6| above. It sets
| 'syntax' to the determined file type.
|
+- When the 'syntax' option was set above, this triggers an autocommand
| from |synload-1| (and |synload-2|). This find the main syntax file in
| 'runtimepath', with this command:
| runtime! syntax/<name>.vim
|
+- Any other user installed FileType or Syntax autocommands are
triggered. This can be used to change the highlighting for a specific
syntax.
==============================================================================
4. Conversion to HTML *2html.vim* *convert-to-HTML*
2html is not a syntax file itself, but a script that converts the current
window into HTML. Vim opens a new window in which it builds the HTML file.
After you save the resulting file, you can view it with any browser. The
colors should be exactly the same as you see them in Vim. With
|g:html_line_ids| you can jump to specific lines by adding (for example) #L123
or #123 to the end of the URL in your browser's address bar. And with
|g:html_dynamic_folds| enabled, you can show or hide the text that is folded
in Vim.
You are not supposed to set the 'filetype' or 'syntax' option to "2html"!
Source the script to convert the current file: >
:runtime! syntax/2html.vim
<
Many variables affect the output of 2html.vim; see below. Any of the on/off
options listed below can be enabled or disabled by setting them explicitly to
the desired value, or restored to their default by removing the variable using
|:unlet|.
Remarks:
- Some truly ancient browsers may not show the background colors.
- From most browsers you can also print the file (in color)!
- The latest TOhtml may actually work with older versions of Vim, but some
features such as conceal support will not function, and the colors may be
incorrect for an old Vim without GUI support compiled in.
Here is an example how to run the script over all .c and .h files from a
Unix shell: >
for f in *.[ch]; do gvim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" $f; done
<
*g:html_start_line* *g:html_end_line*
To restrict the conversion to a range of lines, use a range with the |:TOhtml|
command below, or set "g:html_start_line" and "g:html_end_line" to the first
and last line to be converted. Example, using the last set Visual area: >
:let g:html_start_line = line("'<")
:let g:html_end_line = line("'>")
:runtime! syntax/2html.vim
<
*:TOhtml*
:[range]TOhtml The ":TOhtml" command is defined in a standard plugin.
This command will source |2html.vim| for you. When a
range is given, this command sets |g:html_start_line|
and |g:html_end_line| to the start and end of the
range, respectively. Default range is the entire
buffer.
If the current window is part of a |diff|, unless
|g:html_diff_one_file| is set, :TOhtml will convert
all windows which are part of the diff in the current
tab and place them side-by-side in a <table> element
in the generated HTML. With |g:html_line_ids| you can
jump to lines in specific windows with (for example)
#W1L42 for line 42 in the first diffed window, or
#W3L87 for line 87 in the third.
Examples: >
:10,40TOhtml " convert lines 10-40 to html
:'<,'>TOhtml " convert current/last visual selection
:TOhtml " convert entire buffer
<
*g:html_diff_one_file*
Default: 0.
When 0, and using |:TOhtml| all windows involved in a |diff| in the current tab
page are converted to HTML and placed side-by-side in a <table> element. When
1, only the current buffer is converted.
Example: >
let g:html_diff_one_file = 1
<
*g:html_whole_filler*
Default: 0.
When 0, if |g:html_diff_one_file| is 1, a sequence of more than 3 filler lines
is displayed as three lines with the middle line mentioning the total number
of inserted lines.
When 1, always display all inserted lines as if |g:html_diff_one_file| were
not set.
>
:let g:html_whole_filler = 1
<
*TOhtml-performance* *g:html_no_progress*
Default: 0.
When 0, display a progress bar in the statusline for each major step in the
2html.vim conversion process.
When 1, do not display the progress bar. This offers a minor speed improvement
but you won't have any idea how much longer the conversion might take; for big
files it can take a long time!
Example: >
let g:html_no_progress = 1
<
You can obtain better performance improvements by also instructing Vim to not
run interactively, so that too much time is not taken to redraw as the script
moves through the buffer, switches windows, and the like: >
vim -E -s -c "let g:html_no_progress=1" -c "syntax on" -c "set ft=c" -c "runtime syntax/2html.vim" -cwqa myfile.c
<
Note that the -s flag prevents loading your .vimrc and any plugins, so you
need to explicitly source/enable anything that will affect the HTML
conversion. See |-E| and |-s-ex| for details. It is probably best to create a
script to replace all the -c commands and use it with the -u flag instead of
specifying each command separately.
*hl-TOhtmlProgress* *TOhtml-progress-color*
When displayed, the progress bar will show colored boxes along the statusline
as the HTML conversion proceeds. By default, the background color as the
current "DiffDelete" highlight group is used. If "DiffDelete" and "StatusLine"
have the same background color, TOhtml will automatically adjust the color to
differ. If you do not like the automatically selected colors, you can define
your own highlight colors for the progress bar. Example: >
hi TOhtmlProgress guifg=#c0ffee ctermbg=7
<
*g:html_number_lines*
Default: Current 'number' setting.
When 0, buffer text is displayed in the generated HTML without line numbering.
When 1, a column of line numbers is added to the generated HTML with the same
highlighting as the line number column in Vim (|hl-LineNr|).
Force line numbers even if 'number' is not set: >
:let g:html_number_lines = 1
Force to omit the line numbers: >
:let g:html_number_lines = 0
Go back to the default to use 'number' by deleting the variable: >
:unlet g:html_number_lines
<
*g:html_line_ids*
Default: 1 if |g:html_number_lines| is set, 0 otherwise.
When 1, adds an HTML id attribute to each line number, or to an empty <span>
inserted for that purpose if no line numbers are shown. This ID attribute
takes the form of L123 for single-buffer HTML pages, or W2L123 for diff-view
pages, and is used to jump to a specific line (in a specific window of a diff
view). Javascript is inserted to open any closed dynamic folds
(|g:html_dynamic_folds|) containing the specified line before jumping. The
javascript also allows omitting the window ID in the url, and the leading L.
For example: >
page.html#L123 jumps to line 123 in a single-buffer file
page.html#123 does the same
diff.html#W1L42 jumps to line 42 in the first window in a diff
diff.html#42 does the same
<
*g:html_use_css*
Default: 1.
When 1, generate valid HTML 5 markup with CSS styling, supported in all modern
browsers and many old browsers.
When 0, generate <font> tags and similar outdated markup. This is not
recommended but it may work better in really old browsers, email clients,
forum posts, and similar situations where basic CSS support is unavailable.
Example: >
:let g:html_use_css = 0
<
*g:html_ignore_conceal*
Default: 0.
When 0, concealed text is removed from the HTML and replaced with a character
from |:syn-cchar| or 'listchars' as appropriate, depending on the current
value of 'conceallevel'.
When 1, include all text from the buffer in the generated HTML, even if it is
|conceal|ed.
Either of the following commands will ensure that all text in the buffer is
included in the generated HTML (unless it is folded): >
:let g:html_ignore_conceal = 1
:setl conceallevel=0
<
*g:html_ignore_folding*
Default: 0.
When 0, text in a closed fold is replaced by the text shown for the fold in
Vim (|fold-foldtext|). See |g:html_dynamic_folds| if you also want to allow
the user to expand the fold as in Vim to see the text inside.
When 1, include all text from the buffer in the generated HTML; whether the
text is in a fold has no impact at all. |g:html_dynamic_folds| has no effect.
Either of these commands will ensure that all text in the buffer is included
in the generated HTML (unless it is concealed): >
zR
:let g:html_ignore_folding = 1
<
*g:html_dynamic_folds*
Default: 0.
When 0, text in a closed fold is not included at all in the generated HTML.
When 1, generate javascript to open a fold and show the text within, just like
in Vim.
Setting this variable to 1 causes 2html.vim to always use CSS for styling,
regardless of what |g:html_use_css| is set to.
This variable is ignored when |g:html_ignore_folding| is set.
>
:let g:html_dynamic_folds = 1
<
*g:html_no_foldcolumn*
Default: 0.
When 0, if |g:html_dynamic_folds| is 1, generate a column of text similar to
Vim's foldcolumn (|fold-foldcolumn|) the user can click on to toggle folds
open or closed. The minimum width of the generated text column is the current
'foldcolumn' setting.
When 1, do not generate this column; instead, hovering the mouse cursor over
folded text will open the fold as if |g:html_hover_unfold| were set.
>
:let g:html_no_foldcolumn = 1
<
*TOhtml-uncopyable-text* *g:html_prevent_copy*
Default: Empty string.
This option prevents certain regions of the generated HTML from being copied,
when you select all text in document rendered in a browser and copy it. Useful
for allowing users to copy-paste only the source text even if a fold column or
line numbers are shown in the generated content. Specify regions to be
affected in this way as follows:
f: fold column
n: line numbers (also within fold text)
t: fold text
d: diff filler
Example, to make the fold column and line numbers uncopyable: >
:let g:html_prevent_copy = "fn"
<
The method used to prevent copying in the generated page depends on the value
of |g:html_use_input_for_pc|.
*g:html_use_input_for_pc*
Default: "none"
If |g:html_prevent_copy| is non-empty, then:
When "all", read-only <input> elements are used in place of normal text for
uncopyable regions. In some browsers, especially older browsers, after
selecting an entire page and copying the selection, the <input> tags are not
pasted with the page text. If |g:html_no_invalid| is 0, the <input> tags have
invalid type; this works in more browsers, but the page will not validate.
Note: This method does NOT work in recent versions of Chrome and equivalent
browsers; the <input> tags get pasted with the text.
When "fallback" (default value), the same <input> elements are generated for
older browsers, but newer browsers (detected by CSS feature query) hide the
<input> elements and instead use generated content in an ::before pseudoelement
to display the uncopyable text. This method should work with the largest
number of browsers, both old and new.
When "none", the <input> elements are not generated at all. Only the
generated-content method is used. This means that old browsers, notably
Internet Explorer, will either copy the text intended not to be copyable, or
the non-copyable text may not appear at all. However, this is the most
standards-based method, and there will be much less markup.
*g:html_no_invalid*
Default: 0.
When 0, if |g:html_prevent_copy| is non-empty and |g:html_use_input_for_pc| is
not "none", an invalid attribute is intentionally inserted into the <input>
element for the uncopyable areas. This prevents pasting the <input> elements
in some applications. Specifically, some versions of Microsoft Word will not
paste the <input> elements if they contain this invalid attribute. When 1, no
invalid markup is inserted, and the generated page should validate. However,
<input> elements may be pasted into some applications and can be difficult to
remove afterward.
*g:html_hover_unfold*
Default: 0.
When 0, the only way to open a fold generated by 2html.vim with
|g:html_dynamic_folds| set, is to click on the generated fold column.
When 1, use CSS 2.0 to allow the user to open a fold by moving the mouse
cursor over the displayed fold text. This is useful to allow users with
disabled javascript to view the folded text.
Note that old browsers (notably Internet Explorer 6) will not support this
feature. Browser-specific markup for IE6 is included to fall back to the
normal CSS1 styling so that the folds show up correctly for this browser, but
they will not be openable without a foldcolumn.
>
:let g:html_hover_unfold = 1
<
*g:html_id_expr*
Default: ""
Dynamic folding and jumping to line IDs rely on unique IDs within the document
to work. If generated HTML is copied into a larger document, these IDs are no
longer guaranteed to be unique. Set g:html_id_expr to an expression Vim can
evaluate to get a unique string to append to each ID used in a given document,
so that the full IDs will be unique even when combined with other content in a
larger HTML document. Example, to append _ and the buffer number to each ID: >
:let g:html_id_expr = '"_" .. bufnr("%")'
<
To append a string "_mystring" to the end of each ID: >
:let g:html_id_expr = '"_mystring"'
<
Note: When converting a diff view to HTML, the expression will only be
evaluated for the first window in the diff, and the result used for all the
windows.
*TOhtml-wrap-text* *g:html_pre_wrap*
Default: Current 'wrap' setting.
When 0, if |g:html_no_pre| is 0 or unset, the text in the generated HTML does
not wrap at the edge of the browser window.
When 1, if |g:html_use_css| is 1, the CSS 2.0 "white-space:pre-wrap" value is
used, causing the text to wrap at whitespace at the edge of the browser
window.
Explicitly enable text wrapping: >
:let g:html_pre_wrap = 1
Explicitly disable wrapping: >
:let g:html_pre_wrap = 0
Go back to default, determine wrapping from 'wrap' setting: >
:unlet g:html_pre_wrap
<
*g:html_no_pre*
Default: 0.
When 0, buffer text in the generated HTML is surrounded by <pre>...</pre>
tags. Series of whitespace is shown as in Vim without special markup, and tab
characters can be included literally (see |g:html_expand_tabs|).
When 1 (not recommended), the <pre> tags are omitted, and a plain <div> is
used instead. Whitespace is replaced by a series of character
references, and <br> is used to end each line. This is another way to allow
text in the generated HTML is wrap (see |g:html_pre_wrap|) which also works in
old browsers, but may cause noticeable differences between Vim's display and
the rendered page generated by 2html.vim.
>
:let g:html_no_pre = 1
<
*g:html_no_doc*
Default: 0.
When 1 it doesn't generate a full HTML document with a DOCTYPE, <head>,
<body>, etc. If |g:html_use_css| is enabled (the default) you'll have to
define the CSS manually. The |g:html_dynamic_folds| and |g:html_line_ids|
settings (off by default) also insert some JavaScript.
*g:html_no_links*
Default: 0.
Don't generate <a> tags for text that looks like an URL.
*g:html_no_modeline*
Default: 0.
Don't generate a modeline disabling folding.
*g:html_expand_tabs*
Default: 0 if 'tabstop' is 8, 'expandtab' is 0, 'vartabstop' is not in use,
and no fold column or line numbers occur in the generated HTML;
1 otherwise.
When 1, <Tab> characters in the buffer text are replaced with an appropriate
number of space characters, or references if |g:html_no_pre| is 1.
When 0, if |g:html_no_pre| is 0 or unset, <Tab> characters in the buffer text
are included as-is in the generated HTML. This is useful for when you want to
allow copy and paste from a browser without losing the actual whitespace in
the source document. Note that this can easily break text alignment and
indentation in the HTML, unless set by default.
Force |2html.vim| to keep <Tab> characters: >
:let g:html_expand_tabs = 0
<
Force tabs to be expanded: >
:let g:html_expand_tabs = 1
<
*TOhtml-encoding-detect* *TOhtml-encoding*
It is highly recommended to set your desired encoding with
|g:html_use_encoding| for any content which will be placed on a web server.
If you do not specify an encoding, |2html.vim| uses the preferred IANA name
for the current value of 'fileencoding' if set, or 'encoding' if not.
'encoding' is always used for certain 'buftype' values. 'fileencoding' will be
set to match the chosen document encoding.
Automatic detection works for the encodings mentioned specifically by name in
|encoding-names|, but TOhtml will only automatically use those encodings with
wide browser support. However, you can override this to support specific
encodings that may not be automatically detected by default (see options
below). See http://www.iana.org/assignments/character-sets for the IANA names.
Note: By default all Unicode encodings are converted to UTF-8 with no BOM in
the generated HTML, as recommended by W3C:
http://www.w3.org/International/questions/qa-choosing-encodings
http://www.w3.org/International/questions/qa-byte-order-mark
*g:html_use_encoding*
Default: none, uses IANA name for current 'fileencoding' as above.
To overrule all automatic charset detection, set g:html_use_encoding to the
name of the charset to be used. It is recommended to set this variable to
something widely supported, like UTF-8, for anything you will be hosting on a
webserver: >
:let g:html_use_encoding = "UTF-8"
You can also use this option to omit the line that specifies the charset
entirely, by setting g:html_use_encoding to an empty string (NOT recommended): >
:let g:html_use_encoding = ""
To go back to the automatic mechanism, delete the |g:html_use_encoding|
variable: >
:unlet g:html_use_encoding
<
*g:html_encoding_override*
Default: none, autoload/tohtml.vim contains default conversions for encodings
mentioned by name at |encoding-names|.
This option allows |2html.vim| to detect the correct 'fileencoding' when you
specify an encoding with |g:html_use_encoding| which is not in the default
list of conversions.
This is a dictionary of charset-encoding pairs that will replace existing
pairs automatically detected by TOhtml, or supplement with new pairs.
Detect the HTML charset "windows-1252" as the encoding "8bit-cp1252": >
:let g:html_encoding_override = {'windows-1252': '8bit-cp1252'}
<
*g:html_charset_override*
Default: none, autoload/tohtml.vim contains default conversions for encodings
mentioned by name at |encoding-names| and which have wide
browser support.
This option allows |2html.vim| to detect the HTML charset for any
'fileencoding' or 'encoding' which is not detected automatically. You can also
use it to override specific existing encoding-charset pairs. For example,
TOhtml will by default use UTF-8 for all Unicode/UCS encodings. To use UTF-16
and UTF-32 instead, use: >
:let g:html_charset_override = {'ucs-4': 'UTF-32', 'utf-16': 'UTF-16'}
Note that documents encoded in either UTF-32 or UTF-16 have known
compatibility problems with some major browsers.
*g:html_font*
Default: "monospace"
You can specify the font or fonts used in the converted document using
g:html_font. If this option is set to a string, then the value will be
surrounded with single quotes. If this option is set to a list then each list
item is surrounded by single quotes and the list is joined with commas. Either
way, "monospace" is added as the fallback generic family name and the entire
result used as the font family (using CSS) or font face (if not using CSS).
Examples: >
" font-family: 'Consolas', monospace;
:let g:html_font = "Consolas"
" font-family: 'DejaVu Sans Mono', 'Consolas', monospace;
:let g:html_font = ["DejaVu Sans Mono", "Consolas"]
<
*convert-to-XML* *convert-to-XHTML* *g:html_use_xhtml*
Default: 0.
When 0, generate standard HTML 4.01 (strict when possible).
When 1, generate XHTML 1.0 instead (XML compliant HTML).
>
:let g:html_use_xhtml = 1
<
==============================================================================
5. Syntax file remarks *:syn-file-remarks*
*b:current_syntax-variable*
Vim stores the name of the syntax that has been loaded in the
"b:current_syntax" variable. You can use this if you want to load other
settings, depending on which syntax is active. Example: >
:au BufReadPost * if b:current_syntax == "csh"
:au BufReadPost * do-some-things
:au BufReadPost * endif
ABEL *abel.vim* *ft-abel-syntax*
ABEL highlighting provides some user-defined options. To enable them, assign
any value to the respective variable. Example: >
:let abel_obsolete_ok=1
To disable them use ":unlet". Example: >
:unlet abel_obsolete_ok
Variable Highlight ~
abel_obsolete_ok obsolete keywords are statements, not errors
abel_cpp_comments_illegal do not interpret '//' as inline comment leader
ADA
See |ft-ada-syntax|
ANT *ant.vim* *ft-ant-syntax*
The ant syntax file provides syntax highlighting for javascript and python
by default. Syntax highlighting for other script languages can be installed
by the function AntSyntaxScript(), which takes the tag name as first argument
and the script syntax file name as second argument. Example: >
:call AntSyntaxScript('perl', 'perl.vim')
will install syntax perl highlighting for the following ant code >
<script language = 'perl'><![CDATA[
# everything inside is highlighted as perl
]]></script>
See |mysyntaxfile-add| for installing script languages permanently.
APACHE *apache.vim* *ft-apache-syntax*
The apache syntax file provides syntax highlighting for Apache HTTP server
version 2.2.3.
*asm.vim* *asmh8300.vim* *nasm.vim* *masm.vim* *asm68k*
ASSEMBLY *ft-asm-syntax* *ft-asmh8300-syntax* *ft-nasm-syntax*
*ft-masm-syntax* *ft-asm68k-syntax* *fasm.vim*
Files matching "*.i" could be Progress or Assembly. If the automatic detection
doesn't work for you, or you don't edit Progress at all, use this in your
startup vimrc: >
:let filetype_i = "asm"
Replace "asm" with the type of assembly you use.
There are many types of assembly languages that all use the same file name
extensions. Therefore you will have to select the type yourself, or add a
line in the assembly file that Vim will recognize. Currently these syntax
files are included:
asm GNU assembly (usually have .s or .S extension and were
already built using C compiler such as GCC or CLANG)
asm68k Motorola 680x0 assembly
asmh8300 Hitachi H-8300 version of GNU assembly
ia64 Intel Itanium 64
fasm Flat assembly (http://flatassembler.net)
masm Microsoft assembly (.masm files are compiled with
Microsoft's Macro Assembler. This is only supported
for x86, x86_64, ARM and AARCH64 CPU families)
nasm Netwide assembly
tasm Turbo Assembly (with opcodes 80x86 up to Pentium, and
MMX)
pic PIC assembly (currently for PIC16F84)
The most flexible is to add a line in your assembly file containing: >
asmsyntax=nasm
Replace "nasm" with the name of the real assembly syntax. This line must be
one of the first five lines in the file. No non-white text must be
immediately before or after this text. Note that specifying asmsyntax=foo is
equivalent to setting ft=foo in a |modeline|, and that in case of a conflict
between the two settings the one from the modeline will take precedence (in
particular, if you have ft=asm in the modeline, you will get the GNU syntax
highlighting regardless of what is specified as asmsyntax).
The syntax type can always be overruled for a specific buffer by setting the
b:asmsyntax variable: >
:let b:asmsyntax = "nasm"
If b:asmsyntax is not set, either automatically or by hand, then the value of
the global variable asmsyntax is used. This can be seen as a default assembly
language: >
:let asmsyntax = "nasm"
As a last resort, if nothing is defined, the "asm" syntax is used.
Netwide assembler (nasm.vim) optional highlighting ~
To enable a feature: >
:let {variable}=1|set syntax=nasm
To disable a feature: >
:unlet {variable} |set syntax=nasm
Variable Highlight ~
nasm_loose_syntax unofficial parser allowed syntax not as Error
(parser dependent; not recommended)
nasm_ctx_outside_macro contexts outside macro not as Error
nasm_no_warn potentially risky syntax not as ToDo
ASTRO *astro.vim* *ft-astro-syntax*
Configuration
The following variables control certain syntax highlighting features.
You can add them to your .vimrc.
To enable TypeScript and TSX for ".astro" files (default "disable"): >
let g:astro_typescript = "enable"
<
To enable Stylus for ".astro" files (default "disable"): >
let g:astro_stylus = "enable"
<
NOTE: You need to install an external plugin to support stylus in astro files.
ASPPERL *ft-aspperl-syntax*
ASPVBS *ft-aspvbs-syntax*
*.asp and *.asa files could be either Perl or Visual Basic script. Since it's
hard to detect this you can set two global variables to tell Vim what you are
using. For Perl script use: >
:let g:filetype_asa = "aspperl"
:let g:filetype_asp = "aspperl"
For Visual Basic use: >
:let g:filetype_asa = "aspvbs"
:let g:filetype_asp = "aspvbs"
ASYMPTOTE *asy.vim* *ft-asy-syntax*
By default, only basic Asymptote keywords are highlighted. To highlight
extended geometry keywords: >
:let g:asy_syn_plain = 1
and for highlighting keywords related to 3D constructions: >
:let g:asy_syn_three = 1
By default, Asymptote-defined colors (e.g: lightblue) are highlighted. To
highlight TeX-defined colors (e.g: BlueViolet) use: >
:let g:asy_syn_texcolors = 1
or for Xorg colors (e.g: AliceBlue): >
:let g:asy_syn_x11colors = 1
BAAN *baan.vim* *baan-syntax*
The baan.vim gives syntax support for BaanC of release BaanIV up to SSA ERP LN
for both 3 GL and 4 GL programming. Large number of standard defines/constants
are supported.
Some special violation of coding standards will be signalled when one specify
in ones |.vimrc|: >
let baan_code_stds=1
*baan-folding*
Syntax folding can be enabled at various levels through the variables
mentioned below (Set those in your |.vimrc|). The more complex folding on
source blocks and SQL can be CPU intensive.
To allow any folding and enable folding at function level use: >
let baan_fold=1