我该怎样在YAML中将一个字符串分为多行?
我该怎样在YAML中将一个字符串分为多行?
在 YAML 中,我有一个非常长的字符串。我想将其保留在编辑器的 80 列(左右)视图内,因此我想要分割字符串。这个语法是什么?
换句话说,我有这个:
Key: 'this is my very very very very very very long string'
我想要这样(或类似的方式):
Key: 'this is my very very very ' + 'long string'
我想要使用引号,所以我不需要在字符串内部转义任何内容。
使用yaml折叠风格。每行的缩进将被忽略。最后会插入一个换行符。
Key: > This is a very long sentence that spans several lines in the YAML but which will be rendered as a string with only a single carriage return appended to the end.
http://symfony.com/doc/current/components/yaml/yaml_format.html
您可以使用“块插入指示器”来消除尾随换行符,具体如下:
Key: >- This is a very long sentence that spans several lines in the YAML but which will be rendered as a string with NO carriage returns.
在任一情况下,每个换行符都将被替换为一个空格。
还有其他的控制工具可用(例如控制缩进)。
在YAML中,有 5 6 九(或者63个,取决于你怎么数)种不同的写多行字符串的方式。
TL;DR
-
大多数情况下使用
>
:内部的换行符被剥离,尽管在结尾处会保留一个:key: > Your long string here.
-
如果要保留这些换行符作为
\n
(例如,使用段落的嵌入式markdown),则使用|
。key: | ### Heading * Bullet * Points
-
如果你不想在最后加一个换行符,则使用
>-
或|-
。 -
如果需要在单词中间拆分行或字面上输入
\n
换行符,则使用"..."
:key: "Antidisestab\ lishmentarianism.\n\nGet on it."
-
YAML太疯狂了。
块标量样式(>
、|
)
这些允许出现\
和"
等字符,而不需要转义,并在字符串末尾添加一个新行(\n
)。
>
折叠式样式会删除字符串中的单个换行符(但在末尾添加一个,并将双重换行符转换为单个):
Key: > this is my very very very long string
→ this is my very very very long string\n
多余的前导空格被保留并导致额外的换行符。请参见下面的说明。
建议:通常使用此选项。
|
文本样式将字符串中的每个换行符转换为一个字面的换行符,并在末尾添加一个:
Key: | this is my very very very long string
→ this is my very very very\nlong string\n
从YAML规范1.2中获取官方定义:
标量内容可以按块表示法编写,使用文本样式(通过“|”表示)其中所有换行符均为有效。或者,它们可以使用折叠样式(用“>”表示)编写,其中除非它结束了空行或缩进更大的行,否则每个换行符都被折叠到一个空格。
建议:将其用于作为值插入格式化文本(特别是Markdown)
带有块换行指示符(>-
、|-
、>+
、|+
)的块样式
你可以通过添加块咀嚼指示符字符来控制字符串中的最后一个新行,以及任何末尾的空白行(\n\n
):
>
、|
:“剪辑”:保留换行符,删除末尾的空白行。>-
、|-
:“剥离”:删除换行符,删除末尾的空白行。>+
、|+
:“保留”:保留换行符,保留末尾的空白行。
“流”标量样式(
、"
、'
)
这些具有有限的转义,并构造一个没有换行符的单行字符串。他们可以和键位于同一行,或者先有额外的换行符,这些换行符会被去除。双倍的换行符变成一个换行符。
纯文本样式 (无需转义,无需#
或:
组合,第一个字符不能是"
, '
或许多其他标点符号):
Key: this is my very very very long string
建议: 避免。看起来方便,但您可能会因意外使用禁止的标点符号而触发语法错误。
双引号样式 (\
和"
必须转义为\
,换行可以使用文本\n
序列插入,行可以在没有空格的情况下用尾随\
连接):
Key: "this is my very very \"very\" loooo\ ng string.\n\nLove, YAML."
→ "this is my very very \"very\" loooong string.\n\nLove, YAML."
建议:仅在非常特定的情况下使用。这是您可以将非常长的令牌(例如URL)跨越几行而不添加空格的唯一方法。而且,在行中添加换行符可能有用。
单引号样式(必须将文本'
加倍,没有特殊字符,可能用于表示以双引号开头的字符串):
Key: 'this is my very very "very" long string, isn''t it.'
→ "this is my very very \"very\" long string, isn't it."
建议:避免。非常少的好处,主要是不便。
带缩进指示符的块样式
如果以上还不足够满足您的需求,您可以在块缩减标识符之后添加“块缩进指示符”(如果您有一个块咀嚼标识符):
- >8 My long string starts over here - |+1 This one starts here
注意:折叠样式(>
)中的前导空格
如果在折叠样式的非第一行的行首插入额外的空格,则会保留这些空格,并添加一个额外的换行符。 (流样式不会发生这种情况。) 第6.5节:
此外,对于包含前导空格的文本行周围的换行符,折叠不适用。请注意,这样的更高缩进行可能仅由这种前导空格组成。
- > my long string many spaces above - my long string many spaces above
→ ["my long\n string\n \nmany spaces above\n","my long string\nmany spaces above"]
总结
在此表格中,_
表示空格字符
。\n
表示“换行符”(在“其他特性”下除外的JavaScript中的\n
)。“前导空格”适用于第一行之后(建立缩进的行)
> |
| |
" |
' |
>- |
>+ |
|- |
|+ |
||
---|---|---|---|---|---|---|---|---|---|
将空格/换行符转换为: | |||||||||
尾随空格 → | _ | _ | _ | _ | _ | _ | |||
前导空格 → | \n_ | \n_ | \n_ | \n_ | \n_ | \n_ | |||
单个换行符 → | _ | \n | _ | _ | _ | _ | _ | \n | \n |
双换行符 → | \n | \n\n | \n | \n | \n | \n | \n | \n\n | \n\n |
最后一个换行符 → | \n | \n | \n | \n | |||||
最后双个换行符 → | \n\n | \n\n | |||||||
如何创建文字: | |||||||||
单引号 | ' | ' | ' | ' | '' | ' | ' | ' | ' |
双引号 | " | " | " | \" | " | " | " | " | " |
反斜杠 | \ | \ | \ | \\ | \ | \ | \ | \ | \ |
其他功能 | |||||||||
使用\n 内联换行符 |
|||||||||
使用\ 的无空格换行符 |
|||||||||
值中的# 或: |
|||||||||
可以在同一行上开始key |
例子
请注意,“空间”之前“空间”的尾随空格。
- > very "long" 'string' with paragraph gap, \n and spaces. - | very "long" 'string' with paragraph gap, \n and spaces. - very "long" 'string' with paragraph gap, \n and spaces. - "very \"long\" 'string' with paragraph gap, \n and s\ p\ a\ c\ e\ s." - 'very "long" ''string'' with paragraph gap, \n and spaces.' - >- very "long" 'string' with paragraph gap, \n and spaces. [ "very \"long\" 'string' with\nparagraph gap, \\n and spaces.\n", "very \"long\"\n'string' with\n\nparagraph gap, \\n and \nspaces.\n", "very \"long\" 'string' with\nparagraph gap, \\n and spaces.", "very \"long\" 'string' with\nparagraph gap, \n and spaces.", "very \"long\" 'string' with\nparagraph gap, \\n and spaces.", "very \"long\" 'string' with\nparagraph gap, \\n and spaces." ]
*
2个块样式,每个样式都有2个可能的块断裂指示符(或没有),并且有9个可能的缩进指示符(或没有),1个普通样式和2个引用样式:2 x(2 + 1)x(9 + 1)+ 1 + 2 = 63
这些信息也可以在此处进行总结。