En YAML, comment puis-je rompre une chaîne de caractères sur plusieurs lignes?
En YAML, j'ai une chaîne qui est très très long. Je veux garder présent à l'intérieur de la colonne 80 (ou les) vue de mon éditeur, donc je voudrais briser 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 je voudrais avoir cette (ou quelque chose à cet effet):
Key: 'this is my very very very ' +
'long string'
J'aimerais utiliser des guillemets comme ci-dessus, je n'ai pas besoin d'échapper à quoi que ce soit dans la chaîne.
Vous devez vous connecter pour publier un commentaire.
À l'aide de yaml style plié, chaque saut de ligne est remplacé par un espace. Le renfoncement dans chaque ligne sera ignoré. Un saut de ligne sera insérée à la fin.
http://symfony.com/doc/current/components/yaml/yaml_format.html
Vous pouvez utiliser le "bloc partant de l'indicateur" pour éliminer la fuite de saut de ligne, comme suit:
Il existe d'autres outils de contrôle disponibles (pour le contrôle de l'indentation par exemple).
Voir https://yaml-multiline.info/
>
déduit que c'est une chaîne.{{ - 'key'|trans - }}
ne fonctionne pas non plus.\n
à la fin de la chaîne. Cela peut ou peut ne pas être ce que vous cherchez.>-
Key: > string
ouKey >
chaîne ou quoi?Il y a
56NEUF (ou 63*, selon la façon de compter) les différentes façons d'écrire plusieurs lignes de chaînes en YAML.TL;DR
Habituellement, vous voulez
>
:Si vous voulez que les retours à la ligne (pour être conservé comme
\n
dans la chaîne (par exemple, intégré démarque avec des paragraphes), l'utilisation|
.Utilisation
>-
ou|-
à la place si vous ne voulez pas un saut de ligne ajoutée à la fin.Si vous avez besoin de lignes de séparation dans le milieu des mots ou littéralement type de retours à la ligne (comme
\n
, utilisez les guillemets à la place:YAML est fou.
Bloc scalaire styles (
>
,|
)Ceux-ci permettent à des personnages comme
\
et"
sans s'échapper, et ajouter une nouvelle ligne (\n
) à la fin de votre chaîne.>
Style plié supprime les retours à la ligne unique au sein de la chaîne (mais s'y ajoute à la fin, et la convertit en double retours à la ligne pour les célibataires):→
this is my very very very long string\n
|
Style littéral transforme chaque saut de ligne à l'intérieur de la chaîne dans un littéral de retour à la ligne, et ajoute à la fin:→
this is my very very very\nlong string\n
Voici la définition officielle de l' YAML Spec 1.2
Bloc de styles avec bloc partant de l'indicateur (
>-
,|-
,>+
,|+
)Vous pouvez contrôler la gestion de la version définitive de la nouvelle ligne à la corde, et toute fuite des lignes vides (
\n\n
) par l'ajout d'un bloc partant de l'indicateur caractère:>
,|
: "clip": maintenir la ligne d'alimentation, supprimer la fin des lignes vides.>-
,|-
: "la bande": supprimer le saut de ligne, supprimer la fin des lignes vides.>+
,|+
: "garder": maintenir la ligne d'alimentation, garder de fuite des lignes vides."Flux" scalaire styles (
,
"
,'
)Ceux-ci ont limité leur fuite, et de construire une ligne de chaîne à n caractères de nouvelle ligne. Ils peuvent commencer sur la même ligne que la clé, ou avec d'autres retours à la ligne en premier.
style ordinaire (pas de fuite, pas de
#
ou:
combinaisons, des limites sur le premier caractère):double-cité de style (
\
et"
doivent être échappés par\
, les nouvelles lignes peuvent être insérées avec un littéral\n
séquence, les lignes peuvent être concaténés, sans espaces, avec fuite de\
):→
"this is my very very \"very\" loooong string.\n\nLove, YAML."
une seule cité de style (littérale
'
doit être doublé, pas de caractères spéciaux, peut être utile pour exprimer les chaînes de caractères commençant avec les guillemets):→
"this is my very very \"very\" long string, isn't it."
Résumé
Dans ce tableau,
_
signifiespace character
.\n
signifie "caractère de saut de ligne" (\n
en JavaScript), sauf pour le "en-ligne des retours à la ligne sur la ligne", où il signifie littéralement une barre oblique et un n).Exemples
Note les espaces à droite sur la ligne avant "des espaces."
Bloc de styles d'indentation indicateurs
Juste au cas ci-dessus n'est pas assez pour vous, vous pouvez ajouter un "l'indentation d'un bloc indicateur" (après votre bloc partant de l'indicateur, si vous en avez un):
Additif
Si vous insérez des espaces supplémentaires au début de ne pas les premières lignes dans le style Plié, ils seront conservés, avec un bonus de saut de ligne. Ce n'est pas le cas avec les styles de flux:
→
["my long\n string\n", "my long string"]
Je ne peux même pas.
*
2 bloc de styles, chacun avec 2 bloc possible partant des indicateurs (ou aucun), et avec 9 possible indentation indicateurs (ou aucun), 1 style ordinaire et 2, cité styles: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63Partie de cette information a également été résumées ici.
|2+
permettra de préserver des espaces au début de la ligne qui dépassent les 2 espaces.>-
ne pas supprimer tous les retours à la ligne. Nous sommes passés à un "bon style" dépassement et qui fait ce que nous avons besoin."..." + "..."
dans la plupart des langages de programmation, ou barre oblique inverse avant de saut de ligne dans le Bash.pyyaml
apparaît pour conserver les retours à la ligne sur>
style de chaînes de caractères :\ j'ai fini par échapper aux retours à la ligne par des barres obliques inverses:
au sein d'une chaîne dans un tableau de chaînes de fait YAML l'interpréter comme un tableau d'objets. Il viole la principe de moindre étonnement.Example: data:text/plain;base64,dGVzdDogImZvb1wKICBiYXIiCg==
>1
ou|1
, puis certains de l'indentation sera conservé. Par exemple, si le>
est dans la 3ème colonne (en retrait de deux espaces) puis X-3 caractères de l'indentation sera conservé.Pour préserver retours à la ligne utilisation
|
, par exemple:est traduit par "C'est une phrase très longue\n qui s'étend sur plusieurs lignes dans le fichier YAML\n mais qui sera rendu par une chaîne\n avec des sauts de ligne préservés.\n"
|
sur chaque ligne, pour des raisons qui ne sont pas évidentes pour moi: groups.google.com/forum/#!topic/pandoc-discuter/xuqEmhWgf9Acat
avec séparateur ce qui provoque les espaces (qui sont nécessaires pour YAML) pour être ajouté à la sortie.echo -e $CONFIG | awk '{$1=$1};1'
va supprimer de fuite et les espaces1. Bloc de Notation: nouvelles lignes devenues des espaces et des sauts de ligne supplémentaires après le bloc sont supprimés
Équivalent JSON
2. Block littéral Scalaire: Un Littéral Bloc Scalaire | comprendra les sauts de ligne et les espaces de fin. mais supprime supplémentaire
retours à la ligne après le bloc.
Équivalent JSON
3. + indicateur avec Littérale Bloc Scalaire: conserver un surplus de retours à la ligne après le blocage
Équivalent JSON
4. – indicateur avec Littérale Bloc Scalaire: – signifie que le saut de ligne à la fin de la chaîne est supprimée.
Équivalent JSON
5. Plié Bloc Scalaire(>):
se plier aux espaces, retours à la ligne, mais supprime supplémentaire des retours à la ligne après le bloc.
Équivalent JSON
de plus, vous pouvez consulter mon blog
Vous pourriez ne pas le croire, mais YAML peut faire multi-touches de ligne trop:
key:value
, mais si votre clé contient des nouveaux en ligne, vous pouvez le faire comme décrit ci-dessus?
est l'indicateur clé (clés dans un mapping). Dans de nombreuses situations, vous pouvez laisser la clé indicateur, lorsque la (nécessaire) de la valeur de l'indicateur:
après que la clé fait l'analyse sans équivoque. Mais ce n'est pas le cas, vous allez avoir à utiliser pour marquer explicitement la clé.Pour concaténer les longues lignes sans les espaces, l'utilisation des guillemets et de fuir les retours à la ligne avec des barres obliques inverses:
(Merci @Tobia)
Dans le cas où vous êtes en utilisant yml et de Rameaux pour les traductions dans Symfony, et que vous voulez utiliser multi-ligne les traductions en Javascript, un retour chariot est ajouté juste après la traduction. Ainsi, même le code suivant:
var javascriptVariable = "{{ - 'key'|trans - }}";
A la suivante yml traduction:
Produira toujours dans le code suivant dans le html:
Donc, le signe moins dans Twig ne permet pas de résoudre ce problème. La solution est d'ajouter ce signe moins après le signe supérieur dans yml:
Aura le bon résultat, multi-ligne traduction sur une seule ligne dans Twig:
Pour les situations étaient la chaîne peut contenir des espaces ou pas, je préfère les guillemets doubles et de continuation de ligne avec des barres obliques inverses:
Mais remarque à propos de l'écueil pour le cas d'un prolongement de la ligne commence par un espace, il doit être échappés (car il sera dépouillé ailleurs):
Si la chaîne contient des sauts de ligne, ce doit être écrit en C style
\n
.Voir aussi cette question.
Aucune des deux solutions n'a fonctionné pour moi, dans un fichier YAML dans un Jekyll projet. Après avoir essayé de nombreuses options, j'ai réalisé qu'un HTML injection avec
<br>
pourrait faire aussi bien, car à la fin tout est rendu au format HTML:nom:
|
Dans un village de La Manche
<br>
dont le nom je n'ai pas<br>
voulez vous souvenir.Au moins il fonctionne pour moi. Aucune idée sur les problèmes liés à cette approche.