一尘不染

如何在 YAML 中将字符串拆分为多行?

javascript

在 YAML 中,我有一个很长的字符串。我想将其保留在编辑器的 80 列(左右)视图中,因此我想断开字符串。这个的语法是什么?

换句话说,我有这个:

Key: 'this is my very very very very very very long string'

我想要这个(或类似的东西):

Key: 'this is my very very very ' +
     'long string'

我想使用上面的引号,所以我不需要转义字符串中的任何内容。


阅读 293

收藏
2022-02-12

共2个答案

一尘不染

使用 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

您可以使用“block chomping indicator”来消除尾随换行符,如下所示:

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.

在任何一种情况下,每个换行符都被一个空格替换。

2022-02-12
一尘不染

在 YAML 中编写多行字符串有5 6 NINE(或 63*,取决于您的计数方式)不同的方式。

TL;DR

  • 大部分时间使用>:内部换行符被去除,尽管最后你得到一个:

yaml key: > Your long string here.

  • 如果|您希望将这些换行符保留为\n(例如,带有段落的嵌入式降价),请使用。

```yaml
key: |
### Heading

  * Bullet
  * Points

```

  • 如果您不想在末尾附加换行符,请使用>-or代替。|-

  • 如果"..."您需要在单词中间拆分行或想要按字面意思键入换行符,请使用\n

yaml 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 Spec 1.2的官方定义

标量内容可以用块表示法编写,使用文字样式(用“|”表示),其中所有换行符都很重要。或者,它们可以使用折叠样式(用“>”表示)编写,其中每个换行符都折叠到一个空格,除非它以空行或缩进更多的行结尾。

建议:使用它来插入格式化文本(尤其是 Markdown)作为值。

带有块切碎指示符的块样式 ( >-, |-, >+, |+)

\n\n您可以通过添加块选择指示符来控制字符串中最后一个新行以及任何尾随空白行 ( ) 的处理:

  • >, |: “clip”: 保持换行,去掉尾随的空行。
  • >-, |-: “strip”: 去掉换行,去掉尾随的空行。
  • >+, |+: “keep”: 保持换行,保持尾随空行。

“流”标量样式 ( , ", ')

这些具有有限的转义,并构造一个没有换行符的单行字符串。它们可以与键在同一行开始,也可以先使用额外的换行符,这些换行符被剥离。加倍的换行符变成一个换行符。

普通样式(没有转义,没有#:组合,第一个字符不能"'或许多其他标点符号):

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"]

概括

在此表中,_表示space character\n表示“换行符”(\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 🚫 🚫 🚫 🚫 🚫 🚫 🚫 🚫
无空格换行符\ 🚫 🚫 🚫 🚫 🚫 🚫 🚫 🚫
#:价值 🚫
可以 与键在同一行开始 🚫 🚫 🚫 🚫 🚫 🚫

例子

请注意“空格”之前行中的尾随空格。

- >
  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

2022-02-12