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

时间:2015-03-14 18:29:41

标签: vim

我对如何在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互动?

2 个答案:

答案 0 :(得分:1)

在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是一种随着时间的推移而演变的语言,规则并不一致。

答案 1 :(得分:0)

您可以使用:set转义空格:

:set option=foo\ bar

或使用:let的引号:

:let &option = "foo bar"