代码之家  ›  专栏  ›  技术社区  ›  Alex Quach

vim如何解析带有“set”的引号?

vim
  •  2
  • Alex Quach  · 技术社区  · 10 年前

    我很困惑如何在 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 .

    简而言之:引号如何与 设置 ?

    2 回复  |  直到 10 年前
        1
  •  2
  •   FDinoff    10 年前

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

        2
  •  1
  •   SebMa    3 年前

    您可以使用 :set :

    :set option=foo\ bar
    

    或使用引号 :let :

    :let &option = "foo bar"
    

    有关详细信息,您可以键入:

    :h let-&