En YAML, j'ai une chaîne qui est très longue. Je veux garder cela dans la vue 80 colonnes (ou plus) de mon éditeur, alors j'aimerais rompre la chaîne. Quelle est la syntaxe pour cela?
En d'autres termes, j'ai ceci:
Key: 'this is my very very very very very very long string'
et j'aimerais avoir ceci (ou quelque chose à cet effet):
Key: 'this is my very very very ' +
'long string'
J'aimerais utiliser des guillemets comme ci-dessus, afin que je n'ai besoin d'échapper à rien dans la chaîne.
En utilisant le style yaml, chaque saut de ligne est remplacé par un espace. L'indention dans chaque ligne sera ignorée. Un saut de ligne sera inséré à la fin.
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
Vous pouvez utiliser "l'indicateur de blocage de bloc" pour éliminer le saut de ligne de fin, comme suit:
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.
D'autres outils de contrôle sont également disponibles (pour contrôler l'indentation, par exemple).
Il y a 5 6 NEUF (ou 63 *, en fonction de votre compte) de différentes façons d'écrire sur plusieurs lignes cordes en YAML.
Généralement, vous voulez >
:
key: >
Your long
string here.
Si vous souhaitez que les sauts de ligne soient préservés en tant que \n
dans la chaîne (par exemple, markdown incorporé avec des paragraphes), utilisez |
.
key: |
### Heading
* Bullet
* Points
Utilisez plutôt >-
ou |-
si vous ne souhaitez pas qu'un saut de ligne soit ajouté à la fin.
Si vous devez fractionner des lignes au milieu de mots ou taper littéralement les sauts de ligne sous la forme \n
, utilisez plutôt des guillemets:
key: "Antidisestab\
lishmentarianism.\n\nGet on it."
YAML est fou.
>
, |
)Ceux-ci autorisent des caractères tels que \
et "
sans échapper et ajoutent une nouvelle ligne (\n
) à la fin de votre chaîne.
>
style plié supprime les retours à la ligne simples dans la chaîne (mais en ajoute un à la fin et convertit les doubles lignes en lignes simples):
Key: >
this is my very very very
long string
→ this is my very very very long string\n
|
Style littéral transforme chaque nouvelle ligne de la chaîne en une nouvelle ligne et en ajoute une à la fin:
Key: |
this is my very very very
long string
→ this is my very very very\nlong string\n
Voici la définition officielle de YAML Spec 1.2
Le contenu scalaire peut être écrit en notation bloc, en utilisant un style littéral (indiqué par “|”) où tous les sauts de ligne sont significatifs. Ils peuvent également être écrits avec le style plié (indiqué par ">"), chaque saut de ligne étant plié en un espace sauf s’il termine une ligne vide ou une ligne plus en retrait.
>-
, |-
, >+
, |+
)Vous pouvez contrôler le traitement de la dernière nouvelle ligne de la chaîne et de toutes les lignes vides de fin (\n\n
) en ajoutant un indicateur de blocage de bloc caractère:
>
, |
: "clip": conserve le saut de ligne, supprime les lignes vierges.>-
, |-
: "strip": supprime le saut de ligne, supprime les lignes vierges.>+
, |+
: "keep": conserve le saut de ligne, conserve les lignes vierges."
, '
)Celles-ci ont un échappement limité et construisent une chaîne d'une seule ligne sans nouveaux caractères de ligne. Ils peuvent commencer sur la même ligne que la touche ou par des lignes nouvelles supplémentaires.
style brut (aucune combinaison d'échappement, aucune combinaison de #
ou de :
, limites sur le premier caractère):
Key: this is my very very very
long string
style entre guillemets (\
et "
doivent être précédés de \
, les nouvelles lignes peuvent être insérées avec une séquence littérale \n
, les lignes peuvent être concaténées sans espaces \
) suivant:
Key: "this is my very very \"very\" loooo\
ng string.\n\nLove, YAML."
→ "this is my very very \"very\" loooong string.\n\nLove, YAML."
style entre guillemets simples (le code '
doit être doublé, aucun caractère spécial, éventuellement utile pour l'expression de chaînes commençant par des guillemets doubles):
Key: 'this is my very very "very"
long string, isn''t it.'
→ "this is my very very \"very\" long string, isn't it."
Dans cette table, _
signifie space character
. \n
signifie "caractère de nouvelle ligne" (\n
en JavaScript), à l'exception de la ligne "nouvelles lignes en ligne", où elle correspond littéralement à une barre oblique inversée et à un 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 |
Notez les espaces finaux sur la ligne précédant "espaces".
- >
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."
]
Au cas où ce qui précède ne vous suffirait pas, vous pouvez ajouter un " indicateur d'indentation de bloc " (après votre indicateur de blocage, si vous en avez un):
- >8
My long string
starts over here
- |+1
This one
starts here
Si vous insérez des espaces supplémentaires au début des premières lignes du style Plié, ils seront conservés avec une nouvelle ligne. Cela n'arrive pas avec les styles de flux:
- >
my long
string
- my long
string
→ ["my long\n string\n", "my long string"]
Je ne peux même pas.
*
2 styles de bloc, chacun avec 2 indicateurs de décompression de bloc possibles (ou aucun) et avec 9 indicateurs d'indentation possibles (ou aucun), 1 style brut et 2 styles entre guillemets: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63
Certaines de ces informations ont également été résumées ici .
Pour conserver nouvelles lignes, utilisez |
, par exemple:
_|
This is a very long sentence
that spans several lines in the YAML
but which will be rendered as a string
with newlines preserved.
_
est traduit en "Ceci est une très longue phrase \ n qui s'étend sur plusieurs lignes du YAML \ n mais qui sera restituée sous forme de chaîne \ n avec nouvelles lignes préservées .\ n "
1. Notation de bloc: Les nouvelles lignes deviennent des espaces et les nouvelles lignes supplémentaires après la suppression du bloc
---
# Note: It has 1 new line after the string
content:
Arbitrary free text
over multiple lines stopping
after indentation changes...
...
JSON équivalent
{
"content": "Arbitrary free text over multiple lines stopping after indentation changes..."
}
2. Scalaire de bloc littéral: Un scalaire de bloc littéral | inclura les nouvelles lignes et les espaces de fin. mais supprime extra
nouvelles lignes après le bloc.
---
# After string we have 2 spaces and 2 new lines
content1: |
Arbitrary free text
over "multiple lines" stopping
after indentation changes...
...
JSON équivalent
{
"content1": "Arbitrary free text\nover \"multiple lines\" stopping\nafter indentation changes... \n"
}
3. + indicateur avec littéral bloc scalaire: conserver les nouvelles lignes après le bloc
---
# After string we have 2 new lines
plain: |+
This unquoted scalar
spans many lines.
...
JSON équivalent
{
"plain": "This unquoted scalar\nspans many lines.\n\n\n"
}
4. - indicateur avec Scalaire au Bloc Scalaire: - signifie que la nouvelle ligne à la fin de la chaîne est supprimée.
---
# After string we have 2 new lines
plain: |-
This unquoted scalar
spans many lines.
...
JSON équivalent
{
"plain": "This unquoted scalar\nspans many lines."
}
5. Scalaire de bloc plié (>):
pliera les nouvelles lignes aux espaces et supprime les nouvelles lignes après le bloc.
---
folded_newlines: >
this is really a
single line of text
despite appearances
...
JSON équivalent
{
"fold_newlines": "this is really a single line of text despite appearances\n"
}
pour plus vous pouvez visiter mon blog
Vous ne le croirez peut-être pas, mais YAML peut aussi utiliser des clés multilignes:
?
>
multi
line
key
:
value
Pour concaténer de longues lignes sans espace, utilisez des guillemets doubles et échappez les nouvelles lignes avec des barres obliques inverses:
key: "Loremipsumdolorsitamet,consecteturadipiscingelit,seddoeiusmodtemp\
orincididuntutlaboreetdoloremagnaaliqua."
(Merci @Tobia)
Si vous utilisez YAML et Twig pour les traductions dans Symfony et souhaitez utiliser des traductions multilignes en Javascript, un retour à la ligne est ajouté juste après la traduction. Donc même le code suivant:
var javascriptVariable = "{{- 'key'|trans -}}";
Qui a la traduction yml suivante:
key: >
This is a
multi line
translation.
Restera toujours dans le code suivant en HTML:
var javascriptVariable = "This is a multi line translation.
";
Ainsi, le signe moins dans Twig ne résout pas le problème. La solution consiste à ajouter ce signe moins après le signe supérieur à yml:
key: >-
This is a
multi line
translation.
Aura le résultat approprié, traduction multiligne sur une ligne dans Twig:
var javascriptVariable = "This is a multi line translation.";
Pour les situations où la chaîne peut contenir des espaces ou non, je préfère les guillemets doubles et la continuation de ligne avec des barres obliques inverses:
key: "String \
with long c\
ontent"
Mais notez le piège dans le cas où une ligne de continuation commence par un espace, elle doit être échappée (car elle sera supprimée ailleurs):
key: "String\
\ with lon\
g content"
Si la chaîne contient des sauts de ligne, vous devez l'écrire dans le style C \n
.
Voir aussi cette question .
Aucune des solutions ci-dessus n'a fonctionné pour moi, dans un fichier YAML dans un projet Jekyll. Après avoir essayé de nombreuses options, je me suis rendu compte qu'une injection HTML avec <br>
pourrait également être utile, car à la fin, tout est rendu au format HTML:
name: |
Dans un village de La Mancha <br>
dont je ne retiens le nom <br>
.
Au moins ça marche pour moi. Aucune idée sur les problèmes associés à cette approche.