Istnieje 5 6 Dziewięć (lub 63 *, w zależności od tego, jak się liczy) różnych sposobów pisania ciągów wieloliniowych w YAML.
TL; DR
Zwykle chcesz >
:
key: >
Your long
string here.
Jeśli chcesz, aby podziały wierszy były zachowywane jak \n
w ciągu (na przykład osadzone znakowanie akapitu), użyj |
.
key: |
### Heading
* Bullet
* Points
Użyj >-
lub |-
zamiast tego, jeśli nie chcesz dołączać podziału linii na końcu.
Jeśli chcesz podzielić wiersze na środku słów lub dosłownie wpisać podziały wiersza jako \n
, użyj podwójnych cudzysłowów:
key: "Antidisestab\
lishmentarianism.\n\nGet on it."
YAML jest szalony.
Blokuj style skalarne ( >
, |
)
Pozwalają one na znaki takie jak \
i "
bez ucieczki oraz dodają nową linię ( \n
) na końcu łańcucha.
>
Styl zagięty usuwa pojedyncze znaki nowego ciągu (ale dodaje jeden na końcu i konwertuje podwójne znaki nowego na pojedyncze):
Key: >
this is my very very very
long string
→ this is my very very very long string\n
|
Dosłowny styl zamienia każdą nową linię w ciągu w dosłowną nową linię i dodaje jedną na końcu:
Key: |
this is my very very very
long string
→ this is my very very very\nlong string\n
Oto oficjalna definicja z YAML Spec 1.2
Treść skalarną można zapisać w notacji blokowej, używając literalnego stylu (oznaczonego „|”), w którym wszystkie podziały linii są znaczące. Alternatywnie, można je pisać stylem złożonym (oznaczonym jako „>”), w którym każdy podział linii jest składany na spację, chyba że kończy się pusta lub bardziej wcięta linia.
Style bloku z bloku chomping wskaźnik ( >-
, |-
,>+
, |+
)
Możesz kontrolować obsługę ostatniego nowego wiersza w łańcuchu i dowolnych końcowych pustych linii ( \n\n
), dodając znak wskaźnika chompingowania bloku :
>
, |
: „clip”: utrzymuj linię, usuń końcowe puste linie.
>-
, |-
: „strip”: usuń linię, usuń końcowe puste linie.
>+
, |+
: „keep”: utrzymuj linię, kontynuuj puste linie.
"Flow" style skalarne (
, "
,'
)
Mają one ograniczone znaki ucieczki i konstruują łańcuch jednowierszowy bez żadnych nowych znaków linii. Mogą zaczynać się w tym samym wierszu co klawisz lub najpierw z dodatkowymi znakami nowej linii.
zwykły styl (ma ucieczki, nie ma#
lub:
kombinacje ograniczeń pierwszego znaku):
Key: this is my very very very
long string
styl podwójnego cudzysłowu (\
i"
musi być\
poprzedzony znakiemucieczki, znaki nowej linii można wstawiać w dosłownej\n
kolejności, linie można łączyć bez spacji z końcowymi znakami\
):
Key: "this is my very very \"very\" loooo\
ng string.\n\nLove, YAML."
→ "this is my very very \"very\" loooong string.\n\nLove, YAML."
styl pojedynczego cudzysłowu (literał'
musi być podwojony, bez znaków specjalnych, być może przydatne do wyrażania ciągów zaczynających się od podwójnych cudzysłowów):
Key: 'this is my very very "very"
long string, isn''t it.'
→ "this is my very very \"very\" long string, isn't it."
Podsumowanie
W tej tabeli _
oznacza space character
. \n
oznacza „znak nowej linii” ( \n
w JavaScript), z wyjątkiem wiersza „wbudowane znaki nowej linii”, gdzie dosłownie oznacza to odwrotny ukośnik i 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 |
Przykłady
Zwróć uwagę na końcowe spacje w wierszu przed „spacjami”.
- >
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."
]
Blokuj style za pomocą wskaźników wcięcia
Na wypadek gdyby powyższe nie było dla Ciebie wystarczające, możesz dodać „ wskaźnik wcięcia bloku ” (po wskaźniku chompingowania bloku, jeśli taki masz):
- >8
My long string
starts over here
- |+1
This one
starts here
Uzupełnienie
Jeśli wstawisz dodatkowe spacje na początku nie-pierwszych wierszy w stylu zagiętym, zostaną one zachowane z nową linią bonusową. Nie dzieje się tak w przypadku stylów przepływu:
- >
my long
string
- my long
string
→ ["my long\n string\n", "my long string"]
Nawet nie umiem.
*
2 style bloków, każdy z 2 możliwymi wskaźnikami chompowania bloków (lub brak) i 9 możliwymi wskaźnikami wcięcia (lub brak), 1 styl zwykły i 2 stylami cytowanymi: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63
Niektóre z tych informacji zostały również tutaj streszczone .