Mai mult
Cum pot sparge un șir de caractere pe mai multe linii?
În YAML, am un șir de caractere care's de foarte mult timp. Vreau să păstrați acest lucru în 80 de coloane (sau așa), vedere editorul meu, așa că am'd place să rupă șirul. Ce's sintaxa pentru asta?
Cu alte cuvinte, eu am asta:
Key: 'this is my very very very very very very long string'
și am'd dori să aibă această (sau ceva în acest sens):
Key: 'this is my very very very ' +
'long string'
Am'd place să folosesc ghilimele ca mai sus, așa că am don't nevoie pentru a scăpa ceva în șir.
1373
9
Există 5 6 NOUĂ (sau 63*, în funcție de modul în care te numeri) moduri diferite de a scrie mai multe linii siruri de caractere în YAML.
TL;DR
cheie: > Ta timp string aici.
\n
în șir (de exemplu, încorporate reduceri cu paragrafe), utilizați"|".cheie: |
Poziția
Bullet
Puncte
Utilizarea
> - " sau " | -
în loc, dacă nu't vrei un linebreak anexată la sfârșitul anului.Dacă aveți nevoie pentru a împărți linii în mijlocul de cuvinte sau literal de tip linebreaks ca
\n
, utilizați ghilimele duble în loc:cheie: "Antidisestab\ lishmentarianism.\n\nGet pe ea."
Bloc de scalare stiluri (">",
|
)Acestea permit caractere, cum ar fi
\
si"
, fără a scăpa, și se adaugă o nouă linie (\n
) la sfârșitul șirului."> " Pliat style elimină singur newline în șir (dar adaugă la sfârșitul, și convertește dublu newline la simplu):
→
asta mi-e foarte, foarte, foarte lung șir de\n
|
Literal style transformă fiecare newline în șir într-un literal newline, și adaugă la sfârșitul:→
asta mi-e foarte, foarte, foarte\nlong șir de\n
Aici's definiția oficială de la YAML Spec 1.2
Stiluri de bloc cu bloc chomping indicator (
>-
,|-
,>+
,|+
)Puteți controla de manipulare de ultima linie nouă în șir, și orice sfârșit linii goale (
\n\n
) prin adăugarea unui bloc chomping indicator caracter:|
: "clip": păstrați linia de alimentare, scoateți final linii goale.>-
,|-
: "benzi": demontați conducta de alimentare, scoateți final linii goale.>+
,|+
: "păstrați": păstrați linia de alimentare, ține la final linii goale."Tur" scalare stiluri (
`,
",
'`)Acestea au limitat să evadeze, și de a construi o singură linie de șir, cu nici o linie nouă de caractere. Ei pot începe pe aceeași linie cu cheie, sau cu alte linii noi în primul rând.
stil simplu (nici o scăpare, nici
#
sau:
combinații, limite pe primul caracter):dublu-citat style (
\
si" trebuie să fi scăpat de
`, liniile pot fi inserate cu un literal\n
secvență, liniile pot fi concatenate fără spații cu final\
):→
"asta mi-e foarte foarte \"foarte" loooong șir.\n\nLove, YAML."
single-citat style (literal
'
trebuie să fie dublat, fără caractere speciale, eventual utile pentru exprimarea siruri de caractere incepand cu ghilimele):→
"asta mi-e foarte foarte \"foarte" șir lung, e't."
Rezumat
În acest tabel,
_ "înseamnă" caracter spațiu
.\n
înseamnă "newline" (\n
în JavaScript), cu excepția pentru "in-line newline" rând, în cazul în care înseamnă literalmente un backslash și o n).Exemple
Notă spații pe linia înainte "spații."
Stiluri de bloc cu indentare indicatori
Doar în cazul în care cele de mai sus este't de ajuns pentru tine, puteți adăuga un "bloc de indentare indicator" (după bloc chomping indicator, dacă aveți unul):
Addendum
Dacă veți introduce spații suplimentare la începutul nu-primele linii în Pliate stil, acestea vor fi păstrate, cu un bonus newline. Asta nu't se întâmplă cu fluxul de stiluri:
→
["meu mult timp\n șir\n", "mea șir lung"]
Pot't chiar.
``2 stiluri de bloc, fiecare cu 2 posibile bloc chomping indicatori (sau nici unul), și cu 9 posibile indentare indicatori (sau nici unul), 1 stil clar și 2 citat stiluri: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63*
Unele dintre aceste informații au fost, de asemenea, rezumate aici.
Folosind yaml pliat stil, fiecare linie este înlocuit printr-un spațiu. Identatie în fiecare linie va fi ignorat. O linie va fi introdus la sfârșitul anului.
http://symfony.com/doc/current/components/yaml/yaml_format.html
Puteți utiliza "bloc chomping indicator" pentru a elimina sfârșit de linie, după cum urmează:
Există și alte instrumente de control disponibile, precum și (pentru controlează indentarea de exemplu).
Vezi https://yaml-multiline.info/
Pentru a păstra newline utilizare
|
, de exemplu:este tradus în "Aceasta este o foarte lungă perioadă de propoziție\n care se întinde pe mai multe linii în YAML\n dar care va fi pronunțată ca un șir de caractere\n cu liniile conservate.\n"
1. Bloc Notație: Liniile devin spații și extra newline după blocul sunt eliminate
Echivalent JSON
2. Literal Bloc de Scalare: Un Literal Bloc de Scalare | va include liniile și eventualele spații. dar elimină suplimentar
newline după bloc.
Echivalent JSON
3. + indicator cu Literală Bloc de Scalare: ține plus newline după bloc
Echivalent JSON
4. – indicator cu Literală Bloc de Scalare: – înseamnă că newline la sfârșitul șirului este eliminat.
Echivalent JSON
5. Pliat Bloc Scalar(>):
va renunța la liniile de spații, dar și elimină plus newline după bloc.
Echivalent JSON
pentru mai multe puteți vizita mea Blog
Poate nu crezi, dar YAML poate face multi-linie cheile:
Pentru a concatena linii lungi without whitespace, utilizați ghilimele și să scape de liniile cu backslash-uri:
(Multumesc @Tobia)
În cazul în care te're folosind YAML și Crenguță pentru traduceri în Symfony, și doriți să utilizați multi-linie traduceri în Javascript, un retur de car este adăugat imediat după traducere. Deci, chiar codul de mai jos:
var javascriptVariable = "{{- 'cheie'|trans -}}";
Care are următoarele yml traducere:
Va duce în continuare în următorul cod html:
Deci, semnul minus în Creanga nu rezolva asta. Soluția este să adăugați acest semn minus după semnul mai mare decât în yml:
Va avea rezultatul propriu-zis, multi-linie, traducere pe o singură linie în Crenguță:
Pentru situații au fost șir poate conține spații sau nu, eu prefer ghilimele duble și linie de continuare cu backslash-uri:
Dar, rețineți despre capcana pentru cazul în care o linie de continuare începe cu un spațiu, trebuie să fi scăpat (pentru că va fi luat în altă parte):
Dacă șirul conține pauze de linie, acest lucru trebuie să fie scrise în stilul C
\n
.A se vedea, de asemenea, acest question.
Niciuna dintre soluțiile de mai sus a lucrat pentru mine, în o YAML într-un Jekyll proiect. După ce a încercat mai multe opțiuni, mi-am dat seama că un HTML injecție cu
<br>
ar putea face la fel de bine, deoarece, în cele din urmă totul este redat în HTML:nume:
|
Într-un sat din La Mancha<br>
al cărui nume nu't `vreau să-mi amintesc.
Cel puțin pentru mine. Nici o idee cu privire la problemele asociate cu această abordare.