2045 votes

Comment casser une chaîne dans YAML 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 ça :

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, afin de ne pas avoir à échapper quoi que ce soit dans la chaîne.

2 votes

Conseil rapide : vous ne peut pas placer de commentaire à l'intérieur d'un scalaire Vous ne pouvez donc pas commenter une partie de la clé ou de la valeur multiligne. Vous devez déplacer les lignes requises hors de la déclaration. stackoverflow.com/questions/20890445/

48voto

Mohsen Points 16856

Vous ne le croirez peut-être pas, mais YAML peut aussi faire des touches multi-lignes :

?
 >
 multi
 line
 key
:
  value

7 votes

Explication nécessaire (que signifie " ?").

0 votes

@ilyaigpetrov exactement comme écrit, touche "multi-ligne". Habituellement, vous faites des choses comme key:value mais si votre clé contient des nouvelles lignes, vous pouvez le faire comme décrit ci-dessus.

6 votes

Avez-vous un exemple d'un cas réel d'utilisation de ce système ?

19voto

Rvanlaak Points 132

Dans le cas où vous utilisez YAML et Twig pour les traductions dans Symfony, et que vous souhaitez utiliser des traductions multi-lignes 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 :

key: >
    This is a
    multi line 
    translation.

Le résultat sera toujours le code suivant en html :

var javascriptVariable = "This is a multi line translation.
";

Ainsi, le signe moins dans Twig ne résout pas ce problème. La solution est d'ajouter ce signe moins après le signe plus grand que dans yml :

key: >-
    This is a
    multi line 
    translation.

Vous obtiendrez le bon résultat, une traduction multi-lignes sur une ligne dans Twig :

var javascriptVariable = "This is a multi line translation.";

0 votes

Cela ressemble à un bug. Avez-vous eu l'occasion de remplir un rapport de bogue ?

10voto

Joe Points 1350

Pour les situations où la chaîne de caractères peut contenir des espaces ou non, je préfère les guillemets doubles et la continuation de la ligne avec des backslashes :

key: "String \
  with long c\
  ontent"

Mais attention à l'écueil dans le cas où une ligne de continuation commence par un espace, il faut l'échapper (car il sera supprimé ailleurs) :

key: "String\
  \ with lon\
  g content"

Si la chaîne de caractères contient des sauts de ligne, il faut l'écrire en style C. \n .

Voir aussi cette question .

0 votes

S'il est dépouillé ailleurs Si vous n'êtes pas dans cette position, pouvez-vous mettre à jour votre réponse avec des informations sur les points suivants ? il sera dépouillé. Veuillez également indiquer quel analyseur (pour quelle langue) fait cela ? Je n'ai vu que des analyseurs qui suppriment les espaces avant/arrière dans les chaînes de guillemets multilignes. en place .

-2voto

Irene Points 527

Aucune des solutions ci-dessus n'a fonctionné pour moi, dans un fichier YAML au sein d'un projet Jekyll. Après avoir essayé de nombreuses options, je me suis rendu compte qu'une injection HTML avec <br> pourrait également faire l'affaire, puisqu'au final tout est rendu en HTML :

nom : | Dans un village de La Mancha <br> dont je ne connais pas le nom <br> veulent se souvenir.

En tout cas, cela fonctionne pour moi. Aucune idée des problèmes liés à cette approche.

3 votes

Votre solution renvoie à un problème différent : dans votre cas, vous voulez que des sauts de ligne apparaissent dans le rendu HTML à la suite du traitement de YAML. HTML et YAML n'ont pas de relation implicite l'un avec l'autre. Et même si YAML acceptait des sauts de ligne réguliers, HTML les ignorerait. En fin de compte, la question de l'op est liée à l'utilisation de sauts de ligne dans YAML lui-même, juste pour éviter les très longues lignes. Il ne se soucie pas de la façon dont les données peuvent être rendues à la fin. Pourquoi dire cela ? Parce que cela explique pourquoi toutes les autres solutions proposées ici ne fonctionnent pas dans votre cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X