如何将字符串分成多行?

一个人想着一个人 提交于 2019-12-08 18:46:33

在YAML中,我的字符串很长。 我想将其保留在编辑器的80列(或类似视图)内,所以我想破坏字符串。 这是什么语法?

换句话说,我有这个:

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

我想要这个(或达到这种效果的东西):

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

我想使用上述引号,因此不需要在字符串中转义任何内容。


#1楼

要保留换行符,请使用| , 例如:

|
  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,并保留换行符。 \\ n


#2楼

在YAML中有5 6 NINE (或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 Spec 1.2中的官方定义

标量内容可以使用文字样式(由“ |”表示)以块符号表示,其中所有换行符均有效。 或者,可以用折叠样式(用“>”表示)来书写它们,其中每个换行符都被折叠到一个空格,除非它以空行或缩进的行结束。

带块标记指示器的块样式( >-|->+|+

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

  • >| :“ clip”:保持换行,删除尾随的空白行。
  • >-|- :“ strip”:删除换行,删除尾随的空白行。
  • >+|+ :“保持”:保持换行,尾随空白行。

“流”标量样式( "'

这些具有有限的转义,并构造没有换行符的单行字符串。 它们可以与键在同一行开始,也可以先添加其他换行。

普通样式 (无转义,无#:组合,第一个字符的限制):

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

单引号样式 (必须将双引号' ,不能使用特殊字符,可能对表示以双引号开头的字符串很有用):

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

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

摘要

在此表中, _表示space character\\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

附录

如果您以折线样式在非第一行的开头插入多余的空格,则会保留这些空格,并带有额外的换行符。 流样式不会发生这种情况:

- >
    my long
      string
- my long
    string

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

我什至不能

* 2种块样式,每种都有2个可能的块指示符(或无),以及9种可能的缩进指示符(或无),1种普通样式和2种带引号的样式:2 x(2 + 1)x(9 +1)+ 1 + 2 = 63

这些信息中的一些也已在此处进行了总结。


#3楼

您可能不相信,但是YAML也可以执行多行键:

?
 >
 multi
 line
 key
:
  value

#4楼

如果您在Symfony中使用YAML和Twig进行翻译,并且想在Javascript中使用多行翻译,则在翻译后立即添加回车符。 因此,即使是以下代码:

var javascriptVariable = "{{- 'key'|trans -}}";

其中yml翻译如下:

key: >
    This is a
    multi line 
    translation.

仍将导致以下html代码:

var javascriptVariable = "This is a multi line translation.
";

因此,Twig中的减号不能解决此问题。 解决方案是在yml中的大于号后添加此减号:

key: >-
    This is a
    multi line 
    translation.

将获得正确的结果,在Twig中的一行上进行多行翻译:

var javascriptVariable = "This is a multi line translation.";

#5楼

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!