En YAML, j'ai une chaîne très longue. Je veux garder cela dans la vue de 80 colonnes (ou plus) de mon éditeur, donc je voudrais 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 à cet effet):
Key: 'this is my very very very ' +
'long string'
Je voudrais utiliser des guillemets comme ci-dessus, donc je n'ai pas besoin d'échapper quoi que ce soit dans la chaîne.
{{- 'key'|trans -}}
ne fonctionne pas non plus.Il y a
56NEUF (ou 63 *, selon la façon dont vous comptez) différentes façons d'écrire des chaînes multilignes en YAML.TL; DR
En général, vous voulez
>
:Si vous souhaitez que les sauts de ligne soient conservés comme
\n
dans la chaîne (par exemple, démarque intégrée avec des paragraphes), utilisez|
.Utilisez
>-
ou à la|-
place si vous ne souhaitez pas ajouter de saut de ligne à la fin.Si vous devez fractionner des lignes au milieu des mots ou taper littéralement des sauts de ligne comme
\n
, utilisez plutôt des guillemets:YAML est fou.
Bloquer les styles scalaires (
>
,|
)Ceux-ci autorisent les caractères tels que
\
et"
sans s'échapper, et ajoutent une nouvelle ligne (\n
) à la fin de votre chaîne.>
Le style plié supprime les sauts de ligne simples dans la chaîne (mais en ajoute un à la fin et convertit les doubles sauts de ligne en simples):→
this is my very very very long string\n
|
Le style littéral transforme chaque nouvelle ligne de la chaîne en une nouvelle ligne littérale et en ajoute une à la fin:→
this is my very very very\nlong string\n
Voici la définition officielle de la spécification YAML 1.2
Styles de bloc avec bloc indicateur chomping (
>-
,|-
,>+
,|+
)Vous pouvez contrôler le traitement de la nouvelle ligne finale de la chaîne et de toutes les lignes vides de fin (
\n\n
) en ajoutant un caractère indicateur de hachage de bloc :>
,|
: "clip": conservez le saut de ligne, supprimez les lignes vierges de fin.>-
,|-
: "strip": supprimez le saut de ligne, supprimez les lignes vierges de fin.>+
,|+
: "garder": garder le saut de ligne, garder les lignes vides à la fin.Styles scalaires "Flow" (
,
"
,'
)Ceux-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 clé, ou avec des retours à la ligne supplémentaires en premier.
style simple (pas d'échappement, non
#
ou:
combinaisons, limites sur le premier caractère):style entre guillemets (
\
et"
doit être échappé par\
, les sauts de ligne peuvent être insérés avec une\n
séquencelittérale, les lignes peuvent être concaténées sans espaces avec des espaces\
):→
"this is my very very \"very\" loooong string.\n\nLove, YAML."
style guillemet simple (le littéral
'
doit être doublé, pas de caractères spéciaux, peut-être utile pour exprimer des chaînes commençant par des guillemets doubles):→
"this is my very very \"very\" long string, isn't it."
Sommaire
Dans ce tableau,
_
signifiespace character
.\n
signifie "caractère de nouvelle ligne" (\n
en JavaScript), à l'exception de la ligne "nouvelles lignes en ligne", où il signifie littéralement une barre oblique inverse et un n).Exemples
Notez les espaces de fin sur la ligne avant «espaces».
Styles de bloc avec indicateurs d'indentation
Juste au cas où ce qui précède ne vous suffit pas, vous pouvez ajouter un " indicateur d'indentation de bloc " (après votre indicateur de blocage de bloc, si vous en avez un):
Addenda
Si vous insérez des espaces supplémentaires au début des lignes qui ne sont pas les premières dans le style Plié, elles seront conservées, avec une nouvelle ligne bonus. 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 compression 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 = 63Certaines de ces informations ont également été résumées ici .
la source
"..." + "..."
dans la plupart des langages de programmation, ou une barre oblique inverse avant la nouvelle ligne dans Bash.:
dans une chaîne dans un tableau de chaînes fait que YAML l'interprète comme un tableau d'objets. Il viole le principe du moindre étonnement .Pour conserver les sauts de ligne, utilisez
|
par exemple:est traduit par "Ceci 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 des retours à la ligne préservés. \ n "
la source
|
sur chaque ligne, pour des raisons qui ne me paraissentcat
avec délimiteur, cela entraîne l'ajout d'espaces de début (qui sont nécessaires pour YAML) à la sortie.1. Notation de bloc (simple, de style fluide, scalaire): les nouvelles lignes deviennent des espaces et des nouvelles lignes supplémentaires après la suppression du bloc
JSON équivalent
2. Scalaire bloc littéral: Un scalaire bloc littéral | comprendra les sauts de ligne et les espaces de fin. mais supprime extra
nouvelles lignes après le bloc.
JSON équivalent
3. + indicateur avec Literal Block Scalar: gardez les nouvelles lignes supplémentaires après le bloc
JSON équivalent
4. - indicateur avec Literal Block Scalar: - signifie que la nouvelle ligne à la fin de la chaîne est supprimée.
JSON équivalent
5. Bloc scalaire plié (>):
pliera les sauts de ligne en espaces et supprimera les sauts de ligne supplémentaires après le bloc.
JSON équivalent
pour plus vous pouvez visiter mon Blog
la source
Vous ne le croyez peut-être pas, mais YAML peut également utiliser des touches multi-lignes:
la source
key:value
, mais si votre clé contient une nouvelle ligne, vous pouvez le faire comme décrit ci-dessus?
est l'indicateur clé (comme dans la clé dans une cartographie). Dans de nombreuses situations, vous pouvez omettre l'indicateur clé, lorsque l'indicateur de valeur (requis):
après la clé rend l'analyse non ambiguë. Mais ce n'est pas le cas, vous devrez l'utiliser pour marquer explicitement la clé.Pour concaténer de longues lignes sans espace , utilisez des guillemets doubles et échappez aux nouvelles lignes avec des barres obliques inverses:
(Merci @Tobia)
la source
Si vous utilisez YAML et Twig pour des traductions dans Symfony et que vous souhaitez utiliser des traductions multilignes en Javascript, un retour chariot est ajouté juste après la traduction. Donc, même le code suivant:
var javascriptVariable = "{{- 'key'|trans -}}";
Qui a la traduction yml suivante:
Donnera toujours le code suivant en html:
Ainsi, le signe moins dans Twig ne résout pas ce problème. La solution consiste à ajouter ce signe moins après le signe supérieur à en yml:
Aura le bon résultat, la traduction multi-ligne sur une seule ligne dans Twig:
la source
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:
Mais notez l'écueil pour le cas où une ligne de continuation commence par un espace, elle doit être échappée (car elle sera supprimée ailleurs):
Si la chaîne contient des sauts de ligne, cela doit être écrit dans le style C
\n
.Voir aussi cette question .
la source
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 faire aussi bien, car au final tout est rendu en HTML:nom:
|
Dans un village de La Mancha<br>
dont je ne<br>
veux pas me souvenir du nom.Au moins ça marche pour moi. Aucune idée sur les problèmes liés à cette approche.
la source