forked from ma6174/vim
-
Notifications
You must be signed in to change notification settings - Fork 0
/
syntax.cnx
executable file
·4086 lines (2983 loc) · 170 KB
/
syntax.cnx
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 7.3. 最近更新: 2010年8月
VIM 参考手册 by Bram Moolenaar
译者: Willis
http://vimcdoc.sf.net
语法高亮 *syntax* *syntax-highlighting* *coloring*
语法高亮使得 Vim 可以用不同的字体或颜色显示文本的不同部分。这些部分可以是特定
的关键字,或者匹配某模式的文本。Vim 不会分析整个文件 (为了保持快速),所以高亮
功能有其限制。词法高亮或者是一个更合适的名字,但既然大家都使用语法高亮,我们也
就如此称呼。
Vim 支持所有终端上的语法高亮。但因为多数普通的终端只有有限的高亮的选择,GUI 版
本 gvim 的语法高亮的效果最好。
用户手册里:
|usr_06.txt| 介绍语法高亮。
|usr_44.txt| 介绍如何写语法文件。
1. 快速入门 |:syn-qstart|
2. 语法文件 |:syn-files|
3. 语法载入过程 |syntax-loading|
4. 语法文件附注 |:syn-file-remarks|
5. 定义语法 |:syn-define|
6. :syntax 参数 |:syn-arguments|
7. 语法模式 |:syn-pattern|
8. 语法簇 |:syn-cluster|
9. 包含语法文件 |:syn-include|
10. 同步 |:syn-sync|
11. 列出语法项目 |:syntax|
12. Highlight 命令 |:highlight|
13. 链接组 |:highlight-link|
14. 清理 |:syn-clear|
15. 高亮标签 |tag-highlight|
16. 窗口局部语法 |:ownsyntax|
17. 彩色 xterm |xterm-color|
{Vi 无此功能}
如果编译时关闭了 |+syntax| 特性,就不会有语法高亮的功能。
==============================================================================
1. 快速入门 *:syn-qstart*
*:syn-enable* *:syntax-enable*
这个命令打开语法高亮: >
:syntax enable
实际上,它只是执行如下命令 >
:source $VIMRUNTIME/syntax/syntax.vim
如果没有设置 VIM 环境变量,Vim 会试图用其它方法找到该路径 (见 |$VIMRUNTIME|)。
通常总能找到,如果不行,你可以自己设置 VIM 环境变量为存放 Vim 相关文件所在的
目录。例如,如果你的语法文件放在 "/usr/vim/vim50/syntax" 目录,设置
$VIMRUNTIME 为 "/usr/vim/vim50"。启动 Vim 前,你必须在外壳上进行此设置。
*:syn-on* *:syntax-on*
":syntax enable" 命令会保持你当前的色彩设置。这样,不管在使用此命令的前后,你
都可以用 ":highlight" 命令设置你喜欢的颜色。如果你希望 Vim 用缺省值覆盖你自己
的,只要用: >
:syntax on
<
*:hi-normal* *:highlight-normal*
如果你运行在 GUI 环境里,你可以这样得到黑底白字: >
:highlight Normal guibg=Black guifg=White
关于色彩终端,见 |:hi-normal-cterm|。
关于设置你自己的语法高亮色彩,见 |syncolor|。
注意: MS-DOS 和 Windows 上的语法文件以 <CR><NL> 结束每一行。Unix 上则以 <NL>
结尾。这意味着你需要为自己的系统选择合适的文件。不过,在 MS-DOS 和 Windows
上,如果 'fileformats' 选项非空,会自动选择正确的格式。
注意: 使用反转视频时 ("gvim -fg white -bg black"),'background' 的缺省值直到
GUI 窗口打开时才会设置。这发生在 |gvimrc| 的读入之后,从而会使用错误的缺省高
亮。要在打开高亮前设置 'background' 的缺省值,在 |gvimrc| 文件里包含 ":gui" 命
令: >
:gui " 打开窗口并设置 'background' 的缺省值
:syntax on " 启动语法高亮,使用 'background' 来设置颜色
注意: 在 |gvimrc| 里使用 ":gui" 意味着 "gvim -f" 不会在前台打开!这时,要使用
":gui -f"。
*g:syntax_on*
你可以用这个命令切换语法的打开/关闭 >
:if exists("g:syntax_on") | syntax off | else | syntax enable | endif
要把它放到映射里,你可以用: >
:map <F7> :if exists("g:syntax_on") <Bar>
\ syntax off <Bar>
\ else <Bar>
\ syntax enable <Bar>
\ endif <CR>
[使用 |<>| 记法,按本义输入]
细节:
":syntax" 命令是用执行文件脚本实现的。要了解它到底干了什么,察看以下文件:
命令 文件 ~
:syntax enable $VIMRUNTIME/syntax/syntax.vim
:syntax on $VIMRUNTIME/syntax/syntax.vim
:syntax manual $VIMRUNTIME/syntax/manual.vim
:syntax off $VIMRUNTIME/syntax/nosyntax.vim
另见 |syntax-loading|。
注意: 如果显示长行很慢而关闭语法高亮就能加快,考虑设置 'synmaxcol' 选项为一个
较小的值。
==============================================================================
2. 语法文件 *:syn-files*
某个语言的语法和高亮命令通常存在一个语法文件里。命名惯例是: "{name}.vim"。其
中,{name} 是语言的名字或者缩写 (一旦在 DOS 文件系统上,要适用 8.3 字符的名字
限制)。
例如:
c.vim perl.vim java.vim html.vim
cpp.vim sh.vim csh.vim
语法文件可以包含任何 Ex 命令,就像 vimrc 文件那样。但应该只有适用于特定语言的
命令才放在里面。如果该语言是另外一个语言的超集,它可以包含那个语言对应的文件。
例如,cpp.vim 可以包含 c.vim 文件: >
:so $VIMRUNTIME/syntax/c.vim
.vim 文件通常使用自动命令载入。例如: >
:au Syntax c runtime! syntax/c.vim
:au Syntax cpp runtime! syntax/cpp.vim
这些命令通常出现在 $VIMRUNTIME/syntax/synload.vim 文件里。
如果你有多个文件,可以用文件类型作为目录名。该目录下的所有 "*.vim" 文件都会被
使用。例如:
~/.vim/after/syntax/c/one.vim
~/.vim/after/syntax/c/two.vim
创 立 你 自 己 的 语 法 文 件 *mysyntaxfile*
一旦你创立自己的语法文件,并且需要 Vim 在使用 ":syntax enable" 的时候自动调用
它们的时候,按如下操作进行:
1. 建立自己的用户运行时目录。通常,把它放在 'runtimepath' 选项的第一项。Unix
的例子: >
mkdir ~/.vim
2. 在其中建立 "syntax" 目录。Unix 上: >
mkdir ~/.vim/syntax
3. 编写 Vim 语法文件。或者从 internet 下载。然后写入你的 syntax 目录。例如,对
于 "mine" 语言的语法: >
:w ~/.vim/syntax/mine.vim
现在你可以手动启动语法文件: >
:set syntax=mine
这时,你并不需要退出 Vim。
如果你想 Vim 也实现文件类型的检测,见 |new-filetype|。
如果你想为多个用户设立系统,而不希望每个用户增加相同的语法文件的话,可以使用
'runtimepath' 里的其它目录。
添 加 到 已 存 在 的 语 法 文 件 *mysyntaxfile-add*
如果你对已有的语法文件大体满意,只需要增加或者修正一些高亮项目,执行以下步骤即
可:
1. 建立你的 'runtimepath' 里的用户目录,见上。
2. 在那里建立目录 "after/syntax"。Unix 上: >
mkdir ~/.vim/after
mkdir ~/.vim/after/syntax
3. 编写 Vim 脚本,包含你希望使用的命令。例如,要在 C 语法里改变颜色: >
highlight cComment ctermfg=Green guifg=Green
4. 把该文件写道 "after/syntax" 目录。使用该语法的名字,另加上 ".vim"。对于我们
的 C 语法: >
:w ~/.vim/after/syntax/c.vim
这样就行了。下一次你编辑 C 文件时,Comment 色彩就不会一样了。你甚至不需要重启
Vim。
替 换 已 存 在 的 语 法 文 件 *mysyntaxfile-replace*
如果你不喜欢发布的语法文件版本,或者你下载了新版本。可以采用上述的
|mysyntaxfile| 相同的步骤。只要确保你写的语法文件在 'runtimepath' 较早的位置就
可以了。Vim 只会载入第一个找到的语法文件。
命 名 惯 例 *group-name* *{group-name}* *E669* *W18*
高亮组名用于匹配相同类型事物的高亮项目。它们被链接到用于指定颜色的高亮组。语法
组名本身不指定任何颜色或属性。
高亮或者语法组的名字必须由 ASCII 字母,数字和下划线组成。如使用正规表达式表示:
"[a-zA-Z0-9_]*"。
要允许每个用户选择他自己喜欢的色彩系列,许多语言应该使用相同的高亮组名。以下是
建议的组名 (如果语法高亮能够正确工作,你应该能看到实际的颜色,除了 "Ignore" 以
外):
*Comment v 任何注释
*Constant v 任何常数
String v 字符串常数: "这是字符串"
Character v 字符常数: 'c'、'\n'
Number v 数值常数: 234、0xff
Boolean v 布尔型常数: TRUE、false
Float v 浮点常数: 2.3e10
*Identifier v 任何变量名
Function v 函数名 (也包括: 类的方法名)
*Statement v 任何语句
Conditional v if、then、else、endif、switch 等
Repeat v for、do、while 等
Label v case、default 等
Operator v "sizeof"、"+"、"*" 等
Keyword v 其它关键字
Exception v try、catch、throw
*PreProc v 通用预处理命令
Include v 预处理命令 #include
Define v 预处理命令 #define
Macro v 同 Define
PreCondit v 预处理命令 #if、#else、#endif 等
*Type v int、long、char 等
StorageClass v static、register、volatile 等
Structure v struct、union、enum 等
Typedef v typedef 定义
*Special v 任何特殊符号
SpecialChar v 常数中的特殊字符
Tag v 可以使用 CTRL-] 的项目
Delimiter v 需要注意的字符
SpecialComment v 注释里的特殊部分
Debug v 调试语句
*Underlined v 需要突出的文本,HTML 链接
*Ignore v 留空,被隐藏 |hl-Ignore|
*Error v 有错的构造
*Todo v 需要特殊注意的部分;主要是关键字 TODO FIXME 和 XXX
* 标记的名字是主要组,其它是次要组。对主要组而言,"syntax.vim" 文件包含缺省的
高亮设置。次要组则链接到主要组。所以它们拥有相同的高亮设置。不过,你可以通过
":highlight" 命令在 "syntax.vim" 文件之后改变所有组的缺省值。
注意 高亮组的名字对大小写不敏感。"String" 和 "string" 可用来表示相同的组。
以下名字是保留字,它们不应用作组名:
NONE ALL ALLBUT contains contained
*hl-Ignore*
如果你使用 Ignore 组,也可以考虑使用隐藏机制。见 |conceal|。
==============================================================================
3. 语法载入过程 *syntax-loading*
这里解释命令 ":syntax enable" 执行的细节。Vim 初始化自身时,它寻找运行时文件的
位置。其值用来设置这里使用的变量 |$VIMRUNTIME|。
":syntax enable" 和 ":syntax on" 完成以下步骤:
执行 $VIMRUNTIME/syntax/syntax.vim
|
+- 清除旧的语法: 执行 $VIMRUNTIME/syntax/nosyntax.vim
|
+- 先执行 'runtimepath' 里的 syntax/synload.vim
| |
| +- 为语法高亮设置色彩。如果已经定义了色彩方案,使用 ":colors {name}"
| | 再次载入。不然,执行 ":runtime! syntax/syncolor.vim"。":syntax on"
| | 会覆盖已有的颜色,而 ":syntax enable" 只会设置没有设置过的组。
| |
| +- 设置 syntax 自动命令,以便在设置 'syntax' 选项时,自动载入合适的语
| | 法文件。 *synload-1*
| |
| +- 通过 |mysyntaxfile| 变量,载入用户可选的文件。这只是为了和 Vim 5.x
| | 兼容。 *synload-2*
|
+- 执行 ":filetype on",后者又执行 ":runtime! filetype.vim"。它载入任何找
| 到的 filetype.vim。其中,总会执行 $VIMRUNTIME/filetype.vim。后者执行:
| |
| +- 根据后缀名,安装自动命令来设置 'filetype' 选项。这为已知的文件类型
| | 建立了文件名和文件类型的联系。 *synload-3*
| |
| +- 通过 *myfiletypefile* 变量,载入用户可选的文件。这只是为了和 Vim
| | 5.x 兼容。 *synload-4*
| |
| +- 安装自动命令,在没有检测到文件类型时执行 scripts.vim 。
| | *synload-5*
| |
| +- 执行 $VIMRUNTIME/menu.vim,设置 Syntax 菜单。|menu.vim|
|
+- 安装 FileType 自动命令,在检测到文件类型时,设置 'syntax' 选项。
| *synload-6*
|
+- 执行 syntax 自动命令,为每个已经载入的缓冲区启动语法高亮。
载入文件时,Vim 这样查找相关的语法文件:
文件的载入激活 BufReadPost 自动命令。
|
+- 如果和 |synload-3| 中的一个自动命令匹配 (已知的文件类型) 或者
| |synload-4| (用户的文件类型),'filetype' 选项设为文件的所属类型。
|
+- 如果文件类型没有找到,激活 |synload-5| 中的自动命令,并在
| 'runtimepath' 里找寻 scripts.vim。其中,总是会执行
| $VIMRUNTIME/scripts.vim。后者执行以下步骤。
| |
| +- 通过 *myscriptsfile* 变量,载入用户可选的文件。这只是为了和 Vim
| | 5.x 兼容。
| |
| +- 如果文件类型仍然未知,检查文件的内容,并使用类似于
| "getline(1) =~ pattern" 的检查确定文件类型能否识别,并设置
| 'filetype'。
|
+- 如果文件类型被确定并且设置了 'filetype',激活 FileType 自动命令,见上
| 面的 |synload-6|。根据确定的文件类型设置 'syntax'。
|
+- 上面设置 'syntax' 选项的步骤激活 |synload-1| (和 |synload-2|) 设置的自
| 动命令。它会使用以下命令找到 'runtimepath' 里的主语法文件:
| runtime! syntax/<name>.vim
|
+- 激活任何用户安装的 FileType 或 Syntax 自动命令。这可以用来为某项语法修
正高亮方式。
==============================================================================
4. 语法文件附注 *:syn-file-remarks*
*b:current_syntax-variable*
根据当前激活的是哪部语法,Vim 把载入的语法的名字保存在 "b:current_syntax" 变量
里。例如: >
:au BufReadPost * if b:current_syntax == "csh"
:au BufReadPost * 做一些事
:au BufReadPost * endif
2HTML *2html.vim* *convert-to-HTML*
它本身并不是语法文件,只是一个把当前窗口转换成 HTML 的脚本。Vim 打开一个新窗
口,在那里它构造 HTML 文件。
你不应该设置 'filetype' 或 'syntax' 选项为 "2html"!执行此脚本,以转换当前文
件: >
:runtime! syntax/2html.vim
<
*:TOhtml*
也可以使用 ":TOhtml" 用户命令。它是在一个标准插件里定义的。":TOhtml" 可用于行
范围和可视区域: >
:10,40TOhtml
警告: 这挺慢的!脚本必须处理每行的每个字符。因为它太慢,缺省每个会花很长时间的
步骤都会在状态行上显示进度条。如果不想看到进度条,可以关闭之,这会有很不显著的
速度提高:
let g:html_no_progress = 1
":TOhtml" 还有个特殊功能: 如果窗口处于比较模式,会生成显示所有相关窗口的
HTML。可以通过设置 g:html_diff_one_file 变量来关闭之: >
let g:html_diff_one_file = 1
保存结果文件以后,你可以使用任何浏览器浏览。那里的颜色应该和你在 Vim 里看到的
一模一样。
要限制转换的行范围,给 |:TOhtml| 命令加上行范围,或者设置 "html_start_line" 和
"html_end_line" 分别为要转换的第一行和最后一行。例如,要指定最近设置的可视区
域: >
:let g:html_start_line = line("'<")
:let g:html_end_line = line("'>")
行的标号方式根据 'number' 选项和 Number 高亮属性而定。通过设置
"html_number_lines" 为一非零值,你可以让输出的 HTML 强制给行编号: >
:let g:html_number_lines = 1
设为零则强制关闭行号: >
:let g:html_number_lines = 0
要回到缺省情况,即使用 'number' 的设置,可删除此变量: >
:unlet g:html_number_lines
缺省情况生成使用层叠样式表 (CSS1) 的合法 HTML 4.01 文件。如果你真的需要生成支
持旧版本的浏览器或其它没有基本 CSS 支持的用户代理 (user agent) 的标记。可用: >
:let g:html_use_css = 0
可隐藏文本被从 HTML 中去除,并取决于 'conceallevel' 的当前值,用 |:syn-cchar|
或 'listchars' 代替。如果你总是想显示文档的所有文本,要么在执行 2html 前设置
'conceallevel' 为零,要么: >
:let g:html_ignore_conceal = 1
类似地,HTML 里关闭折叠的处理和实际显示的效果一样。如果不想如此,启动 2html 前
用 |zR| 命令,或者: >
:let g:html_ignore_folding = 1
你可能希望生成所有数据都包含在折叠中的 HTML,以便用户能像和 Vim 相同的方式浏览
经折叠的数据。为此可生成动态的折叠信息,用: >
:let g:html_dynamic_folds = 1
html_dynamic_folds 会隐含定义 html_use_css,因为要在旧版浏览器支持该功能太困难
了。不过,html_ignore_folding 优先于 html_dynamic_folds.
html_dynamic_folds 缺省会生成折叠列,如同 vim 的 foldcolumn 设置,它会用
javascript 打开或关闭 HTML 文档中的折叠。此折叠列的宽度至少为 |'foldcolumn'|
的当前值,但会加宽以匹配文档的最大折叠级别。如果你完全不想显示折叠列,用: >
:let g:html_no_foldcolumn = 1
用此选项,HTML 中不会产生能打开折叠的折叠列。为此,提供另一个选项:
html_hover_unfold。打开此选项会使用 CSS 2.0,当用户把鼠标移到折叠之上时就会打
开折叠。注意 旧版本的浏览器 (尤其是 Internet Explorer 6) 不支持该功能。我们生
成 IE6 浏览器特定的 HTML 标记使之回归到普通的 CSS 1 代码,这样折叠还能在此浏览
器下正常显示,但没有折叠列它们无法被打开。注意 使用 html_hover_unfold 可以在关
闭 javascript 的现代浏览器中仍然能看到关闭的折叠。要使用此选项,用: >
:let g:html_hover_unfold = 1
置位 html_no_foldcolumn 和 html_dynamic_folds 会自动置位 html_hover_unfold,否
则折叠就不可能是动态的了。
缺省使用 "<pre>" 和 "</pre>" 围绕文本。使得这些文本看起来和 Vim 的一致,但没有
回绕。如果你希望有回绕,且可以忍受不太一致的外观,可使用: >
:let g:html_no_pre = 1
这会在每行结束的地方使用 <br>,而用 " " 来显示连续的空格。
'encoding' 的当前值用于指定 HTML 文件的字符集。这只适用于 'encoding' 的值有对
应的 HTML 字符集名字的时候。要改变这种机制,设置 g:html_use_encoding 为要用的
字符集名: >
:let g:html_use_encoding = "foobar"
如果不想产生指定字符集的那行,设置 g:html_use_encoding 为空字符串: >
:let g:html_use_encoding = ""
要回到自动的机制,删除 g:html_use_encoding 变量: >
:unlet g:html_use_encoding
<
关于 diff 模式,多于三行的填充行序列显示为三行,中间行提到插入的总行数。如果你
宁愿看到所有的插入行,用: >
:let g:html_whole_filler = 1
要回到三行的显示方式: >
:unlet g:html_whole_filler
<
*convert-to-XML* *convert-to-XHTML*
另一个选择是使用该脚本产生 XHTML (XML 兼容的 HTML)。这可以通过设置
"html_use_xhtml" 变量完成: >
:let g:html_use_xhtml = 1
任何选项都可以通过显式设置想要的值来打开或关闭,或者通过 |:unlet| 删除该变量来
恢复其缺省值。
评注:
- 只有在 GUI 支持的版本里,才能工作。如果没有运行 GUI (可能仍然使用 X11),或许
也可以,但是效果不一定好 (颜色可能不对)。
- 一些真的很老的浏览器可能不会显示背景色。
- 你可以在大多数浏览器里打印文件 (而且有颜色)!
此处是一个如何在 Unix 外壳上给所有的 .c 和 .h 文件运行此脚本的例子: >
for f in *.[ch]; do gvim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" $f; done
<
ABEL *abel.vim* *ft-abel-syntax*
ABEL 高亮设置提供一些用户定义的选项。要打开这些选项,给相应的选项设置任意值。
例如: >
:let abel_obsolete_ok=1
可用 ":unlet" 关闭。例如: >
:unlet abel_obsolete_ok
变量 高亮 ~
abel_obsolete_ok 废弃的关键字接受为 statement,而非 error
abel_cpp_comments_illegal 不把 '//' 解释为行内注释的引导符
ADA
见 |ft-ada-syntax|
ANT *ant.vim* *ft-ant-syntax*
ant 语法文件缺省提供了 javascript 和 python 的语法高亮。其他脚本语言的语法高亮
可以通过 AntSyntaxScript() 函数安装。它接受的第一个参数是标签名,而第二个是脚
本语法文件名。例如: >
:call AntSyntaxScript('perl', 'perl.vim')
会为下面的 ant 代码提供 Perl 的语法高亮 >
<script language = 'perl'><![CDATA[
# 这里的一切都作为 perl 脚本高亮
]]></script>
|mysyntaxfile-add| 说明如何永久的安装脚本语言。
APACHE *apache.vim* *ft-apache-syntax*
Apache 语法文件提供的语法高亮取决于 Apache HTTP 服务器的版本,缺省为 1.3.x。设
置 "apache_version" 为 Apache 的相应版本 (字符串形式) 可以得到其它版本的高亮方
式。例如: >
:let apache_version = "2.0"
<
*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*
匹配 "*.i" 的可以是 Progress 或者汇编文件。如果自动检测对你不工作,或者你从来
不编辑 Progress,在你启动的 vimrc 里这么用: >
:let filetype_i = "asm"
把 "asm" 替换成你实际使用的汇编语言。
许多类型的汇编语言都使用相同的文件扩展名。因而,你或者需要自己选择类型,或者在
汇编文件里增加使 Vim 能识别的行。目前,包含了以下的语法文件:
asm GNU 汇编 (缺省)
asm68k Motorola 680x0 汇编
asmh8300 Hitachi H-8300 版本的 GNU 汇编
ia64 Intel Itanium 64
fasm Flat 汇编 (http://flatassembler.net)
masm Microsoft 汇编 (可能适用于任何 80x86)
nasm Netwide 汇编
tasm Turbo 汇编 (提供到 Penitum 和 MMX 的 80x86 操作码)
pic PIC 汇编 (目前支持 PIC16F84)
最灵活的方式是在你的汇编文件里加上如下一行: >
asmsyntax=nasm
把 "nasm" 换成实际的汇编语法的名字。该行必须是文件头五行中的一行。此文本前后不
能紧接着非空白的其它文本。
语法类型可以为某个缓冲区定制。方法是设置 b:asmsyntax 变量: >
:let b:asmsyntax = "nasm"
如果没有设置 b:asmsyntax,不管是自动还是手动,就会使用全局变量 asmsyntax 的
值。它可以看作是缺省的汇编语言: >
:let asmsyntax = "nasm"
如果什么都没有定义,最后就假定是 "asm" 语法。
Netwide 汇编器 (nasm.vim) 可选高亮特性 ~
要打开特性: >
:let {variable}=1|set syntax=nasm
要关闭特性: >
:unlet {variable} |set syntax=nasm
变量 高亮 ~
nasm_loose_syntax 非正式的分析器允许的语法不视为错误 (取决于分析器;不推
荐)
nasm_ctx_outside_macro 宏之外的上下文不视为错误
nasm_no_warn 潜在有危险的语法不视为 Todo 那样的警告
ASPPERL 和 ASPVBS *ft-aspperl-syntax* *ft-aspvbs-syntax*
*.asp 和 *.asa 文件可以是 Perl 或者 Visual Basic 脚本。因为很难检测,你可以设
置两个全局变量,来告诉 Vim 你要用哪一个。Perl 脚本可用: >
:let g:filetype_asa = "aspperl"
:let g:filetype_asp = "aspperl"
Visual Basic 可用: >
:let g:filetype_asa = "aspvbs"
:let g:filetype_asp = "aspvbs"
BAAN *baan.vim* *baan-syntax*
baan.vim 提供 BaanIV 到 SSA ERP LN 发行版的 BaanC 的语法支持,用于 3 GL 和 4
GL 编程。支持很多的标准宏定义/常数。
如果你在某个 |.vimrc| 里指定下面这行,不合编码标准的一些特殊错误会被报告: >
let baan_code_stds=1
*baan-folding*
使用下面提到的变量,可以在不同层次上打开语法折叠 (在 |.vimrc| 里设置)。源代码
块和 SQL 上越复杂的折叠越需要 CPU。
要允许折叠并在函数级别上打开折叠: >
let baan_fold=1
可以在源代码块级别上打开折叠,如 if、while、for,... 这里开始/结束关键字之前的
缩进必须一致 (空格不等于制表)。 >
let baan_fold_block=1
可以为内嵌的 SQL 块打开折叠,如 SELECT、SELECTDO、SELECTEMPTY,... 这里开始/结
束关键字之前的缩进必须一致 (空格不等于制表)。 >
let baan_fold_sql=1
<
注意: 代码块级别的折叠可能产生许多小的折叠。建议在 .vimrc 里用 |:set| 设置选项
'foldminlines' 和 'foldnestmax',在 .../after/syntax/baan.vim 里用 |:setlocal|
设置也可以 (见 |after-directory|)。例如: >
set foldminlines=5
set foldnestmax=6
BASIC *basic.vim* *vb.vim* *ft-basic-syntax* *ft-vb-syntax*
Visual Basic 和 "普通的" Basic 都使用扩展名 ".bas"。要检测使用的是哪一个,Vim
在文件的头五行检查字符串 "VB_Name"。如果没找到,文件类型将是 "basic",不然就是
"vb"。带 ".frm" 扩展名的文件总被视为 Visual Basic 类型。
C *c.vim* *ft-c-syntax*
C 高亮的一些设置是可选的。要打开,给相应的变量赋任何值。例如: >
:let c_comment_strings = 1
可用 ":unlet" 关闭。例如: >
:unlet c_comment_strings
变量 高亮 ~
c_gnu GNU gcc 专用的项目
c_comment_strings 注释里的字符串和数字
c_space_errors 行尾的空格和 <Tab> 之前的空格
c_no_trail_space_error ... 不包括行尾的空格
c_no_tab_space_error ... 不包括 <Tab> 之前的空格
c_no_bracket_error 不高亮 {};如果在 [] 里面视为错误
c_no_curly_error 不高亮 {};如果在 [] 和 () 里面视为错误;
除了出现在首列的 { 和 } 以外
c_curly_error 高亮丢失的 };强制从文件首开始同步,因而可能会较慢
c_no_ansi 不使用 ANSI 标准类型和常数
c_ansi_typedefs ... 但使用 ANSI 标准类型
c_ansi_constants ... 但使用 ANSI 标准常数
c_no_utf 不高亮字符串里的 \u 和 \U
c_syntax_for_h *.h 文件使用 C 语法,而不是 C++ 的
c_no_if0 不把 "#if 0" 块高亮为注释
c_no_cformat 不高亮字符串里的 %-格式
c_no_c99 不高亮 C99 标准的项目
如果 'foldmethod' 设为 "syntax",那么 /* */ 注释和 { } 块成为折叠。如果你不想
让注释成为折叠: >
:let c_no_comment_fold = 1
"#if 0" 块也被折叠,除非: >
:let c_no_if0_fold = 1
如果你注意到往回滚动时,高亮出现问题,但 CTRL-L 重画又可以修正的话,尝试设置
"c_minlines" 内部变量为较大的值: >
:let c_minlines = 100
这使得语法同步在第一个显示行之前的 100 行开始。缺省值为 50 (如果设置了
c_no_if0,则为 15)。使用较大的值的缺点是重画会变慢。
如果使用 "#if 0" / "#endif" 风格的注释高亮,注意它只适用于 "#if 0" 出现在窗口
顶部往上不超过 "c_minlines" 行的场合。如果你有很长的 "#if 0" 构造,它不会被正
确地高亮。
要匹配注释里的附加项目,使用 cCommentGroup 簇。例如: >
:au Syntax c call MyCadd()
:function MyCadd()
: syn keyword cMyItem contained Ni
: syn cluster cCommentGroup add=cMyItem
: hi link cMyItem Title
:endfun
ANSI 常数使用 "cConstant" 组高亮。这包括 "NULL"、"SIG_IGN" 还有其它。但不包
括,比如说,"TRUE"。因为它不在 ANSI 标准里。如果你觉得弄不清楚,删除 cConstant
高亮: >
:hi link cConstant NONE
如果你看到 '{' 和 '}' 被高亮为错误,而实际并非如此的时候,复位 cErrInParen 和
cErrInBracket 的高亮。
如果想在你的 C 文件里使用折叠,可以在 'runtimpath' 的 "after" 目录下的一个文件
里加上这些行。Unix 上,这会是 ~/.vim/after/syntax/c.vim. >
syn sync fromstart
set foldmethod=syntax
CH *ch.vim* *ft-ch-syntax*
C/C++ 解释器。Ch 的语法高亮和 C 相似,它基于 C 语法文件。|c.vim| 说明所有 C 可
用的设置。
设置此变量,告诉 Vim 用 Ch 语法来处理 *.h 文件,而不是 C 或 C++ 语法: >
:let ch_syntax_for_h = 1
CHILL *chill.vim* *ft-chill-syntax*
Chill 语法高亮和 C 类似。可用的设置见 |c.vim|。此外,还有:
chill_space_errors 类似于 c_space_errors
chill_comment_string 类似于 c_comment_strings
chill_minlines 类似于 c_minlines
CHANGELOG *changelog.vim* *ft-changelog-syntax*
ChangeLog 支持行首的空格高亮。如果你不喜欢,在你的 .vimrc 里加入下行: >
let g:changelog_spacing_errors = 0
下次你编辑 changelog 文件时,就会应用。你也可以使用
"b:changelog_spacing_errors" 来为每个缓冲区分别设置 (在载入语法文件以前)。
你可以改变现在使用的高亮,例如把空格标记为错误: >
:hi link ChangelogError Error
或者避免高亮: >
:hi link ChangelogError NONE
这些会立即生效。
COBOL *cobol.vim* *ft-cobol-syntax*
COBOL 高亮对传统的代码和新开发的代码有不同的需要。这来自于需求的差异 (维护还是
开发),以及一些其它因素。要使用传统代码的高亮,在 .vimrc 里加上此行: >
:let cobol_legacy_code = 1
要再次关闭,可用: >
:unlet cobol_legacy_code
COLD FUSION *coldfusion.vim* *ft-coldfusion-syntax*
ColdFusion 有 HTML 注释的自己的版本。要打开 ColdFusion 风格的注释高亮,在你的
启动文件里加上此行: >
:let html_wrong_comments = 1
ColdFusion 语法文件是基于 HTML 的语法文件的。
CSH *csh.vim* *ft-csh-syntax*
这里讨论名为 "csh" 的外壳。注意 有的系统实际使用的是 tcsh。
要检测一个文件是 csh 还是 tcsh 异常困难。有的系统把 /bin/csh 符号链接到
/bin/tcsh,使得区别 csh 和 tcsh 几乎不可能。如果 VIM 猜错,你可以自己设置
"filetype_csh" 变量。要使用 csh: >
:let filetype_csh = "csh"
要使用 tcsh: >
:let filetype_csh = "tcsh"
带 tcsh 扩展名的脚本或者 tcsh 的标准文件名 (.tcshrc、tcsh.tcshrc、tcsh.login)
会使用文件类型 tcsh。其它的 tcsh/csh 脚本也会被识别为 tcsh,_除非_存在
"filetype_csh" 变量。如果存在 "filetype_csh" 变量,文件类型会设为该变量的值。
CYNLIB *cynlib.vim* *ft-cynlib-syntax*
Cynlib 文件是使用 Cynlib 类库的 C++ 文件。它们使用 C++ 来为硬件建模和模拟。通
常 Cynlib 文件使用 .cc 或 .cpp 扩展名,这使得它们和普通的 C++ 文件难以区别。因
而,要使用 Cynlib 为 .cc 文件高亮,在你的 .vimrc 文件里加上此行: >
:let cynlib_cyntax_for_cc=1
cpp 文件也类似 (该扩展名通常为 Windows 使用) >
:let cynlib_cyntax_for_cpp=1
要再次关闭,可用: >
:unlet cynlib_cyntax_for_cc
:unlet cynlib_cyntax_for_cpp
<
CWEB *cweb.vim* *ft-cweb-syntax*
匹配 "*.w" 的文件可为 Progress 文件或者 cweb 文件。如果自动检测不行,或者你从
来不编辑 Progress,可以在启动的 vimrc 文件里用: >
:let filetype_w = "cweb"
DESKTOP *desktop.vim* *ft-desktop-syntax*
该语法文件的主要目的是根据 freedesktop.org 标准:
http://standards.freedesktop.org/desktop-entry-spec/latest/
来高亮 .desktop 和 .directory 文件。但实际上,几乎没人完全实现了标准。所以,它
实际被用来高亮所有的 Unix ini 文件。如果你希望强制使用符合标准的严格的高亮方
式,在 vimrc 文件放上: >
:let enforce_freedesktop_standard = 1
DIRCOLORS *dircolors.vim* *ft-dircolors-syntax*
dircolors 工具的高亮定义有一个选项。它的存在是为了和 Slackware GNU/Linux 发布
版本里的该命令兼容。它增加了一些多数版本忽略的关键字。在 Slackware 系统中,该
工具接受这些关键字并在处理中应用。要允许使用 Slackware 关键字,在你的启动文件
里加入如下一行: >
let dircolors_is_slackware = 1
DOCBOOK *docbk.vim* *ft-docbk-syntax* *docbook*
DOCBOOK XML *docbkxml.vim* *ft-docbkxml-syntax*
DOCBOOK SGML *docbksgml.vim* *ft-docbksgml-syntax*
有两种类型的 DocBook 文件: SGML 和 XML。要指定使用那种类型,需要设置
"b:docbk_type" 变量。如果 Vim 能够识别,它会自动设置该变量。如果 Vim 猜不到,
缺省的类型是 XML。
你可以手动设置: >
:let docbk_type = "sgml"
或者: >
:let docbk_type = "xml"
你需要在载入语法文件前作如此设置,这有点复杂。
更简单的方法是设置文件类型为 "docbkxml" 或 "docbksgml": >
:set filetype=docbksgml
或: >
:set filetype=docbkxml
DOSBATCH *dosbatch.vim* *ft-dosbatch-syntax*
DOS 批处理文件的高亮有一个选项。它和 Windows 2000 的命令解释器的新扩展有关,可
以通过 dosbatch_cmdextversion 变量控制。Windows NT 上,它应该取值为 1,Windows
2000 应该为 2。下面这行可以选择你想要的版本: >
:let dosbatch_cmdextversion = 1
如果没有定义该变量,缺省设为 2,以支持 Windows 2000 版本。
第二个选项控制 *.btm 文件是否被识别为 "dosbatch" 类型 (MS-DOS 批处理文件) 或
"btm" 类型 (4DOS 批处理文件)。缺省使用后者。下行可以让你选择前者: >
:let g:dosbatch_syntax_for_btm = 1
如果此变量无定义或为零,选择 btm 语法。
DOXYGEN *doxygen.vim* *doxygen-syntax*
Doxygen 使用特殊的文档格式生成代码文档 (和 Javadoc 类似)。本语法脚本为 c、
cpp、idl 和 php 文件加入 Doxygen 的高亮,Java 应该也能用。
有几个办法可以打开 Doxygen 格式。首先,在文件的模式行上可以给 syntax 加入
".doxygen",进行显式设置。示例: >
:set syntax=c.doxygen
或 >
// vim:syntax=c.doxygen
对于 C、C++、C# 和 idl 文件,也可以设置全局或局部于缓冲区变量
load_doxygen_syntax 来自动完成这个操作。在 .vimrc 里加上 >
:let g:load_doxygen_syntax=1
有一些变量影响语法高亮,它们大多和非标准的高亮选项有关。
变量 缺省 效果 ~
g:doxygen_enhanced_color
g:doxygen_enhanced_colour 0 Doxygen 注释使用非标准的高亮。
doxygen_my_rendering 0 关闭 HTML 粗体、斜体和
html_my_rendering 下划线的高亮。
doxygen_javadoc_autobrief 1 如果为 0,关闭 Javadoc autobrief 色彩
高亮。
doxygen_end_punctuation '[.]' 匹配 brief 结束标点的正规表达式。
还有一些高亮组值得提提,你可以对它们进行配置。
高亮 效果 ~
doxygenErrorComment 如果 code、verbatim 或 dot 段里丢失标点,注释
尾部的颜色。
doxygenLinkError 如果丢失 \link 段的 \endlink,注释尾部的颜色。
DTD *dtd.vim* *ft-dtd-syntax*
DTD 语法高亮缺省是大小写敏感的。如果不想如此,在你的启动文件里加入以下一行: >
:let dtd_ignore_case=1
DTD 语法会把未知的标签高亮为错误。如果这很讨厌,在执行 dtd.vim 语法文件之前,
可以用以下设置来关闭: >
:let dtd_no_tag_errors=1
参数实体 (parameter entity) 的名字使用 'Type' 高亮组高亮,标点和 '%' 使用
'Comment'。参数实体的实例使用 'Constant' 高亮组高亮,定界符 % 和 ; 则使用
'Type' 高亮组。以下设置可以关闭这些设定: >
:let dtd_no_param_entities=1
xml.vim 也包含了 DTD 语法文件,用以高亮内嵌的 dtd。
EIFFEL *eiffel.vim* *ft-eiffel-syntax*
尽管 Eiffel 不是大小写敏感的,它的风格指南鼓励如此,而且语法高亮文件也鼓励这样
使用。这使得同一类名的高亮可以不同。如果你想关闭大小写敏感的语法高亮,在启动文
件里加上这行: >
:let eiffel_ignore_case=1
大小写对类名和注释里的 TODO 标记仍然有影响。
相反,要更严格的检查,加入以下诸行之一: >
:let eiffel_strict=1
:let eiffel_pedantic=1
设置 eiffel_strict 只会捕获以下五个预定义的单词错误的大小写: "Current"、
"Void"、"Result"、"Precursor" 和 "NONE"。用于警告它们可能被不小心用作特性或类
名。
设置 eiffel_pedantic 会非常严格地遵循 Eiffel 风格指南 (例如,大小写字母的任意
混合和其它过时的大写关键字的方法都会被捕获)。
如果希望使用小写版本的 "Current"、"Void"、"Result" 和 "Precursor",可以用 >
:let eiffel_lower_case_predef=1
而不用完全关闭大小写敏感的高亮方式。
一些编译器里已经能够实验性地处理 ISE 推荐的新的创建语法,要打开此语法: >
:let eiffel_ise=1
最后,有的供应商支持十六进制的常数。在你的启动文件里加上这行就可以处理它们 >
:let eiffel_hex_constants=1
ERLANG *erlang.vim* *ft-erlang-syntax*
erlang 高亮支持 Erlang 语言 (ERicsson LANGuage)。
Erlang 是大小写敏感的,缺省的扩展名是 ".erl"。
如果你想关闭关键字高亮,在 .vimrc 里加上: >
:let erlang_keywords = 1
如果你想关闭内建函数的高亮,在 .vimrc 里加上: >
:let erlang_functions = 1
如果你想关闭特殊字符的高亮,在 .vimrc 里加上: >
:let erlang_characters = 1
FLEXWIKI *flexwiki.vim* *ft-flexwiki-syntax*
FlexWiki 是基于 ASP.NET 的 wiki 包,从 http://www.flexwiki.com 可以获得。
多数常用的 FlexWiki 语法元素都提供了语法高亮。本文件类型插件脚本设置了若干局部
于缓冲区的选项,使 FlexWiki 页面的编辑更加便捷。因为 FlexWiki 把换行符看成新段
落的开始,所以本插件设置 'tw'=0 (无限行长),置位 'wrap' (回绕长行而不使用水平
滚动),也置位 'linebreak' (在 'breakat' 包含的字符而不是在屏幕最后一个字符上回
绕),等等。本插件也包含了一些键盘映射,但它们缺省是关闭的。
如果你打开键盘映射,"j" 和 "k" 和光标键就会在显示行间上下移动。为此,在 .vimrc
里加入: >
:let flexwiki_maps = 1
FORM *form.vim* *ft-form-syntax*
FORM 文件里的语法元素的色彩方案使用缺省模式: Conditional、Number、Statement、
Comment、PreProc、Type 和 String。它遵循 1991 年版荷兰 CAN 组织
J.A.M. Vermaseren 编著的语言说明书 'Symbolic Manipulation with FORM'。
如果你想自己增加对缺省颜色的修改,需要重新定义以下语法组:
- formConditional
- formNumber
- formStatement
- formHeaderStatement
- formComment
- formPreProc
- formDirective
- formType
- formString
注意 缺省,form.vim 语法文件使用相同的语法组里实现 FORM 预处理器命令和指令。
预定义的 FORM 增强色彩模式可以用来区别头部语句和 FORM 程序本体的语句。要激活此
模式,在你的 vimrc 文件里定义以下变量 >
:let form_enhanced_color=1
在深色 gvim 显示中,增强模式也利用了附加的色彩特性。这里,语句
(formStatement) 使用 LightYellow 而不是 Yellow。而条件句 (formConditional) 使
用 LightBlue,以达到更好的区分度。
FORTRAN *fortran.vim* *ft-fortran-syntax*
缺省高亮方式和方言 ~
缺省使用适合 f95 (Fortran 95) 的高亮方式。这样的选择应该适用于绝大多数的用户,
因为 Fortran 95 是 Fortran 90 的超集,也差不多是 Fortran 77 的超集。已经引入了
Fortran 2003 和 Fortran 2008 的支持,它们自动在缺省 (f95) 高亮模式中可用。
Fortran 源代码形式 ~
Fortran 9x 可以使用固定宽度的源代码,也可以使用自由形式。注意如果形式设置错
误,语法高亮也不会正确。
创建新的 Fortran 文件时,语法脚本假定使用的是固定宽度的源代码。如果你总是使用
自由形式,那么在你的 .vimrc 里,把 >
:let fortran_free_source=1
放在 :syntax 命令前。如果你总是使用固定宽度格式,那么在你的 .vimrc 里,把 >
:let fortran_fixed_source=1
放在 .syntax 命令前。
如果源代码的格式取决于文件扩展名,那么最方便的方法是在 ftplugin 文件里设置
fortran_free_source。见 |ftplugin|。例如,假定你所有的使用 .f90 扩展名的
Fortran 文件使用自由形式编写,而其它的则使用固定宽度,那么在你的 ftplugin 文件
里加上以下的行 >
let s:extfname = expand("%:e")
if s:extfname ==? "f90"
let fortran_free_source=1
unlet! fortran_fixed_source
else
let fortran_fixed_source=1
unlet! fortran_free_source