vi支持许多选项,从而允许用户控制vi操作的各个方面。
当启动vi时,每个选项都被赋予一个默认值。如果希望改变vi行为的一个特定方面,则可以使用:set命令设置合适选项的值。该命令的语法有两种形式,因为vi选项本身就有两种不同类型:
:set [no]option…
:set option[=value]…
其中option是选项的名称,value是选项的值。
在大多数情况下,默认值就能满足需求(所以称之为默认值)。有时候,也可能希望做些改变,以下举三个例子:
1 使用showmode选项告诉vi当进入输入模式时显示一个提醒,命令是:
:set showmode
2 使用number来显示行号:
:set number
3 使用nonumber来关闭行号的显示:
:set nonumber
vi的选项有两种类型:
第一种类型的选项是开关(switch),这种选项的值或者为关闭(off),或者为打开(on),如:
:set showmode
:set noshowmode
:set number
:set nonumber
第二种类型的选项是变量(variable),这种类型的选项包含一个值。如,tabstop选项用来设置制表符的间距。默认情况下,tabstop设置为8,这意味着制表符的间距为8个位置。如果希望间距是4个位置,可以将tabstop变量设置为4:
:set tabstop=4
为了方便起见,可以在同一命令中设置多个选择,如:
:set showmode nonumber tabstop=4
实际可用的选项取决于所使用的vi版本。可以预见的是,版本越新,拥有的选项就越多。
一般情况下,标准vi拥有大约40个选项,其中有16个选项非常重要。vim拥有的选项超过了340个,但几乎所有的选项都永远不需要。处于参考目的,列出重要的选项:
开关 |
缩写 |
默认值 |
含义 |
autoindent |
ai |
off |
和shift width相关,缩进以匹配下一行/上一行 |
autowrite |
aw |
off |
如果文本已经修改,则在修改文件前保存 |
errorbells |
eb |
off |
当显示错误信息时发出嘀嘀响 |
exrc |
ex |
off |
在当前目录中查找初始化文件 |
ignorecase |
ic |
off |
在搜索过程中忽略大小写 |
list |
-- |
off |
将制表符显示为^I,将行的结束显示为$ |
number |
nu |
off |
显示行号 |
readonly |
ro |
off |
不允许修改编辑缓冲区的内容 |
showmatch |
sm |
off |
输入模式:显示匹配的()、{}或[] |
showmode |
smd |
off |
当进入输入模式时显示一个提醒 |
wrapscan |
ws |
off |
在搜索过程中,环绕到文本的开头/末尾继续搜索 |
writeany |
wa |
off |
允许不需要加载!就可以写入任何文件 |
变量 |
缩写 |
默认值 |
含义 |
lines |
-- |
24 |
文本的行数(窗口/屏幕大小-1) |
shiftwidth |
sw |
8 |
autoindent使用的空格数量 |
tabstop |
ts |
8 |
制表符间距 |
wrapmargin |
wm |
0 |
设置自动换行时的页边距(0=off) |
从图中可知,几乎所有的选项都有缩写。为了方便起见,可以使用缩写取代全称。例如,下面的两条命令是等价的:
:set showmode nonumber tabstop=4
:set smd nonu ts=4
为了显示一个或多个选项的值,可以使用:set命令的一种变体。其语法是:
:set [option[?]… | all]
其中option是选项的名称。
为了显示所有选项的值,可以使用:
:set all
使用这个命令是查看vi所支持的全部选项的最佳方法。
为了显示一个选项的值,可以键入该选项的名称,后面跟一个?(问号)。例如:
:set number?
:set showmode?
:set wrapmargin?
为了方便起见,可以在一条命令中显示多个选项的值:
:set number? showmode? wrapmargin?
为了显示那些改变了默认值的选项,可以使用:set命令本身:
:set
当使用这条命令时,可以查看修改了哪些选项,其中一些修改您可能并不知晓。这是因为每个系统中,vi在启动时都要读取许多初始化文件。