vim 如何用 `set` 解析引号?

How does vim parse quotes with `set`?

我对如何在 set 中使用空格感到困惑。例如,假设我想更改字体。我有很多选择:

set guifont=a\ b

这从 :help option-backslash 开始是有道理的。

set guifont="a b"

我找不到这方面的任何文档,但引用可以让您处理空格是有道理的。当您删除引号以获得 set guifont=a b 时,它不起作用(未知选项 b)。到目前为止一切顺利。

set guifont='a b'

这就是我感到困惑的地方。为什么这不起作用? echo 'a b'echo "a b" 产生相同的输出..

set guifont='a\ b'

这里让我大吃一惊,因为这将 guifont 设置为 a b,但是如果我 echo 'a\ b' 我得到 a\ b,根据 :help expr-quote,这是有道理的。

简而言之:引号如何与 set 交互?

您可以使用 :set:

转义空格
:set option=foo\ bar

或在 :let 中使用引号:

:let &option = "foo bar"

要了解更多信息,您可以输入:

:h let-&

在 vim " 中开始评论。这意味着 set guifont="a b" 被解释为 set guifont=。 (如果您执行 set guifont? 可以看到这一点,因为返回的值不是 a b

来自 :h option-backspace 的文档显示情况确实如此,因为您需要转义引号以将其包含在 set 命令中。

Similarly, the double quote character starts a comment.  To include the '"' in
the option value, use '\"' instead.  This example sets the 'titlestring'
option to 'hi "there"': >
   :set titlestring=hi\ \"there\"

对于set guifont='a b',单引号不是特殊字符,因此没有任何意义。在这里,您将两个单独的参数传递给 set 命令。第一个是 guifont='a,另一个是 b' 但是 b' 没有意义,你得到 E518: Unknown option: b'

基本上,set 命令只接受空格分隔的参数。其中 vim 注释被正常处理并从命令中删除。引用不允许您在 set 命令中处理空格。

Vimscript 是一种随着时间的推移而发展的语言,其规则并不一致。