In YAML, ho una stringa che è molto lunga. Voglio tenerla all'interno della vista a 80 colonne (o giù di lì) del mio editor, quindi vorrei spezzare la stringa. Qual è la sintassi per questo?
In altre parole, ho questo:
Key: 'this is my very very very very very very long string'
e mi piacerebbe avere questo (o qualcosa del genere):
Key: 'this is my very very very ' +
'long string'
Vorrei usare le virgolette come sopra, così non ho bisogno di fare l'escape di nulla all'interno della stringa.
Ci sono 5 6 NINE (o 63*, dipende da come si conta) modi diversi di scrivere stringhe multilinea in YAML.
Di solito, vuoi >
:
chiave: >
La tua lunga
stringa qui.
Se vuoi che le interruzioni di riga siano conservate come \n
nella stringa (per esempio, markdown incorporato con paragrafi), usa |
.
chiave: |
### Intestazione
* Pallottola
* Punti
Usa >-
o |-
invece se non vuoi un'interruzione di riga alla fine.
Se hai bisogno di dividere le linee in mezzo alle parole o di digitare letteralmente interruzioni di riga come \n
, usa invece i doppi apici:
chiave: "Antidisestab
lishmentarianism.\n\nGet on it.\quot;
YAML è pazzo.
>
, |
)Questi permettono caratteri come "
e "
senza escape, e aggiungono una nuova riga (\n
) alla fine della tua stringa.
>
Stile piegato rimuove le newline singole all'interno della stringa (ma ne aggiunge una alla fine, e converte le newline doppie in singole):
Key: >
this is my very very very
long string
→ `questa è la mia stringa molto molto lunga``.
|
Stile letterale trasforma ogni newline all'interno della stringa in un newline letterale, e ne aggiunge uno alla fine:
Key: |
this is my very very very
long string
→ "questa è la mia stringa molto molto lunga".
Ecco la definizione ufficiale dalla YAML Spec 1.2
I contenuti scalari possono essere scritti in notazione a blocchi, usando uno stile letterale (indicato da "|") dove tutte le interruzioni di riga sono significative. In alternativa, possono essere scritti con lo stile piegato (indicato da ">") dove ogni interruzione di riga è piegata in uno spazio a meno che non finisca una riga vuota o una più indentata.
>-
, |-
, >+
, |+
)Puoi controllare la gestione della nuova riga finale nella stringa, e qualsiasi riga vuota finale (\n\n
) aggiungendo un carattere block chomping indicator:
>
, |
: "clip": mantiene l'avanzamento di riga, rimuove le linee vuote finali.>-
, |-
: "strip": rimuove l'avanzamento di riga, rimuove le righe vuote finali.>+
, |+
: "keep": mantiene l'avanzamento di riga, mantiene le righe vuote in coda.`,
",
'`)Questi hanno un escaping limitato, e costruiscono una stringa a linea singola senza nuovi caratteri di riga. Possono iniziare sulla stessa linea della chiave, o con ulteriori newline prima.
plain style (nessun escape, nessuna combinazione #
o :
, limiti sul primo carattere):
Key: this is my very very very
long string
double-quoted style (e `"` devono essere sfuggiti da
, i newline possono essere inseriti con una sequenza letterale n`, le linee possono essere concatenate senza spazi con ```` di coda
):
Key: "this is my very very \"very\" loooo\
ng string.\n\nLove, YAML."
→ "questa è la mia stringa molto molto molto lunga.\n\nLove, YAML."
stile tra apici singoli (il letterale '
deve essere raddoppiato, nessun carattere speciale, eventualmente utile per esprimere stringhe che iniziano con doppi apici):
Key: 'this is my very very "very"
long string, isn''t it.'
→ `"questa è la mia stringa molto molto molto lunga, vero?
In questa tabella, _
significa carattere spazio
. n` significa "carattere newline" (
n` in JavaScript), eccetto per la riga "newlines" in linea, dove significa letteralmente un backslash e una 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 |
Notare gli spazi finali sulla linea prima di "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
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."
]
Nel caso in cui quanto sopra non sia abbastanza per te, puoi aggiungere un "indicatore di indentazione del blocco" (dopo il tuo indicatore di indentazione del blocco, se ne hai uno):
- >8
My long string
starts over here
- |+1
This one
starts here
Se si inseriscono spazi extra all'inizio delle linee non iniziali nello stile Folded, questi verranno mantenuti, con un newline in più. Questo non succede con gli stili di flusso:
- >
my long
string
- my long
string
→ ["mia stringa lunga", "mia stringa lunga"]
Non posso nemmeno.
*2 stili di blocco, ciascuno con 2 possibili indicatori di blocco (o nessuno), e con 9 possibili indicatori di rientro (o nessuno), 1 stile semplice e 2 stili quotati: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63
Alcune di queste informazioni sono state anche riassunte qui.
Usando lo stile piegato yaml, ogni interruzione di riga è sostituita da uno spazio. L'indentazione in ogni linea sarà ignorata. Un'interruzione di riga sarà inserita alla fine.
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
Potete usare l'indicatore "block chomping indicator" per eliminare l'interruzione di riga finale, come segue:
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.
Ci sono anche altri strumenti di controllo disponibili (per controllare l'indentazione, per esempio).
Per preservare le newlines usate |
, per esempio:
|
This is a very long sentence
that spans several lines in the YAML
but which will be rendered as a string
with newlines preserved.
è tradotto in "Questa è una frase molto lunga\n che si estende su diverse righe nello YAML\n ma che sarà resa come una stringa\n con le newlines preservate.\n"