Existem 5 6 NINE (ou 63 *, dependendo de como você conta) maneiras diferentes de escrever strings de várias linhas no YAML.
TL; DR
Geralmente você deseja >
:
key: >
Your long
string here.
Se você deseja que as quebras de linha sejam preservadas como \n
na seqüência de caracteres (por exemplo, descontos incorporados com parágrafos), use |
.
key: |
### Heading
* Bullet
* Points
Use >-
ou |-
não, se você não quiser que uma quebra de linha seja anexada ao final.
Se você precisar dividir linhas no meio das palavras ou digitar literalmente quebras de linha como \n
, use aspas duplas:
key: "Antidisestab\
lishmentarianism.\n\nGet on it."
YAML é louco.
Bloquear estilos escalares ( >
, |
)
Isso permite caracteres como \
e "
sem escapar e adiciona uma nova linha ( \n
) ao final da sua string.
>
O estilo dobrado remove as novas linhas da cadeia (mas adiciona uma no final e converte as novas linhas em simples):
Key: >
this is my very very very
long string
→ this is my very very very long string\n
|
O estilo literal transforma cada nova linha da string em uma nova linha literal e adiciona uma no final:
Key: |
this is my very very very
long string
→ this is my very very very\nlong string\n
Aqui está a definição oficial do YAML Spec 1.2
O conteúdo escalar pode ser escrito em notação de bloco, usando um estilo literal (indicado por "|"), onde todas as quebras de linha são significativas. Como alternativa, eles podem ser escritos com o estilo dobrado (indicado por ">"), em que cada quebra de linha é dobrada em um espaço, a menos que termine uma linha vazia ou mais recuada.
Estilos de bloco com indicador mastigando bloco ( >-
, |-
, >+
, |+
)
Você pode controlar o manuseio da nova linha final na string e de qualquer linha em branco à direita ( \n\n
) adicionando um caractere indicador de chomping de bloco :
>
, |
: "clip": mantenha o avanço da linha, remova as linhas em branco à direita.
>-
, |-
: "strip": remova a alimentação da linha, remova as linhas em branco à direita.
>+
, |+
: "keep": mantém o avanço da linha, continua seguindo linhas em branco.
"Flow" escalares estilos (
, "
, '
)
Eles têm escape limitado e constroem uma cadeia de caracteres de linha única sem novos caracteres de linha. Eles podem começar na mesma linha que a chave ou com novas linhas adicionais primeiro.
estilo simples (sem escape, sem#
ou:
combinações, limites para o primeiro caractere):
Key: this is my very very very
long string
estilo de aspas duplas (\
e"
deve ser escapado por\
, novas linhas podem ser inseridas com uma\n
sequêncialiteral, linhas podem ser concatenadas sem espaços com final\
):
Key: "this is my very very \"very\" loooo\
ng string.\n\nLove, YAML."
→ "this is my very very \"very\" loooong string.\n\nLove, YAML."
estilo de aspas simples (literal'
deve ser duplicado, sem caracteres especiais, possivelmente útil para expressar cadeias começando com aspas duplas):
Key: 'this is my very very "very"
long string, isn''t it.'
→ "this is my very very \"very\" long string, isn't it."
Sumário
Nesta tabela, _
significa space character
. \n
significa "caractere de nova linha" ( \n
em JavaScript), exceto a linha "novas linhas em linha", onde significa literalmente uma barra invertida e um 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 |
Exemplos
Observe os espaços à direita na linha antes de "espaços".
- >
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."
]
Estilos de bloco com indicadores de indentação
Caso as opções acima não sejam suficientes, você pode adicionar um " indicador de indentação de bloco " (após o indicador de chomping de bloco, se você tiver um):
- >8
My long string
starts over here
- |+1
This one
starts here
Termo aditivo
Se você inserir espaços extras no início das não-primeiras linhas no estilo Dobrado, eles serão mantidos, com uma nova linha de bônus. Isso não acontece com os estilos de fluxo:
- >
my long
string
- my long
string
→ ["my long\n string\n", "my long string"]
Eu não posso nem.
*
2 estilos de bloco, cada um com 2 possíveis indicadores de chomping de bloco (ou nenhum) e com 9 possíveis indicadores de recuo (ou nenhum), 1 estilo simples e 2 estilos entre aspas: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63
Algumas dessas informações também foram resumidas aqui .