Jak złamać łańcuch w YAML na wielu liniach?
W YAML mam bardzo długi sznurek. Chcę zachować to w 80-kolumnowym (lub tak) widoku mojego edytora, więc chciałbym złamać ciąg znaków. Jaka jest składnia tego?
Innymi słowy, mam to:
Key: 'this is my very very very very very very long string'
I chciałbym mieć to (lub coś w tym stylu):
Key: 'this is my very very very ' +
'long string'
Chciałbym używać cudzysłowów jak powyżej, więc nie muszę uciekać się do niczego wewnątrz ciągu.
9 answers
Używanie stylu składanego yaml. Wcięcia w każdej linii będą ignorowane. Przerwa linii zostanie wstawiona na końcu.
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
Możesz użyć" block chomping indicator", aby wyeliminować przerwanie linii końcowej, w następujący sposób:
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.
W każdym przypadku, każde złamanie linii jest zastępowane spacją.
Dostępne są również inne narzędzia sterujące (na przykład do kontrolowania wcięcia).
Zobacz https://yaml-multiline.info/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-18 23:51:25
Są 5 6 dziewięć (lub 63*, w zależności od liczenia) różne sposoby zapisu ciągów wielowierszowych w YAML.
TL; DR
-
Używaj
>
przez większość czasu: wewnętrzne przerwy linii są usuwane, chociaż dostajesz jeden na końcu:key: > Your long string here.
-
Użyj
|
, Jeśli chcesz, aby te liniały były zachowane jako\n
(na przykład, embedded markdown with paragrafy).key: | ### Heading * Bullet * Points
Użyj
>-
lub|-
zamiast tego, jeśli nie chcesz dodawać linebreak na końcu.-
Użyj
"..."
, jeśli chcesz podzielić wiersze w środku słów lub chcesz dosłownie wpisać linebreaks jako\n
:key: "Antidisestab\ lishmentarianism.\n\nGet on it."
YAML jest szalony.
Style skalarne blokowe (>
, |
)
Te pozwalają znaki takie jak \
i "
bez znaków specjalnych i dodają nową linię (\n
) na końcu twojego sznurek.
>
składany styl usuwa pojedyncze nowe linie wewnątrz łańcucha (ale dodaje jeden na końcu i konwertuje podwójne nowe linie na pojedyncze):
Key: >
this is my very very very
long string
→ this is my very very very long string\n
|
styl dosłowny zamienia każdy znak nowej linii w literalny znak nowej linii i dodaje jeden 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
Skalar treść może być zapisana w notacji blokowej, używając dosłownego stylu (oznaczonego przez"/"), gdzie wszystkie podziały wierszy są znaczące. Alternatywnie można je zapisać za pomocą stylu składanego (oznaczonego przez">"), gdzie każdy podział linii jest składany do spacji, chyba że kończy się pustą lub bardziej wciętą linią.
Style blokowe ze wskaźnikiem chomping block(>-
, |-
, >+
, |+
)
Możesz kontrolować obsługę ostatniej nowej linii w łańcuchu i dowolnych końcowych pustych linii (\n\n
) dodając wskaźnik blokowania Znak:
-
>
,|
: "klip": zachowaj kanał linii, Usuń końcowe puste linie. -
>-
,|-
: "strip": Usuń kanał linii, Usuń końcowe puste linie. -
>+
,|+
: "keep": utrzymuj kanał linii, utrzymuj puste linie.
Style skalarne "Flow" (
, "
, '
)
Te mają ograniczone ucieczki i konstruują ciąg jednowierszowy bez znaków nowej linii. Mogą zaczynać się w tej samej linii co klawisz lub z dodatkowymi znakami nowej linii.
zwykły Styl (brak ucieczki, brak #
lub:
kombinacji, ograniczenia na pierwszy znak):
Key: this is my very very very
long string
styl podwójnie cytowany (\
i "
musi być zabezpieczony przez \
, nowe linie mogą być wstawiane z ciągiem literalnym \n
, linie mogą być konkatenowane bez spacji z zakończeniem \
):
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 jednoprzyciskowy (literal '
musi być podwojony, bez znaków specjalnych, prawdopodobnie przydatny 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 "in-line newlines" , gdzie oznacza dosłownie 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
uwaga na spacje końcowe na linii 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."
]
Style blokowe ze wskaźnikami wcięć
Na wypadek, gdyby powyższe nie wystarczyło, możesz dodać" wskaźnik wcięcia bloku " (po wskaźniku chompingu bloku, jeśli go posiadasz):
- >8
My long string
starts over here
- |+1
This one
starts here
Dodatek
Jeśli wstawisz dodatkowe spacje na początku nie pierwszych linii w stylu złożonym, zostaną one zachowane, z dodatkową nową linią. To się nie dzieje z flow style:
- >
my long
string
- my long
string
→ ["my long\n string\n", "my long string"]
*
2 Style blokowe, każdy z 2 możliwymi wskaźnikami chompingu bloków (lub brak) i z 9 możliwymi wskaźnikami wcięcia( lub brak), 1 Styl zwykły i 2 Style cytowane: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63
Niektóre z tych informacji zostały również podsumowane tutaj .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-10 06:37:03
Aby zachować newlines Użyj |
, na przykład:
|
This is a very long sentence
that spans several lines in the YAML
but which will be rendered as a string
with newlines preserved.
Jest tłumaczone na "jest to bardzo długie zdanie \N , które obejmuje kilka linii w YAML \N , ale które będzie renderowane jako ciąg\N z zachowanymi znakami nowej linii.\N "
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-09 16:35:59
1. Notacja blokowa (plain, flow-style, scalar): nowe linie stają się spacjami i dodatkowe nowe linie po usunięciu bloku
---
# Note: It has 1 new line after the string
content:
Arbitrary free text
over multiple lines stopping
after indentation changes...
...
Równoważny JSON
{
"content": "Arbitrary free text over multiple lines stopping after indentation changes..."
}
2. Literalny Skalar blokowy: literalny Skalar blokowy| będzie zawierać nowe linie i spacje końcowe. ale usuwa dodatkowe
Nowe linie po bloku.
---
# After string we have 2 spaces and 2 new lines
content1: |
Arbitrary free text
over "multiple lines" stopping
after indentation changes...
...
Równoważny JSON
{
"content1": "Arbitrary free text\nover \"multiple lines\" stopping\nafter indentation changes... \n"
}
3. + wskaźnik z literalnym blokiem Skalar: zachowaj dodatkowe nowe linie po bloku
---
# After string we have 2 new lines
plain: |+
This unquoted scalar
spans many lines.
...
Równoważny JSON
{
"plain": "This unquoted scalar\nspans many lines.\n\n\n"
}
4. - wskaźnik z literalnym Skalarem blokowym: – oznacza, że znak nowej linii na końcu łańcucha jest usuwany.
---
# After string we have 2 new lines
plain: |-
This unquoted scalar
spans many lines.
...
Równoważny JSON
{
"plain": "This unquoted scalar\nspans many lines."
}
5. Skalar Blokowy Złożony(>):
Będzie składać nowe linie do spacji, ale usunie dodatkowe nowe linie po bloku.
---
folded_newlines: >
this is really a
single line of text
despite appearances
...
Ekwiwalent JSON
{
"fold_newlines": "this is really a single line of text despite appearances\n"
}
Po więcej zapraszam na mój Blog
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-14 05:46:04
Aby połączyć długie linie bez spacji , Użyj podwójnych cudzysłowów i usuń nowe linie z odwrotnymi ukośnikami:
key: "Loremipsumdolorsitamet,consecteturadipiscingelit,seddoeiusmodtemp\
orincididuntutlaboreetdoloremagnaaliqua."
(Dzięki @ Tobia)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-11 19:39:35
Możesz w to nie uwierzyć, ale YAML też potrafi robić klawisze Wielowierszowe:
?
>
multi
line
key
:
value
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-24 21:17:27
Jeśli używasz YAML i Twig do tłumaczeń w Symfony i chcesz używać tłumaczeń wielowierszowych w Javascript, powrót karetki jest dodawany zaraz po tłumaczeniu. Więc nawet następujący kod:
var javascriptVariable = "{{- 'key'|trans -}}";
Który ma następujące tłumaczenie yml:
key: >
This is a
multi line
translation.
Nadal będzie wynikał z następującego kodu w html:
var javascriptVariable = "This is a multi line translation.
";
Więc znak minus w gałązce tego nie rozwiąże. Rozwiązaniem jest dodanie tego znaku minus po większym niż logowanie yml:
key: >-
This is a
multi line
translation.
Będzie miał właściwy wynik, tłumaczenie Wielowierszowe na jednej linijce w gałązce:
var javascriptVariable = "This is a multi line translation.";
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-16 06:57:09
W sytuacjach, w których łańcuch może zawierać spacje lub nie, wolę podwójne cudzysłowy i kontynuację linii z odwrotnymi ukośnikami:
key: "String \
with long c\
ontent"
Ale zwróć uwagę na pułapkę dla przypadku, że linia kontynuacyjna zaczyna się od spacji, musi być uniknięta (ponieważ zostanie usunięta gdzie indziej):
key: "String\
\ with lon\
g content"
Jeśli łańcuch zawiera podziały linii, musi być napisany w stylu C \n
.
Zobacz też to pytanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-15 16:15:08
Żadne z powyższych rozwiązań nie zadziałało dla mnie, w pliku YAML w ramach projektu Jekyll. Po wypróbowaniu wielu opcji, zdałem sobie sprawę, że wstrzyknięcie HTML z <br>
może zrobić równie dobrze, ponieważ w końcu wszystko jest renderowane do HTML:
Nazwa: |
W wiosce La Mancha <br>
której imienia nie chcę pamiętać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-07 09:39:30