Существует 5 6 NINE (или 63 *, в зависимости от того, как вы считаете) различных способов написания многострочных строк в YAML.
TL; DR
Обычно вы хотите >
:
key: >
Your long
string here.
Если вы хотите, чтобы разрывы \n
строк были сохранены, как в строке (например, встроенная разметка с абзацами), используйте |
.
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": удалить перевод строки, удалить завершающие пустые строки.
>+
, |+
: "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."
стиль в одинарных кавычках (буквальный'
с одинарными кавычками должен быть удвоен, без специальных символов, возможно, полезно для выражения строк, начинающихся с двойных кавычек):
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
означает «символ новой строки» ( \n
в JavaScript), за исключением строки «строка новой строки», где это означает буквально обратную косую черту и 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
Часть этой информации также была обобщена здесь .