我对Vimscript变量如何工作感到困惑,例如,关于变量expandtab和noexpandtab,它们似乎彼此相反。如果我问vim,
:set expandtab?
它回答noexpandtab
。如果我问的话,
:echo &expandtab
它回答0
。如果我问它
:set noexpandtab?
它再次回答noexpandtab
。但是,如果我问它
:echo &noexpandtab
答案:
E113: Unknown option: noexpandtab
E15: Invalid expression: &noexpandtab
所以,我想我不明白。如果noexpandtab
是变量,为什么我不能回显它的值?如果它不是一个变量那么它是什么?
答案 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
分别获得expandtab
和1
。我对答案并不完全确定,但通过查看此问题并从您的问题中,expandtab
是变量名,因此&expandtab
是指向此变量的指针。当expandtab==1
打开时,expandtab==0
时关闭。所以当你打电话的时候我会猜到
set expandtab?
或
set noexpandtab?
你实际上是在做同样的事情。你问vim expandtab
是打开还是关闭。而不是返回0
或1
,这可能意味着不同的事情取决于您是否询问expandtab?
或noexpandtab?
,它会准确地告诉您设置是什么。
所以我说noexpandtab
实际上并不是变量,它只是expandtab
的别名,当它设置为{{1}时}}
但同样,这只是一个有根据的猜测。
编辑:更新@Amadan的评论
0
是选项,expandtab
是选项的变量或值。在这种情况下,&expandtab
是一个布尔选项(您可以将其置于(1)或关闭(0))。 expandtab
只是将noexpandtab
设置为expandtab
的语法。