Détails
Comment répartir une chaîne de caractères sur plusieurs lignes ?
Dans YAML, j'ai une chaîne de caractères qui est très longue. Je veux la conserver dans la vue de 80 colonnes (environ) de mon éditeur, et j’aimerais donc casser 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 de ce genre) :
Key: 'this is my very very very ' +
'long string'
J'aimerais utiliser les guillemets comme ci-dessus, de manière à ne pas avoir besoin d'échapper quoi que ce soit dans la chaîne.
1373
3
Il existe 5 6 NINE (ou 63*, selon la façon dont on compte) différentes façons d'écrire des chaînes de caractères multi-lignes dans YAML.
TL;DR
Habituellement, vous voulez
>
:Si vous voulez que les sauts de ligne soient préservés sous forme de
n
dans la chaîne (par exemple, markdown intégré avec des paragraphes), utilisez|
.Utilisez plutôt
>-
ou|-
si vous ne voulez pas qu'un saut de ligne soit ajouté à la fin.Si vous devez couper des lignes au milieu d'un mot ou si vous tapez littéralement des sauts de ligne comme
\n
, utilisez plutôt des guillemets doubles :YAML est fou.
Bloquer les styles scalaires (
>
,|
)Ces styles autorisent les caractères tels que
\
et"
sans les échapper, et ajoutent une nouvelle ligne (\n
) à la fin de votre chaîne.>
Style plié supprime les nouvelles lignes simples dans la chaîne (mais en ajoute une à la fin, et convertit les doubles lignes en simples) :→
c'est ma très très très longue chaîne de caractères\n
|
Style littéral transforme chaque nouvelle ligne de la chaîne en une nouvelle ligne littérale, et en ajoute une à la fin :→
C'est ma très très très\nlongue chaîne de caractères\n
Voici la définition officielle de la [YAML Spec 1.2] (http://www.yaml.org/spec/1.2/spec.html#id2760844)
Styles de bloc avec indicateur d'écrasement de bloc (
>-
,|-
,>+
,|+
)Vous pouvez contrôler le traitement de la dernière nouvelle ligne de la chaîne et de toute ligne vide de fin (
\n\n
) en ajoutant un caractère indicateur de fragmentation de bloc :>
,|
: "clip" : conserve le saut de ligne, supprime les lignes vides de fin de ligne.>-
,|-
: "strip" : supprime le saut de ligne, supprime les lignes vides de fin de ligne.>+
,|+
: "keep" : conserve le saut de ligne, conserve les lignes vides de fin de ligne.Styles scalaires "Flow" (
`,
",
'`)Ils ont un échappement limité, et construisent une chaîne de caractères d'une seule ligne sans caractères de nouvelle ligne. Ils peuvent commencer sur la même ligne que la clé, ou avec des nouvelles lignes supplémentaires en premier.
plain style (pas d'échappement, pas de combinaisons
#
ou:
, limites sur le premier caractère) :style à double guillemet (les caractères
\
et"
doivent être échappés par\
, les sauts de ligne peuvent être insérés avec une séquence littérale\n
, les lignes peuvent être concaténées sans espace avec\
de fin) :&rarr ;
"Ceci est ma très très \"très\" longue chaîne.\n\nLove, YAML."
style guillemets simples (le littéral
'
doit être doublé, pas de caractères spéciaux, éventuellement utile pour exprimer des chaînes de caractères commençant par des guillemets doubles) :&rarr ;
C'est ma très très longue chaîne de caractères, n'est-ce pas?
Résumé
Dans ce tableau,
_
signifiecaractère d'espace
.n` signifie `caractère de nouvelle ligne
(n
en JavaScript), sauf pour la lignenouvelles en ligne
, où il signifie littéralement une barre oblique inverse et un n).Exemples
Notez les espaces de queue sur la ligne précédant "spaces. "
Styles de blocs avec indicateurs d'indentation
Au cas où ce qui précède ne vous suffirait pas, vous pouvez ajouter un "indicateur d'indentation des blocs" (après votre indicateur d'indentation des blocs, si vous en avez un) :
Addendum
Si vous insérez des espaces supplémentaires au début des lignes qui ne sont pas les premières dans le style plié, ils seront conservés, avec une nouvelle ligne supplémentaire. Cela ne se produit pas avec les styles de flux :
→
["my long\n string\n", "my long string"]
.Je ne peux même pas.
``2 styles de bloc, chacun avec 2 indicateurs de bloc possibles (ou aucun), et avec 9 indicateurs d'indentation possibles (ou aucun), 1 style simple et 2 styles cités : 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63*
Certaines de ces informations ont également été résumées [ici] (http://yaml-multiline.info/).
En utilisant le style plié de yaml, chaque saut de ligne est remplacé par un espace. L'indentation dans chaque ligne sera ignorée. Un saut de ligne sera inséré à la fin.
http://symfony.com/doc/current/components/yaml/yaml_format.html
Vous pouvez utiliser l'indicateur "block chomping" pour éliminer le retour à la ligne, comme suit :
D'autres outils de contrôle sont également disponibles (pour contrôler l'indentation par exemple).
Voir https://yaml-multiline.info/
Pour préserver les nouvelles, utilisez
|
, par exemple :se traduit par "C'est une très longue phrase\n qui s'étend sur plusieurs lignes dans le YAML\n mais qui sera rendue sous forme de chaîne\n avec les nouvelles lignes préservées.\n"