Vim变量,expandtab和noexpandtab,一个存在而另一个不存在?

Tyl*_*den 2 variables vim types

我对Vimscript变量如何工作感到困惑,例如,关于变量expandtab和noexpandtab,它们似乎彼此相反.如果我问vim,

:set expandtab?
Run Code Online (Sandbox Code Playgroud)

它的答案noexpandtab.如果我问它,

:echo &expandtab
Run Code Online (Sandbox Code Playgroud)

它的答案0.如果我问它

:set noexpandtab?
Run Code Online (Sandbox Code Playgroud)

noexpandtab再次回答.但如果我问它

:echo &noexpandtab
Run Code Online (Sandbox Code Playgroud)

它回答:

E113: Unknown option: noexpandtab
E15: Invalid expression: &noexpandtab
Run Code Online (Sandbox Code Playgroud)

所以,我想我不明白.如果noexpandtab是一个变量,为什么我不能回应它的价值呢?如果它不是一个变量那么它是什么?

rom*_*inl 5

  • 你在处理选项,这里不是变量.

  • noexpandtab不是一个选项,它no后跟一个实际的选项名称.此表示法允许您使用该:set命令关闭布尔选项.

  • &option表示法用于处理option表达式的值.它只能与实际选项名称(短或长)一起使用,因此它不适用于noexpandtab哪个不是有效的选项名称.

    " switch expandtab on
    :set expandtab        :let &expandtab = 1
    
    " switch expandtab off
    :set noexpandtab      :let &expandtab = 0
    
    " see what's the value of expandtab
    :set expandtab?       :echo &expandtab
    
    Run Code Online (Sandbox Code Playgroud)