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

:set expandtab?

它回答noexpandtab。如果我问的话
:echo &expandtab

它回答0。如果我问
:set noexpandtab?

它再次回答noexpandtab。但是如果我问
:echo &noexpandtab

它回答:
E113: Unknown option: noexpandtab
E15: Invalid expression: &noexpandtab

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

最佳答案

  • 您正在处理选项,而不是变量。
  • noexpandtab不是一个选项,它是no,后跟一个实际的选项名称。该表示法允许您使用:set命令关闭 bool(boolean) 选项。
  • &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
    
  • 10-07 21:04