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

时间:2014-09-08 23:38:44

标签: variables types vim

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

:set expandtab?

它回答noexpandtab。如果我问的话,

:echo &expandtab

它回答0。如果我问它

:set noexpandtab?

它再次回答noexpandtab。但是,如果我问它

:echo &noexpandtab

答案:

E113: Unknown option: noexpandtab
E15: Invalid expression: &noexpandtab

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

3 个答案:

答案 0 :(得分: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
    

答案 1 :(得分:2)

从帮助文件(options.txt):

  

:se [t] no {option}切换选项:重置,关闭它。

选项为expandtab。没有名称为noexpandtab的选项或变量。

答案 2 :(得分:1)

如果你说

set expandtab
set expandtab?
echo &expandtab

分别获得expandtab1。我对答案并不完全确定,但通过查看此问题并从您的问题中,expandtab是变量名,因此&expandtab是指向此变量的指针。当expandtab==1打开时,expandtab==0时关闭。所以当你打电话的时候我会猜到

set expandtab?

set noexpandtab?
你实际上是在做同样的事情。你问vim expandtab是打开还是关闭。而不是返回01,这可能意味着不同的事情取决于您是否询问expandtab?noexpandtab?,它会准确地告诉您设置是什么。

所以我说noexpandtab实际上并不是变量,它只是expandtab的别名,当它设置为{{1}时}}

但同样,这只是一个有根据的猜测。

编辑:更新@Amadan的评论 0是选项,expandtab是选项的变量或值。在这种情况下,&expandtab是一个布尔选项(您可以将其置于(1)或关闭(0))。 expandtab只是将noexpandtab设置为expandtab的语法。