forked from ma6174/vim
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoptions.cnx
executable file
·6607 lines (5921 loc) · 312 KB
/
options.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
*options.txt* For Vim version 7.3. 最近更新: 2010年8月
VIM 参考手册 by Bram Moolenaar
译者: Willis
http://vimcdoc.sf.net
选项 *options*
1. 设置选项 |set-option|
2. 自动设置选项 |auto-setting|
3. 选项总结 |option-summary|
选项的总览可见 help.txt |option-list|。
Vim 有很多内部变量和开关,可以达到特殊的效果。这些选项有三种形式:
布尔型 可以打开或关闭 *boolean* *toggle*
数值型 值为数值
字符串 值为字符串
==============================================================================
1. 设置选项 *set-option* *E764*
*:se* *:set*
:se[t] 显示所有不同于缺省值的选项。
:se[t] all 显示除了终端设置以外的所有选项。
:se[t] termcap 显示所有的终端选项。注意 在 GUI 里,不会显示键码,因为
它们是内部生成的,无法改变。而且 GUI 里即使修改终端代
码也没用 ...
*E518* *E519*
:se[t] {option}? 显示 {option} 的值。
:se[t] {option} 切换选项: 置位,打开。
数值选项: 显示其值。
字符串选项: 显示其值。
:se[t] no{option} 切换选项: 复位,关闭。
*:set-!* *:set-inv*
:se[t] {option}! 或
:se[t] inv{option} 切换选项: 反转其值。{Vi 无此功能}
*:set-default* *:set-&* *:set-&vi* *:set-&vim*
:se[t] {option}& 复位选项为其缺省值。可能和 'compatible' 的现值有关。
{Vi 无此功能}
:se[t] {option}&vi 复位选项为 Vi 的缺省值。{Vi 无此功能}
:se[t] {option}&vim 复位选项为 Vim 的缺省值。{Vi 无此功能}
:se[t] all& 设置所有除了终端设置的选项为其缺省值。'term'、 'lines'
和 'columns' 值不会改变。{Vi 无此功能}
*:set-args* *E487* *E521*
:se[t] {option}={value} 或
:se[t] {option}:{value}
设置字符串或数值选项的值为 {value}。
数值选项的值可以用十进制、十六进制 (0x 开头) 或八进制
('0' 开头) (十六进制和八进制的支持只限于提供 strtol()
函数的环境)。
可以用 'wildchar' 输入原来的值 (缺省是 <Tab>,但如果置
位 'compatible',是 CTRL-E)。见 |cmdline-completion|。
{option} 和 '=' 之间可以有空白,但会被忽略。'=' 和
{value} 之间不能有空白。
|option-backslash| 说明如何在 {value} 里使用空白和反斜
杠。
:se[t] {option}+={value} *:set+=*
把 {value} 加到数值选项里,或者附加到字符串选项之后。
如果选项是逗号分隔的列表,除非原来的值为空,会加上一个
逗号。
如果选项是标志位的列表,删除多余的标志位。如果加入已经
存在的标志位,选项值不变。
另见上面的 |:set-args|。
{Vi 无此功能}
:se[t] {option}^={value} *:set^=*
把 {value} 乘到数值选项里,或者附加到字符串选项之前。
如果选项是逗号分隔的列表,除非原来的值为空,会加上一个
逗号。
另见上面的 |:set-args|。
{Vi 无此功能}
:se[t] {option}-={value} *:set-=*
把 {value} 从数值选项里减去,或者从字符串选项里删除,
如果该值原来存在的话。如果不存在,不会有错误或者警告。
如果选项是逗号分隔的列表,除非新值为空,删除一个逗号。
如果选项是标志位的列表,{value} 必须和选项里出现的顺序
完全相同。一个一个地分别删除标志位可以解决这个问题。
另见上面的 |:set-args|。
{Vi 无此功能}
":set" 可以设置多个 {option} 参数。例如: >
:set ai nosi sw=3 ts=3
如果其中一个参数有错,给出错误信息,而且其后的参数也不再处理。
*:set-verbose*
如果 'verbose' 非零,显示选项值的同时会告诉你上次在哪里设置。例如: >
:verbose set shiftwidth cindent?
< shiftwidth=4 ~
Last set from modeline ~
cindent ~
Last set from /usr/local/share/vim/vim60/ftplugin/c.vim ~
只有请求特定选项的值时才会这么做,":verbose set all" 或者没有参数的
":verbose set" 都不会。
如果该选项是手动设置的,"Last set" 消息不会给出。
如果执行函数、用户命名或者自动命令时设定选项,报告的位置是定义它们的脚本。
注意选项的设置也可能是来自设置 'compatible' 的副作用。
一些特殊的文字:
Last set from modeline ~
选项最后在 |modeline| 里设置。
Last set from --cmd argument ~
选项最后由命令行参数 |--cmd| 或 + (译者注: 应该不含 +) 设置。
Last set from -c argument ~
选项最后由命令行参数 |-c|、+、|-S| 或 |-q| 设置。
Last set from environment variable ~
选项最后由环境变量、$VIMINIT、$GVIMINIT 或 $EXINIT 设置。
Last set from error handler ~
选项计算时出错,因而被清除。
{仅当编译时加入 |+eval| 特性才有效}
*:set-termcap* *E522*
需要 {option} 的地方,可以使用 "t_xx" 形式来设置终端选项。这些选项覆盖相应的
termcap 值。设置后,可以用于映射。如果 "xx" 包含特殊字符,须用 <t_xx> 形式: >
:set <t_#4>=^[Ot
也可用来翻译普通键的特殊键码。例如,如果 Alt-b 产生 <Esc>b,可用: >
:set <M-b>=^[b
(这里 ^[ 是真正的 <Esc>,用 CTRL-V <Esc> 来输入)
这个方法优于映射之处在于它能适用于所有情况。
为了安全原因,t_xx 选项不能在 |modeline| 或者 |sandbox| 里设置。
":set" 给出的列表看起来和 Vi 不同。长字符串选项在列表底部。而选项的数量也相当
多。"set all" 的输出可能一整屏都放不下,此时 Vim 会给出 |more-prompt|。
*option-backslash*
在字符串选项值中,如果要包含空白,一定要用反斜杠前导。如果要包含单个反斜杠,一
定要输入两个。换而言之,选项值里的反斜杠数目会减半 (往下取整)。
这里有一些例子: >
:set tags=tags\ /usr/tags 产生 "tags /usr/tags"
:set tags=tags\\,file 产生 "tags\,file"
:set tags=tags\\\ file 产生 "tags\ file"
"|" 字符把 ":set" 命令和下一个命令隔开。要在选项值里包含 "|",用 "\|" 代替。
下例把 'titlestring' 选项设为 "hi|there": >
:set titlestring=hi\|there
而要把 'titlestring' 选项设为 "hi" 并把 'iconstring' 设为 "there": >
:set titlestring=hi|set iconstring=there
双引号字符开始注释。类似地,要在选项值里包含 '"',用 '\"' 代替。下例设置
'titlestring' 选项为 'hi "there"': >
:set titlestring=hi\ \"there\"
MS-DOS 和 WIN32 基本上不删除文件名里的反斜杠。更准确地说: 对于期待文件名的选项
而言 (那些需要扩展环境变量的),不删除普通文件名字符之前的反斜杠。但特殊字符之
前的反斜杠 (空格、反斜杠、逗号等) 的使用仍如上所述。
有一个特例,如果该值以 "\\" 开始: >
:set dir=\\machine\path 产生 "\\machine\path"
:set dir=\\\\machine\\path 产生 "\\machine\path"
:set dir=\\path\\file 产生 "\\path\file" (错了!)
第一个例子的开始部分被保持,但第二个的反斜杠被减半。这样可以确保在你期望反斜杠
减半和反斜杠保持原样的两种情况都能工作。第三个的结果也许不是你想要的。避免这种
用法。
*add-option-flags* *remove-option-flags*
*E539* *E550* *E551* *E552*
有些选项是标志位的列表。如果你想给这样的选项加入标志位而不影响已有的,可以: >
:set guioptions+=a
从选项里删除标志位可以用: >
:set guioptions-=a
这样就删除 'guioptions' 里的 'a' 标志位。
注意 一次只应该只加减一个标志位。如果 'guioptions' 的值是 "ab",不能用
"set guioptions-=ba",因为字符串 "ba" 没有出现。
*:set_env* *expand-env* *expand-environment-var*
若干字符串选项扩展环境变量。如果某环境变量存在,'$' 后跟该环境变量的名字被替换
为它的值。如果不存在,'$' 和该名字不会被修改。任何非标识符的字符 (不是字母,数
字或 '_') 都可以跟在环境变量名字的后面。该字符和其后的内容附加于环境变量的值之
后。比如: >
:set term=$TERM.new
:set path=/usr/$INCLUDE,$HOME/include,.
如果用 ":set opt-=val" 或 ":set opt+=val" 从选项里加减字符串,该扩展在加入或删
除操作之前完成。
局部选项的处理 *local-options*
有的选项只适用于单个窗口或缓冲区。每个窗口或缓冲区有该选项的单独版本,因而分别
拥有不同的值。这样便可以在一个窗口置位 'list',而另一个不置位。又或者在一个缓
冲区设置 'shiftwidth' 为 3 而另一个设置为 4。
下面解释在一些特定情形下局部选项如何进行操作。其实,你无需了解所有的细节,因为
Vim 基本上依照你的想法使用这些选项值。不幸的是,要满足用户的要求并不简单 ...
分割窗口时,局部选项复制到新窗口。因而分割后,两个窗口的内容看起来一模一样。
编辑新缓冲区时需要初始化局部选项值。因为当前缓冲区的局部选项可能为它自己度身定
制,我们不能使用这些设置。相反,每个缓冲区局部选项都存在一个全局值,它们被用于
新缓冲区。":set" 同时修改局部和全局值。"setlocal" 只修改局部值而不影响将来编辑
新缓冲区时选项的设置。
如果要编辑的缓冲区过去曾经编辑过,重新应用它最近使用的窗口选项: 如果该缓冲区曾
经在本窗口编辑过,使用本窗口当时的值。否则使用该缓冲区上次编辑所在的窗口用过的
值。
一种类型的缓冲区可能有专门的窗口局部选项。同一个窗口要切换编辑的缓冲区时,你可
能因而不希望维持这些局部选项。为此,Vim 维护窗口局部选项的全局值,切换编辑的缓
冲区时使用全局值。每个窗口都有全局值的独立版本。因而这些值局部于窗口,但全局于
该窗口的所有缓冲区。这样,你可以用: >
:e one
:set list
:e two
现在 'list' 选项也会在 "two" 里置位,因为 ":set list" 命令同时置位全局值。 >
:set nolist
:e one
:setlocal list
:e two
现在 'list' 选项不被置位,因为 ":set nolist" 复位全局值,而 ":setlocal list"
只改变局部值,但 ":e two" 又使用全局值。注意 如果你接下来这么做: >
:e one
你不会得到上次编辑 "one" 时的 'list' 值。不会为每个缓冲区分别记住局部于窗口的
选项。
*:setl* *:setlocal*
:setl[ocal] ... 类似于 ":set",但只设置局部于当前缓冲区或者窗口的值。
不是所有的选项都有局部值的。如果该选项没有局部值,那么
那么设置全局值。
如果用 "all" 参数: 显示所有局部选项的局部值。
如果没有参数: 显示所有不同于缺省的局部选项的局部值。
显示局部选项时,显示它的局部值。对全局/局部布尔变量,
如果使用了全局值,在选项名前会显示 "--"。
全局选项则显示全局值 (将来或许会有所改变)。
{Vi 无此功能}
:setl[ocal] {option}< 通过复制全局值,把 {option} 的局部值设回它的全局值。
{Vi 无此功能}
:se[t] {option}< 通过使之为空,把 {option} 的局部值设回它的全局值。只对
|global-local| 选项有意义。
{Vi 无此功能}
*:setg* *:setglobal*
:setg[lobal] ... 类似于 ":set",但只设置局部选项的全局值,而不改变其局
部值。
显示选项时,显示它的全局值。
如果用 "all" 参数: 显示所有局部选项的全局值。
如果没有参数: 显示所有不同于缺省的局部选项的全局值。
{Vi 无此功能}
对缓冲区和窗口局部选项而言:
命令 全局值 局部值 ~
:set option=value 设置 设置
:setlocal option=value - 设置
:setglobal option=value 设置 -
:set option? - 显示
:setlocal option? - 显示
:setglobal option? 显示 -
有局部值的全局选项 *global-local*
选项之所以定义为全局类型,是因为多数情况下它们在所有缓冲区和窗口里只需设置一个
值。但对有些全局选项而言,定义不同的局部值可能有用。你可以使用 ":setlocal" 来
设置这些全局选项的局部值。此时,该缓冲区或窗口使用局部值,而其它缓冲区和窗口继
续使用全局值。
例如,你有两个窗口,都在编辑 C 源代码,也都使用全局的 'makeprg' 选项。如果其中
一个这么做: >
:set makeprg=gmake
那么另一个窗口也会切换到新值。无需再为那个 C 源代码窗口重复设置一遍 'makeprg'
选项。
不过,如果你在新窗口里编辑 Perl 脚本而想让它使用别的 'makeprg',但你又不想改变
C 源代码使用的值。可用这个命令: >
:setlocal makeprg=perlmake
只要把局部值设为空,你就可以切换回全局值: >
:setlocal makeprg=
这只适用于字符串选项。布尔型选项需要使用 "<" 标志: >
:setlocal autoread<
要 注意,对非布尔型的选项使用 "<" 会把全局值复制给局部值,而不是切换到直接使用
全局值的情形 (如果后来又改变全局值,就能看出两者的区别了)。也可用: >
:set path<
这样做会使 'path' 的局部值为空并从而使用它的全局值。它和下行的效果相同: >
:setlocal path=
注意: 更多的全局选项将来可能会成为全局-局部类型。那时,在全局选项上使用
":setlocal" 的效果能会有不同。
设置文件类型
:setf[iletype] {filetype} *:setf* *:setfiletype*
把 'filetype' 选项设为 {filetype}。但如果已经在 (嵌套)
自动命令序列中设置过,就不再进行。
等价于下面代码的缩写: >
:if !did_filetype()
: setlocal filetype={filetype}
:endif
< 在一个 filetype.vim 里使用该命令可避免设置 'filetype'
选项两次,导致不同的设置和语法文件被载入。
{Vi 无此功能}
:bro[wse] se[t] *:set-browse* *:browse-set* *:opt* *:options*
:opt[ions] 打开窗口,阅读和设置所有的选项。选项以功能分组。
提供每个选项简短的帮助。在简短帮助上按 <CR>,会打开帮
助窗口来提供该选项更多的帮助。
修改选项的值,然后在 "set" 行上按 <CR> 就会设置新值。
对于窗口和缓冲区特定的选项,设置的是最近访问窗口里的选
项值。除非它是帮助窗口,这时使用帮助窗口下方的窗口 (选
项窗口本身不算)。
{仅当编译时加入 |+eval| 和 |+autocmd| 特性才有效}
*$HOME*
使用 "~" 如同使用 "$HOME",但只有在选项开头和空格或逗号之后才会识别。
Unix 系统上也可以用 "~user"。它被用户 "user" 的主目录代替。例如: >
:set path=~mool/include,/usr/include,.
Unix 系统上还可以用 "${HOME}" 形式。这时,{} 之间的名字可以包含非标识符字符。
注意 如果你想为 "gf" 命令使用这种形式,'{' 和 '}' 字符需要加到 'isfname' 里。
注意: 环境变量和 "~/" 的扩展只在 ":set" 命令里进行,给选项赋值的 ":let" 不会。
注意 扩展后的选项的最大长度有限制。具体多少与系统有关,一般是 256 或 1024 个字
符这样的数目。
*:fix* *:fixdel*
:fix[del] 设置 't_kD' 的值,如果:
't_kb' 是 't_kD' 就变成 ~
CTRL-? CTRL-H
非 CTRL-? CTRL-?
(CTRL-? 是 0177 八进制、0x7f 十六进制) {Vi 无此功能}
如果删除键的终端代码不对,但退格键的代码是对的,在你的
.vimrc 里放上: >
:fixdel
< 不管退格键的实际代码是什么,它都能工作。
如果退格键的终端代码不对,可以用: >
:if &term == "termname"
: set t_kb=^V<BS>
: fixdel
:endif
< 这里 "^V" 是 CTRL-V 而 "<BS>" 是退格键 (不要输入四个字
符!)。把 "termname" 换成你的终端名字。
如果 <Delete> 键发送一个奇怪的键序列 (不是 CTRL-? 或
CTRL-H),不要用 ":fixdel",而应该: >
:if &term == "termname"
: set t_kD=^V<Delete>
:endif
< 这里 "^V" 是 CTRL-V 而 "<Delete>" 是删除键 (不要输入八
个字符!)。把 "termname" 换成你的终端名字。
*Linux-backspace*
Linux 的备注: 退格键缺省产生 CTRL-?,这是错的。在
rc.local 里放上这行可以修正: >
echo "keycode 14 = BackSpace" | loadkeys
<
*NetBSD-backspace*
NetBSD 的备注: 如果退格键产生错误的键码,可试用: >
xmodmap -e "keycode 22 = BackSpace"
< 如果可以,在 .Xmodmap 文件里加入: >
keysym 22 = BackSpace
< 要使之生效,你需要重启。
==============================================================================
2. 自动设置选项 *auto-setting*
除了用 ":set" 命令设置选项以外,还有三个方法可以自动设置一个或多个文件的选项:
1. 启动 Vim 时,在若干地方可以进行初始化,见 |initialization|。多适用于所有编
辑会话。有些则取决于 Vim 启动时所在目录。你可以用 |:mkvimrc|、|:mkview| 和
|:mksession| 创建初始化设置。
2. 开始编辑新文件时,会执行自动命令。这里可以为匹配一定模式的文件设置选项和做
其它的事,见 |autocommand|。
3. 开始编辑新文件并且打开 'modeline' 选项时,在文件开始和结束处的一些行上检查
模式行。下面解释此机制。
*modeline* *vim:* *vi:* *ex:* *E520*
有两种模式行。第一种形式:
[text]{white}{vi:|vim:|ex:}[white]{options}
[text] 任何文本,可以为空
{white} 不少于一个的空白字符 (<Space> 或 <Tab>)
{vi:|vim:|ex:} 字符串 "vi:"、"vim:" 或 "ex:"
[white] 可选的空白字符
{options} 选项设置的列表,用空格或 ':' 分隔。每个 ':' 之间的部分成为一个
":set" 命令的参数 (可为空)
例如:
vi:noai:sw=3 ts=6 ~
第二种形式 (和部分版本的 Vi 兼容):
[text]{white}{vi:|vim:|ex:}[white]se[t] {options}:[text]
[text] 任何文本,可以为空
{white} 不少于一个的空白字符 (<Space> 或 <Tab>)
{vi:|vim:|ex:} 字符串 "vi:"、"vim:" 或 "ex:"
[white] 可选的空白字符
se[t] 字符串 "set " 或 "se " (注意 空格)
{options} 选项列表,以空白分隔。每个部分成为一个 ":set" 命令的参数
: 冒号
[text] 任何文本,可以为空
例如:
/* vim: set ai tw=75: */ ~
{vi:|vim:|ex:} 之前的空格是必要的。这样可以减少错用比如 "lex:" 这样的普通单词
的可能性。有一个特例: "vi:" 和 "vim:" 也可以出现在行首 (为和 3.0 版本兼容)。
在行首使用 "ex:" 会被忽略 (这可以是 "example:" 的缩写)。
*modeline-local*
选项的设置类似于 ":setlocal": 新值只适用于包含该文件的缓冲区和窗口。尽管可以从
模式行里设置全局值,这非常罕见。如果你打开两个窗口,而其中的两个文件为同一个全
局值设置不同的值,结果取决于哪个文件后打开。
编辑已经载入的文件时,只使用模式行里局部于窗口的选项。因而,如果打开文件后你手
动修改局部于缓冲区的选项,在别的窗口里编辑相同的缓冲区不会改变这些选项。但局部
于窗口的选项会被设置。
*modeline-version*
如果模式行只用于某些版本的 Vim,版本号应在使用 "vim:" 时指定:
vim{vers}: {vers} 版本或更高
vim<{vers}: {vers} 之前的版本
vim={vers}: {vers} 版本
vim>{vers}: {vers} 之后的版本
对于 Vim 6.0,{vers} 是 600 (主版本号乘一百加副版本号)。
例如,要设置 Vim 6.0 或以后版本使用的模式行:
/* vim600: set foldmethod=marker: */ ~
要为 Vim 5.7 以前的版本设置模式行:
/* vim<570: set sw=4: */ ~
"vim" 和 ":" 之间不能有空格。
检查的行数用 'modelines' 选项设置。如果关闭 'modeline' 或者 'modelines' 为零,
不检查模式行。
注意 第一种形式使用该行的其余部分。所以这行:
/* vi:ts=4: */ ~
会指出拖尾的 "*/" 是一个错误。这样就可以:
/* vi:set ts=4: */ ~
如果检测到错误,忽略该行的其余部分。
如果你想在 set 命令里包含 ':',在冒号之前加上 '\'。处理时,':' 之前的反斜杠会
被删除。例如:
/* vi:set dir=c\:\tmp: */ ~
会设置 'dir' 选项为 "c:\tmp"。':' 之前只删除一个反斜杠。因此,要包含 "\:" 你需
要指定 "\\:"。
为了安全原因,除了 "set" 以外,不支持别的命令 (有人可能会用模式行创建一个文本
的特洛伊木马文件)。而且也不是所有选项都可设置。对有些选项而言,会设置一个标志
位来激活 |sandbox|。即便如此,使用模式行还是有些微风险。例如,如果有些开玩笑的
人设置 'textwidth' 为 5,你的所有行都会意想不到地被回绕。因此,在编辑一些不信
任的文本时不妨关闭模式行。例如,mail 文件类型插件就这么做。
提示: 除了设置选项以外,如果你需要做别的事情,可以定义自动命令并检查文件是否包
含特定字符串。例如: >
au BufReadPost * if getline(1) =~ "VAR" | call SetVar() | endif
并且定义函数 SetVar(),为包含 "VAR" 行的文件做一些事。
==============================================================================
3. 选项总结 *option-summary*
下表给出所有选项,包括全名和,如果有的话,它们的缩写。可任意使用两种形式。
本文档里,布尔型选项的 "置位" 意味着输入 ":set option"。选项的 "复位" 意味着使
用 ":set nooption"。
有些选项有两个缺省值: "Vim 缺省" 在没有置位 'compatible' 时使用,而 "Vi 缺省"
在置位 'compatible' 时使用。
多数选项适用于所有的窗口和缓冲区。有一些专用于设置窗口里如何显示文本。每个窗口
可以为它们设置不同的值。比如 'list' 选项,可以在一个窗口置位而在显示相同文本的
另一个窗口复位,这样你就可以同时看到两种视图。有一些选项专用于特定的文件。它们
可以为每个文件或者缓冲区设置不同的值。比如 'textwidth' 选项可以在普通的文本文
件里设为 78,而在 C 程序里设为 0。
全局 所有缓冲区和窗口使用同一个选项值
局部于窗口 每个窗口有自己的选项值
局部于缓冲区 每个缓冲区有自己的选项值
如果创建一个新窗口,使用当前活动的窗口的选项值作为窗口专用选项的缺省值。缓冲区
专用的选项取决于 'cpoptions' 选项的 's' 和 'S' 标志位。如果包含 's' (缺省),那
么缓冲区在第一次进入时,从当前活动的缓冲区复制选项值。如果包含 'S',每次进入缓
冲区都会复制选项的值。这样,和全局选项几乎没有区别。如果 's' 和 'S' 都不存在,
缓冲区在建立时从当前活动的缓冲区复制选项。
隐藏选项 *hidden-options*
不是所有版本都支持所有的选项。这取决于哪些特性得到支持,有时和系统也有关。下面
在花括号里提供这方面的评注。一个选项即使不支持也可以进行设置,这时并不会报错。
这些选项称为隐藏选项。不过,你无法取回隐藏选项的值,因为设置的值不会被保存。
要测试选项 "foo" 是否可用 ":set" 设置: >
if exists('&foo')
这里,隐藏选项也返回真。要测试是否真的支持选项 "foo": >
if exists('+foo')
<
*E355*
|Q_op| 提供包含简短描述的选项列表,可用它进行跳转。
*'aleph'* *'al'* *aleph* *Aleph*
'aleph' 'al' 数值型 (MS-DOS 的缺省为 128,否则为 224)
全局
{Vi 无此功能}
{仅当编译时加入 |+rightleft| 特性才有效}
希伯来字母表的第一个字母的 ASCII 码。希伯来模式下的键盘映射例程,包括
插入模式 (如果置位 hkmap) 和命令行模式 (如果按了 CTRL-_),都使用
[aleph..aleph+26] 范围输出希伯来字符。
aleph=128 适用于 PC 代码,而 aleph=224 适用于 ISO 8859-8。
见 |rileft.txt|。
*'allowrevins'* *'ari'* *'noallowrevins'* *'noari'*
'allowrevins' 'ari' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{仅当编译时加入 |+rightleft| 特性才有效}
允许插入和命令行模式使用 CTRL-_。缺省是关闭的,以免用户想输入 SHIFT-_
时不小心输入 CTRL-_ 而进入反向插入模式又不知道怎么退出。见 'revins'。
注意: 如果置位 'compatible',该选项被复位。
*'altkeymap'* *'akm'* *'noaltkeymap'* *'noakm'*
'altkeymap' 'akm' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{仅当编译时加入 |+farsi| 特性才有效}
如果打开,第二语言是波斯语。编辑模式下如果打开 'allowrevins' 的话,
CTRL-_ 切换波斯语和英语的键盘映射表。
如果关闭,在希伯来语和英语之间切换键盘映射表。可用于以原始方式,即英语
(从左到右模式),启动 Vim,又可以使用第二语言即波斯语或者希伯来语 (从右
到左模式) 的场合。见 |farsi.txt|。
*'ambiwidth'* *'ambw'*
'ambiwidth' 'ambw' 字符串 (缺省: "single")
全局
{Vi 无此功能}
{仅当编译时加入 |+multi_byte| 特性才有效}
只有在 'encoding' 为 "utf-8" 或别的 Unicode 编码时才有效。告诉 Vim 怎
么处理东亚二义性宽度字符类 (East Asian Width Class Ambiguous) (例如
欧元符号、注册记号、版权记号、希腊字母、西里尔字母等等)。
目前有两个可能的选择:
"single": 使用和 US-ASCII 字符相同的宽度。多数用户希望如此。
"double": 使用 US-ASCII 字符两倍的宽度。
*E834* *E835*
如果 'listchars' 或 'fillchars' 包含会是双倍宽度的字符,不能使用
"double" 值。
在一些 CJK 字体里,这些字符的字形宽度完全由它们在传统的 CJK 编码里占据
字节的数目决定。那些编码中,欧元、注册记号、希腊/西里尔字母等占据两个
字节,因而它们在这些字体里用 "宽" 字形显示。这也包括文本文件里制表用的
一些画线字符。因此如果 GUI Vim 使用 CJK 字体、或者在使用 CJK 字体的终
端 (模拟器) (包括带有 "-cjkwidth" 选项的 xterm) 里运行 Vim,应把该选项
设为 "double",这样可以匹配这些字体里 Vim 实际看到相关字形的宽度。 CJK
Windows 9x/ME 或 Windows 2k/XP 上,如果系统 locale 为 CJK locale,也应
把本选项设为 "double"。见 Unicode Standard Annex #11
(http://www.unicode.org/reports/tr11)。
*'antialias'* *'anti'* *'noantialias'* *'noanti'*
'antialias' 'anti' 布尔型 (缺省: 关闭)
全局
{Vi 无此功能}
{仅当编译时加入 Mac OS X 的 GUI 支持才有效}
只有在 Mac OS X v10.2 或以后版本的 Vim 的 GUI 版本上,本选项才有效。如
果打开,Vim 使用平滑 ("反锯齿") 字体。在特定显示上的特定大小的字体,可
能会较易阅读。有时,如果 'guifont' 设为缺省值 (空字符串),置位该选项会
引起问题。
*'autochdir'* *'acd'* *'noautochdir'* *'noacd'*
'autochdir' 'acd' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{仅当编译时加入此特性才有效,用 exists("+autochdir")
可以检查}
如果打开,Vim 会在你打开文件、切换缓冲区、删除缓冲区或者打开/关闭窗口
时改变当前工作目录的值。具体来说,就是打开或者选择的文件所在的目录。
提供该选项的目的是和 Sun ONE Studio 4 Enterprise Edition 发行的 Vim 后
向兼容。
注意: 打开次选项会使得某些插件无法工作。
*'arabic'* *'arab'* *'noarabic'* *'noarab'*
'arabic' 'arab' 布尔型 (缺省关闭)
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+arabic| 特性才有效}
可以置位本选项来开始编辑阿拉伯文本。
置位本选项会:
- 置位 'rightleft' 选项,除非置位 'termbidi'。
- 置位 'arabicshape' 选项,除非置位 'termbidi'。
- 设置 'keymap' 选项为 "arabic";插入模式下 CTRL-^ 会切换英语和阿拉伯
键盘映射。
- 置位 'delcombine' 选项。
注意 要使用阿拉伯文本,'encoding' 必须是 "utf-8"。
复位本选项会:
- 复位 'rightleft' 选项。
- 关闭 'keymap' 的使用 (但不改变其值)。
注意 这里不复位 'arabicshape' 和 'delcombine' (这些是全局选项)。
另见 |arabic.txt|。
*'arabicshape'* *'arshape'*
*'noarabicshape'* *'noarshape'*
'arabicshape' 'arshape' 布尔型 (缺省打开)
全局
{Vi 无此功能}
{仅当编译时加入 |+arabic| 特性才有效}
如果打开且 'termbidi' 关闭,启动必须的可见字符的校正,以正确显示阿拉伯
语言。本质上它打开了字型重整;这是一个广义的术语,它包括:
a) 根据词内位置 (开头、中间、结尾和单独出现) 改变/调整字符的形状。
b) 启动合成字符的能力
c) 启动一些字符所需的组合
如果关闭,屏幕用每个字符原来单独显示的方式显示。
阿拉伯语是一个复杂的语言,还需要其他的设置。详见 |arabic.txt|。
*'autoindent'* *'ai'* *'noautoindent'* *'noai'*
'autoindent' 'ai' 布尔型 (缺省关闭)
局部于缓冲区
开启新行时 (插入模式下输入 <CR>,或者使用 "o" 或 "O" 命令),从当前行复
制缩进距离。如果你在新行除了 <BS> 或 CTRL-D 以外不输入任何东西,然后输
入 <Esc>、CTRL-O 或 <CR>,缩进又被删除。移动光标到其它行也有同样的效
果,除非 'cpoptions' 里包含 'I' 标志位。
如果打开自动缩进,排版 (用 "gq" 命令或者插入模式下到达了 'textwidth')
使用第一行的缩进距离。
打开 'smartindent' 或 'cindent' 时,缩进的修改方式有所不同。
置位 'paste' 选项时,'autoindent' 选项被复位。
{Vi 稍有不同: Vim 里输入 <Esc> 或 <CR> 删除缩进后,上下移动把光标放在
删除的缩进之后;Vi 则把光标放在已删除的缩进的某处}。
*'autoread'* *'ar'* *'noautoread'* *'noar'*
'autoread' 'ar' 布尔型 (缺省关闭)
全局或局部于缓冲区 |global-local|
{Vi 无此功能}
如果发现文件在 Vim 之外修改过而在 Vim 里面没有的话,自动重新读入。
如果文件在外部被删除,不会这么做。|timestamp|
如果该选项有局部值,使用下面的命令切换回直接使用全局值: >
:set autoread<
<
*'autowrite'* *'aw'* *'noautowrite'* *'noaw'*
'autowrite' 'aw' 布尔型 (缺省关闭)
全局
自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、
:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^
命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转
到别的文件时亦然。
注意 有些命令不使用 'autowrite' 选项。为此目的,可用 'autowriteall'。
*'autowriteall'* *'awa'* *'noautowriteall'* *'noawa'*
'autowriteall' 'awa' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
和 'autowrite' 类似,但也适用于 ":edit"、":enew"、":quit"、":qall"、
":exit"、":xit"、":recover" 和关闭 Vim 窗口。
置位本选项也意味着 Vim 的行为就像打开 'autowrite' 一样。
*'background'* *'bg'*
'background' 'bg' 字符串 (缺省为 "dark" 或 "light")
全局
{Vi 无此功能}
设为 "dark" 时,Vim 试图使用深色背景上看起来舒服的颜色。如果设为
"light",Vim 会试图使用在浅色背景上看起来舒服的颜色。其它的值都是非法
的。Vim 试图根据你使用的终端确定其缺省值,但不见得总做的对。
设置该选项不改变背景色,它告诉 Vim 背景颜色应该看起来怎么样。要改变背
景色,见 |:hi-normal|。
如果设置 'background',Vim 会根据新值调整缺省的颜色组。但语法高亮使用
的颜色不会改变。 *g:colors_name*
已经载入色彩方案时 ("g:colors_name" 变量已设置),设置 'background' 会
重新载入色彩方案。如果色彩方案根据 'background' 调整,这不错。但如果颜
色方案自己设置 'background',实际效果可能就被撤销了。如果需要的话,先删
除 "g:colors_name" 变量。
如果这样复原 'background' 为其缺省值: >
:set background&
< Vim 会猜测其值。GUI 里应该没有问题,其它情况下 Vim 可能不一定能猜对。
启动 GUI 时,'background' 的缺省值是 "light"。如果 .gvimrc 里没有设置
该值,而 Vim 检测到背景实际上很深,'background' 会设为 "dark"。但这在
.gvimrc 读入_之后_才发生 (因为窗口需要被打开才能发现实际的背景色)。要
避免这一点,在 .gvimrc 里放上 ":gui" 命令以强迫打开 GUI 窗口。它应在使
用 'background' 的值的命令之前 (比如,在 ":syntax on" 之前)。通常,该
选项应在 .vimrc 文件里设置。可能和终端的名字有关。比如: >
:if &term == "pcterm"
: set background=dark
:endif
< 如果设置该选项,高亮组的缺省设置会发生改变。要进行其它设置,在设置
'background' 选项_之后_才使用 ":highlight" 命令。
该选项也在 "$VIMRUNTIME/syntax/syntax.vim" 文件里使用,用来选择语法高
亮的颜色。在改变此选项后,你必须再次载入 syntax.vim 才能看到效果。这可
以通过 ":syntax on" 完成。
*'backspace'* *'bs'*
'backspace' 'bs' 字符串 (缺省为 "")
全局
{Vi 无此功能}
影响 <BS>、<Del>、CTRL-W 和 CTRL-U 在插入模式下的工作方式。它是逗号分
隔的项目列表。每个项目允许一种退格删除的内容:
值 效果 ~
indent 允许在自动缩进上退格
eol 允许在换行符上退格 (连接行)
start 允许在插入开始的位置上退格;CTRL-W 和 CTRL-U 到达插入开始的位
置时停留一次。
如果该值为空,使用 Vi 兼容的退格方式。
为了和 5.4 及更早的版本后向兼容:
值 效果 ~
0 等同于 ":set backspace=" (Vi 兼容)
1 等同于 ":set backspace=indent,eol"
2 等同于 ":set backspace=indent,eol,start"
如果你的 <BS> 或 <Del> 键不合你的期望,见 |:fixdel|。
注意: 如果置位 'compatible',该选项被设为 ""。
*'backup'* *'bk'* *'nobackup'* *'nobk'*
'backup' 'bk' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
覆盖文件前创建一个备份。文件成功写入后保留该备份。如果你不想保留备份文
件,但希望写入期间能有备份,复位该选项并置位 'writebackup' 选项
(这是缺省行为)。如果你完全不想要备份文件,同时复位两个选项 (如果你的文
件系统差不多满了,这会有用)。更多的解释可见 |backup-table|。
如果匹配 'backupskip' 模式,无论如何都不会建立备份。
如果设置 'patchmode',备份文件会换名成为文件的旧版本。
注意: 如果置位 'compatible',该选项被复位。
*'backupcopy'* *'bkc'*
'backupcopy' 'bkc' 字符串 (Vi 在 Unix 上的缺省: "yes",否则: "auto")
全局
{Vi 无此功能}
写回文件并建立备份时,本选项指定它应如何完成。这是逗号分隔的单词列表。
主要的值是:
"yes" 复制文件,然后覆盖原来的文件
"no" 给文件换名,然后写入一个新文件
"auto" 两者哪个更好就用哪个
可以和上面的一起使用的附加设置包括:
"breaksymlink" 写入时总是断开符号链接
"breakhardlink" 写入时总是断开硬链接
复制文件并覆盖原来的文件:
- 需要额外的时间复制文件。
+ 如果文件有特殊属性,是 (硬 / 符号) 链接或者有资源分叉 (resource
fork),都能保存下来。
- 如果文件是一个链接,备份文件名使用链接的名字,而不是实际文件的。
给文件换名并写入新文件:
+ 很快。
- 有时不是所有的文件属性都能被复制到新文件里。
- 如果文件是链接,新文件将不再是链接。
"auto" 值是一个折衷: 如果 Vim 看到文件换名可以没有副作用 (属性可以被传
递而文件也不是链接),就使用换名方式。如果遇到问题,就使用复制方式。
"breaksymlink" 和 "breakhardlink" 值可以和 "yes"、"no" 以及 "auto" 中
的任何一个混合使用。如果包含,它们迫使 Vim 总是使用 "no" 选项完全相同
的步骤断开符号链接或者硬链接: 给原来的文件换名并成为备份文件,在原来文
件的位置写入新的文件内容。这可以用于,比如说,所有的文件或者是符号链接
或者是硬链接的源代码树。这样,任何的改变都应该会保留在本地源代码树中,
而不影响原来的代码。
*crontab*
一种情形下 "no" 和 "auto" 可能会有问题: 一个程序打开文件、启用 Vim 编
辑该文件、然后测试已打开的文件是否发生改变 (通过文件描述符)。该测试总
是会检查备份文件而不是新建立的文件。"crontab -e" 就是这样一个例子。
用复制方式时,原来的文件会被清空,然后填入新的文本。这意味着保护位、拥
有者和原来文件的符号链接都保持不变。但备份文件是一个新的文件,拥有者是
编辑文件的人,所在的组是原来文件所在的组。如果这不行,组的保护位设得和
其它人 (非用户和组成员) 的保护位相同。
如果文件被换名,事情就刚好相反: 备份文件有着和原来文件相同的属性,而新
写的文件由当前用户拥有。如果文件曾是 (硬/符号) 链接,新文件不再是了!
这就是为什么 "auto" 值不为链接文件换名的原因。新写入文件的拥有者和所属
组会设得和原来的文件相同。但系统可能拒绝这么做,这种情形下,"auto" 值
仍然会选择不用换名方式。
*'backupdir'* *'bdir'*
'backupdir' 'bdir' 字符串 (Amiga 的缺省: ".,t:",
MS-DOS 和 Win32: ".,c:/tmp,c:/temp"
Unix: ".,~/tmp,~/")
全局
{Vi 无此功能}
逗号分隔的备份文件的目录名列表。
- 备份文件会在第一个可能的目录里建立。该目录必须已经存在,Vim 不会帮你
建立该目录。
- 空意味着不会建立备份文件 ('patchmode' 是不会工作的!)。写入也可能
因此而失败。
- 目录 "." 意味着把备份文件放在被编辑文件的相同目录里。
- "./" (或 MS-DOS 等环境的 ".\") 开始的目录意味着把备份文件放在被编辑
文件所在的相对位置。开头的 "." 由被编辑文件的路径名替换。
(目录中间的 "." 没有特殊含义)。
- 逗号之后的空格被忽略,其它的空格视为目录名的一部分。要在目录命令开头
包含空格,在它之前加入反斜杠。
- 要在目录名包含逗号,在它之前加入反斜杠。
- 目录名可以用 '/' 结尾。
- 环境变量被扩展 |:set_env|。
- 小心使用 '\' 字符,在空格前输入一个,真正的反斜杠前要输入两个 (见
|option-backslash|)。例如: >
:set bdir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces
< - 为了和 Vim 3.0 版本后向兼容,本选项开头的 '>' 被删除。
另见 'backup' 和 'writebackup' 选项。
如果你需要在 Unix 上隐藏备份文件,考虑这样的值: >
:set backupdir=./.backup,~/.backup,.,/tmp
< 要使之正确工作,你需要在每个目录和你的主目录里建立 ".backup" 目录。
建议使用 |:set+=| 和 |:set-=| 来从列表里加减目录。这可以避免未来版本使
用其它缺省值出现的问题。
为了安全原因,本选项不能在 |modeline| 或 |sandbox| 里设置。
*'backupext'* *'bex'* *E589*
'backupext' 'bex' 字符串 (缺省为 "~",VMS 上: "_")
全局
{Vi 无此功能}
附加到文件名后面的字符串,以构造备份文件的名字。缺省值很特别,因为它可
以避免不小心覆盖已有的且带有备份的文件。你可能喜欢使用 ".bak",但要确
保不存在已经带有 ".bak" 而且你想保留的文件。
只能使用普通的文件名字符。"/\*?[|<>" 都不合法。
如果你喜欢保留很多备份,可以用 BufWritePre 自动命令,使之在写入文件前
改变 'backupext',以包含写入的时间。 >
:au BufWritePre * let &bex = '-' . strftime("%Y%b%d%X") . '~'
< 'backupdir' 可用来把备份放在不同的目录里。
*'backupskip'* *'bsk'*
'backupskip' 'bsk' 字符串 (缺省: "/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*")
全局
{Vi 无此功能}
{仅当编译时加入 |+wildignore| 特性才有效}
文件名模式列表。如果其中某个模式匹配要写入的文件名,不建立它的备份文
件。同时测试指定的文件名和它的完整路径名。模式的使用方式和 |:autocmd|
类同,见 |autocmd-patterns|。
小心特殊字符,见 |option-backslash|。
如果没有定义 $TMPDIR、$TMP 或 $TEMP,缺省值就不包含它们。"/tmp/*" 只用
于 Unix。
注意 这里不扩展环境变量。如果你想要用 $HOME,必须显式地对其扩展,例
如: >
:let backupskip = escape(expand('$HOME'), '\') . '/tmp/*'
< 注意 缺省值也确保 "crontab -e" 能工作 (如果给原来文件换名来建立备份,
crontab 不会看到新建立的文件)。另见 'backupcopy' 和 |crontab|。
*'balloondelay'* *'bdlay'*
'balloondelay' 'bdlay' 数值型 (缺省: 600)
全局
{Vi 无此功能}
{仅当编译时加入 |+balloon_eval| 特性才有效}
弹出气泡之前以毫秒计的延迟。见 |balloon-eval|。
*'ballooneval'* *'beval'* *'noballooneval'* *'nobeval'*
'ballooneval' 'beval' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{仅当编译时加入 |+balloon_eval| 特性才有效}
打开 |balloon-eval| 功能。
*'balloonexpr'* *'bexpr'*
'balloonexpr' 'bexpr' 字符串 (缺省 "")
全局或局部于缓冲区 |global-local|
{Vi 无此功能}
{仅当编译时加入 |+balloon_eval| 特性才有效}
计算气泡显示文本的表达式。只在 'ballooneval' 打开时才使用。它用到以下
变量:
v:beval_bufnr 要显示气泡的缓冲区号
v:beval_winnr 窗口编号
v:beval_lnum 行号
v:beval_col 列号 (字节位置)
v:beval_text 鼠标指针所在或之后的单词
表达式的计算不能有副作用!
例如: >
function! MyBalloonExpr()
return 'Cursor is at line ' . v:beval_lnum .
\', column ' . v:beval_col .
\ ' of file ' . bufname(v:beval_bufnr) .
\ ' on word "' . v:beval_text . '"'
endfunction
set bexpr=MyBalloonExpr()
set ballooneval
<
注意: 只有光标在文本字符上的时候才会显示气泡。如果 'balloonexpr' 的计
算结果非空,Vim 不会试图发送消息给外部调试器 (Netbeans 或 Sun
Workshop)。
表达式的计算可能在沙盘 |sandbox| 里进行,见 |sandbox-option|。
计算 'balloonexpr' 时,不能改变文本或跳到别的窗口 |textlock|。
要检查气泡文本是否可以包含换行符: >
if has("balloon_multiline")
< 如果支持,"\n" 字符开启新行。如果表达式计算结果为 |List|,这相当于把每
个列表项目当作字符串,然后之间用 "\n" 连接。
*'binary'* *'bin'* *'nobinary'* *'nobin'*
'binary' 'bin' 布尔型 (缺省关闭)
局部于缓冲区
{Vi 无此功能}
本选项应该在编辑二进制文件之前设置。你也可以用 Vim 的 |-b| 参数。如果
打开本选项,一些选项的值会发生改变 (即使它们原本是打开的):
'textwidth' 会设为 0
'wrapmargin' 会设为 0
'modeline' 会被关闭
'expandtab' 会被关闭
此外,也不会使用 'fileformat' 和 'fileformats' 选项。文件的读写如同
'fileformat' 设为 "unix" 那样 (单个 <NL> 分隔行)。
不会使用 'fileencoding' 和 'fileencodings' 选项。文件读取不经过转换。
注意: 如果 'bin' 选项已经打开而你开始编辑 (另) 一个文件,自动命令的设
置可能会再次改变这些相关的设置 (比如,'textwidth'),使得编辑出现麻烦。
因而,载入文件时,你可以再次置位 'bin'。
这些选项以前的值被记住,'bin' 从开到关时会复原它们。每个缓冲区都有一组
保存的选项值。
要使用 'binary' 编辑文件,你可以使用 |++bin| 参数。这样你不用输入
":set bin",而后者会影响所有你编辑的文件。
写回文件时,只有原来文件本就包含时才写入末行的 <EOL> (通常,如果末行
没有 <EOL>,Vim 会附加一个;这样文件会变长)。见 'endofline' 选项。
*'bioskey'* *'biosk'* *'nobioskey'* *'nobiosk'*
'bioskey' 'biosk' 布尔型 (缺省打开)
全局
{Vi 无此功能} {仅适用于 MS-DOS}
如果打开,调用 BIOS 得到键盘字符。这对检测 CTRL-C 更有效,但只适用于控
制台模式。如果在通过窗口连接的终端上使用,复位此选项。
另见 |'conskey'|。
*'bomb'* *'nobomb'*
'bomb' 布尔型 (缺省关闭)
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+multi_byte| 特性才有效}
写入文件时,如果满足以下条件,在文件头部写入 BOM (Byte Order Mark,字
节顺序标记):
- 打开本选项
- 关闭 'binary' 选项
- 'fileencoding' 是 "utf-8"、"ucs-2"、"ucs-4" 或它们的 little/big
endian (高位在右侧/左侧的字节序) 变种。
有些应用程序使用 BOM 识别文件的编码。通常用于 MS-Windows 上的 UCS-2
文件。对别的程序而言,这会造成麻烦,比如: "cat file1 file2" 使得 file2
的 BOM 出现在结果文件的中间。gcc 不接受 BOM。
读入文件时,如果 'fileencodings' 以 "ucs-bom" 开头,Vim 会检查 BOM 是
否存在,并相应地设置 'bomb'。
除非置位 'binary',BOM 会从首行上移去,所以编辑时你看不到它。如果你没
有改变相应设置,写回文件时恢复 BOM。
*'breakat'* *'brk'*
'breakat' 'brk' 字符串 (缺省为 " ^I!@*-+;:,./?")
全局
{Vi 无此功能}
{仅当编译时加入 |+linebreak| 特性才有效}
如果打开 'linebreak',本选项让你选择可以在什么字符上换行。只能用 ASCII
字符,但如果 'encoding' 是 8 位编码,也可以用 8 位的字符。
*'browsedir'* *'bsdir'*
'browsedir' 'bsdir' 字符串 (缺省为 "last")
全局
{Vi 无此功能}
{仅适用于 Motif、Athena、GTK、Mac 和 Win32 GUI}
文件浏览器使用的目录:
last 使用文件浏览器最近打开或保存文件时相同的访问目录。
buffer 使用相关缓冲区的目录。
current 使用当前目录。
{path} 使用指定目录。
*'bufhidden'* *'bh'*
'bufhidden' 'bh' 字符串 (缺省: "")
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+quickfix| 特性才有效}
本选项指定缓冲区不再出现于窗口时的行为:
<empty> 跟随全局 'hidden' 选项
hide 隐藏缓冲区 (不卸载),即使没有置位 'hidden' 也如此
unload 卸载缓冲区,即使置位 'hidden' 或者使用 |:hide| 时也如
此
delete 从缓冲区列表里删除缓冲区,即使置位 'hidden' 或者使用
|:hide| 时也如此,类似于 |:bdelete|
wipe 从缓冲区列表里真正删除缓冲区,即使置位 'hidden' 或者使
用 |:hide| 时也如此,类似于 |:bwipeout|
小心: 使用 "unload"、"delete" 或 "wipe" 后,缓冲区的修改会丢失而且没有
警告。
本选项和 'buftype' 和 'swapfile' 一起使用,指定特殊的缓冲区的类型。见
|special-buffers|。
*'buflisted'* *'bl'* *'nobuflisted'* *'nobl'* *E85*
'buflisted' 'bl' 布尔型 (缺省: 打开)
局部于缓冲区
{Vi 无此功能}
如果置位本选项,缓冲区在缓冲区列表里显示。如果复位,缓冲区不能用
":bnext"、"ls"、Buffers 菜单等访问。
Vim 为只用来记住文件名或位置标记的缓冲区复位本选项。Vim 在开始编辑缓冲
区时置位本选项,但用 ":buffer" 移动到缓冲区时不会。