如何将一个字符串分成多行?

在YAML中,我有一个非常长的字符串。我想把它保持在我的编辑器的80列(或左右)视图中,所以我想把这个字符串断开。这方面的语法是什么?

换句话说,我有这个。

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

而我想拥有这个(或类似的东西)。

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

我想像上面那样使用引号,所以我不需要在字符串中转义。

在YAML中,有5*6*N(或63*,取决于你如何计算)的不同方式来写多行字符串。

TL;DR

*通常情况下,你想要>

    key: >
      你的长
      字符串在这里。
  • 如果你想在字符串中以n'的形式保留换行符(例如,带有段落的嵌入式markdown),使用|`。

      键。|
        ###标题
    
        * 子弹
        * 点
  • 如果你不希望在结尾处添加换行符,请使用>-|-代替。

  • 如果你需要在词的中间分割行,或按字面意思把换行符打成`n',请用双引号代替。

      key: "Antidisestab\
       lishmentarianism.\n\nGet on it."

*YAML是疯狂的。

块状标量样式(>, |)

这些允许诸如""之类的字符,而不需要转义,并在字符串的末尾添加一个新行(n)。

> 折叠样式 删除字符串中的单换行(但在结尾处添加一个,并将双换行转换为单行)。

Key: >
  this is my very very very
  long string

这是我非常非常非常长的字符串

| 文字风格将字符串中的每一个换行都变成文字换行,并在末尾添加一个。

Key: |
  this is my very very very 
  long string

这是我非常非常非常长的字符串

以下是[YAML Spec 1.2]的官方定义(http://www.yaml.org/spec/1.2/spec.html#id2760844)

标量内容可以用块状符号来写,使用字面风格(用"|"表示),其中所有的换行符都很重要。另外,也可以使用折叠式风格(用"> "表示),其中每个换行符都被折叠成一个空格,除非它是在空行或缩进较多的行结束。

带有块状咬合指示符的块状样式(>-, |-, >+, |+)

你可以通过添加一个block chomping indicator字符来控制对字符串中最后一个新行以及任何尾部空行(n)的处理。

  • >, |: "clip": 保留换行,删除后面的空行。
  • >-, |-: "strip": 移除换行,移除后面的空行。
  • >+, |+: "keep": 保留换行,保留后面的空行。

"Flow" 标量样式 (`,",'`)

这些样式具有有限的转义功能,并构建一个没有新行字符的单行字符串。它们可以与按键在同一行开始,也可以先加换行。

普通风格 (没有转义,没有#:组合,对第一个字符有限制)。

Key: this is my very very very 
  long string

双引号风格 (\"必须用`转义,换行符可以用字面的n`序列插入,行与行之间可以用尾部的```连接,没有空格)。

Key: "this is my very very \"very\" loooo\
  ng string.\n\nLove, YAML."

"这是我非常非常"非常"长的字符串。&n\nLove, YAML."

单引号样式(字面意思'必须是双引号,没有特殊字符,可能对表达以双引号开始的字符串有用)。

Key: 'this is my very very "very"
  long string, isn''t it.'

"这是我的非常非常"非常"长的字符串,不是吗"

摘要

在这个表格中, _'表示 "空间字符"。n表示"换行符"(JavaScript中的n`), 除了"行内换行符"行,它的意思是一个反斜杠和一个n)。

                      >     |            "     '     >-     >+     |-     |+
-------------------------|------|-----|-----|-----|------|------|------|------  
Trailing spaces   | Kept | Kept |     |     |     | Kept | Kept | Kept | Kept
Single newline => | _    | \n   | _   | _   | _   | _    |  _   | \n   | \n
Double newline => | \n   | \n\n | \n  | \n  | \n  | \n   |  \n  | \n\n | \n\n
Final newline  => | \n   | \n   |     |     |     |      |  \n  |      | \n
Final dbl nl's => |      |      |     |     |     |      | Kept |      | Kept  
In-line newlines  | No   | No   | No  | \n  | No  | No   | No   | No   | No
Spaceless newlines| No   | No   | No  | \   | No  | No   | No   | No   | No 
Single quote      | '    | '    | '   | '   | ''  | '    | '    | '    | '
Double quote      | "    | "    | "   | \"  | "   | "    | "    | "    | "
Backslash         | \    | \    | \   | \\  | \   | \    | \    | \    | \
" #", ": "        | Ok   | Ok   | No  | Ok  | Ok  | Ok   | Ok   | Ok   | Ok
Can start on same | No   | No   | Yes | Yes | Yes | No   | No   | No   | No
line as 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."
]

带有缩进指示器的块状样式

如果上述内容对你来说还不够,你可以添加一个"块缩进指标"(在你的块缩进指标之后,如果你有一个的话)。

- >8
        My long string
        starts over here
- |+1
 This one
 starts here

补遗

如果你在Folded风格的非第一行的开头插入额外的空格,它们将被保留,并有一个额外的换行。这不会发生在流动风格中。

- >
    my long
      string
- my long
    string

["my long\n string\n", "my long string"]

我甚至不能'。

``2个块状样式,每个都有2个可能的块状咬合指标(或没有),并有9个可能的缩进指标(或没有),1个普通样式和2个引号样式:2×(2+1)×(9+1)+1+2=63*。

其中一些信息也被总结出来这里

评论(26)
解决办法

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

还有其他控制工具(例如控制缩进)。

见https://yaml-multiline.info/

评论(11)

要保留换行,使用|,例如。

|
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  with newlines preserved.

被翻译成"这是一个非常长的句子*/n*,在YAML中跨越了几行/n**,但它将被渲染成一个保留了换行符的字符串*/n&quot。

评论(12)