答案 0 :(得分:1)
TL; DR; n
是YAML中2009年之前的规范表示,用于布尔值“False”。
Sublime不应该突出显示默认情况下,因为n
自2009年以来在YAML中没有这样的表示。如果你明确指定编辑一个,它应该只突出显示n
YAML 1.1文件通过界面,或者文档通过文档顶部的指令%YAML 1.1
识别出来。
在YAML中,标量可以有不同的格式(from the YAML 1.2 specification):
YAML允许以多种格式呈现标量。例如,整数“11”也可以写为“0xB”。标签必须指定一种机制,用于将格式化内容转换为规范形式,以便在相等性测试中使用。与节点样式一样,格式是表示细节,不会反映在序列化树和表示图中。
旧的1.1规范在该段中有不同的第二句,即directly mentions booleans:
例如,布尔“true”也可能写为“是”。
如何在编程语言中构造YAML标量取决于解析器使用的模式。最基本的模式将每个标量构造为一个字符串(即没有解释)。
在更实际的模式中,有规范形式(通常用于表示计算机编程类型,如整数,布尔值,日期时间戳等)和匹配标量(通常通过正则表达式),允许构造就像这样的一种。 E.g 42
是规范表示,但在输入端0x2a
和0o52
也允许使用相同的整数值。
在YAML 1.2中,当true
,false
,true
匹配True
和TRUE
时,将core schemas的布尔值清理为规范形式false
和False
,FALSE
,true
和false
- 只允许y
和n
的简单JSON架构的扩展。
广泛更改from YAML 1.1,其中规范表示为y
和Y
,同时匹配所有yes
,Yes
,YES
,{ {1}},n
,N
,no
,No
,NO
,true
,True
,{{1 }},TRUE
,false
,False
,FALSE
,on
,On
,ON
,off
,Off
,OFF
。这通常会导致混淆,因为程序中的匹配字符串必须在YAML中用显式引号表示,以便在加载时不被解释为布尔值。
Sublime似乎支持YAML 1.1规范,其中布尔值可以写为n
。由于YAML 1.2规范来自2009年,我真的不认为Sublime这样做是正确的,并且不应该将n
解释为布尔值,除非YAML文档以明确的指令%YAML 1.1
开头。 (由于你在界面中没有给出任何指示,因为它不在文档中,我认为你没有。)
当然Sublime的原始版本先于YAML 1.2规范,但您希望在8年后他们会通过更新来纠正这个问题。另一个这样的变化是以0
开头的标量,如0123
,它们是YAML 1.2中的字符串,但是在YAML 1.1中是一个(八进制)整数。也许您使用它作为测试来查看YAML模式是否已正确更新:除非您明确指定YAML 1.1,否则不应在编辑器中突出显示0123
。
当然有过时的库只支持YAML 1.1,你甚至可能会使用它,但这不是编辑器中默认的借口。