En YAML, tengo una cadena que es muy larga. Quiero mantener esto dentro de la vista de 80 columnas (más o menos) de mi editor, por lo que me gustaría romper la cadena. ¿Cuál es la sintaxis para esto?
En otras palabras, tengo esto:
Key: 'this is my very very very very very very long string'
y me gustaría tener esto (o algo por el estilo):
Key: 'this is my very very very ' +
'long string'
Me gustaría usar comillas como las anteriores, por lo que no necesito escapar de nada dentro de la cadena.
{{- 'key'|trans -}}
tampoco funcionaHay
56NUEVE (o 63 *, dependiendo de cómo cuente) diferentes formas de escribir cadenas de varias líneas en YAML.TL; DR
Por lo general, quieres
>
:Si desea que los saltos de línea se conserven como
\n
en la cadena (por ejemplo, marcado incrustado con párrafos), use|
.Use
>-
o|-
en su lugar si no desea que se agregue un salto de línea al final.Si necesita dividir líneas en el medio de las palabras o literalmente escribir saltos de línea como
\n
, use comillas dobles en su lugar:YAML está loco.
Bloquear estilos escalares (
>
,|
)Estos permiten caracteres como
\
y"
sin escapar, y agregan una nueva línea (\n
) al final de su cadena.>
El estilo plegado elimina las nuevas líneas individuales dentro de la cadena (pero agrega una al final y convierte las nuevas líneas dobles en simples):→
this is my very very very long string\n
|
El estilo literal convierte cada nueva línea dentro de la cadena en una nueva línea literal y agrega una al final:→
this is my very very very\nlong string\n
Aquí está la definición oficial de la especificación YAML 1.2
Estilos de molde con el indicador masticando bloque (
>-
,|-
,>+
,|+
)Puede controlar el manejo de la nueva línea final en la cadena, y cualquier línea en blanco final (
\n\n
) agregando un carácter indicador de bloqueo de bloques :>
,|
: "clip": mantenga el avance de línea, elimine las líneas en blanco al final.>-
,|-
: "strip": elimina el avance de línea, elimina las líneas en blanco finales.>+
,|+
: "keep": mantiene el avance de línea, sigue las líneas en blanco."Flujo" estilos escalares (
,
"
,'
)Estos tienen escapes limitados y construyen una cadena de una sola línea sin nuevos caracteres de línea. Pueden comenzar en la misma línea que la tecla, o con nuevas líneas adicionales primero.
estilo simple (sin escape, sincombinaciones
#
osin:
límites, en el primer carácter):estilo entre comillas dobles (
\
y"
debe\
evitarse, las líneas nuevas se pueden insertar con una\n
secuencialiteral, las líneas se pueden concatenar sin espacios con el final\
):→
"this is my very very \"very\" loooong string.\n\nLove, YAML."
Estilo entre comillas simples (el literal
'
debe duplicarse, sin caracteres especiales, posiblemente útil para expresar cadenas que comiencen con comillas dobles):→
"this is my very very \"very\" long string, isn't it."
Resumen
En esta tabla,
_
significaspace character
.\n
significa "carácter de línea nueva" (\n
en JavaScript), a excepción de la fila "líneas nuevas en línea", donde significa literalmente una barra diagonal inversa y una n).Ejemplos
Tenga en cuenta los espacios finales en la línea antes de "espacios".
Bloquear estilos con indicadores de sangría
En caso de que lo anterior no sea suficiente para usted, puede agregar un " indicador de sangría de bloque " (después de su indicador de bloqueo de bloque, si tiene uno):
Apéndice
Si inserta espacios adicionales al comienzo de las primeras líneas en estilo Doblado, se mantendrán, con una nueva línea de bonificación. Esto no sucede con los estilos de flujo:
→
["my long\n string\n", "my long string"]
Ni siquiera puedo.
*
2 estilos de bloque, cada uno con 2 posibles indicadores de bloqueo de bloque (o ninguno), y con 9 posibles indicadores de sangría (o ninguno), 1 estilo simple y 2 estilos entre comillas: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63Parte de esta información también se ha resumido aquí .
fuente
"..." + "..."
en la mayoría de los lenguajes de programación, o barra diagonal inversa antes de la nueva línea en Bash.:
dentro de una cadena en una matriz de cadenas hace que YAML lo interprete como una matriz de objetos. Viola el principio del menor asombro .Para preservar el uso de líneas nuevas
|
, por ejemplo:se traduce a "Esta es una oración muy larga \ n que abarca varias líneas en YAML \ n pero que se representará como una cadena \ n con líneas nuevas preservadas. \ n "
fuente
|
en cada línea, por razones que no me resultan obvias: groups.google.com/forum/#!topic/pandoc-discuss/xuqEmhWgf9Acat
con delimitador, esto hace que se agreguen espacios iniciales (que son necesarios para YAML) a la salida.1. Notación de bloque (simple, estilo de flujo, escalar): las nuevas líneas se convierten en espacios y nuevas líneas adicionales después de eliminar el bloque
JSON equivalente
2. Escalar de bloque literal: un escalar de bloque literal |incluirá las nuevas líneas y los espacios finales. pero elimina extra
nuevas líneas después del bloque.
JSON equivalente
3. + indicador con Escalar de bloque literal: mantenga nuevas líneas adicionales después del bloqueo
JSON equivalente
4. - indicador con Escalar de bloque literal: - significa que se elimina la nueva línea al final de la cadena.
JSON equivalente
5. Escalar de bloque plegado (>):
plegará nuevas líneas a espacios y eliminará nuevas líneas adicionales después del bloque.
JSON equivalente
para más puedes visitar mi Blog
fuente
Puede que no lo creas, pero YAML también puede hacer teclas de varias líneas:
fuente
key:value
, pero si su clave contiene nueva línea, puede hacerlo como se describió anteriormente?
es el indicador clave (como en la clave de una asignación). En muchas situaciones, puede omitir el indicador clave, cuando el indicador de valor (requerido):
después de la clave hace que el análisis no sea ambiguo. Pero ese no es el caso, tendrá que usar esto para marcar explícitamente la clave.Para concatenar líneas largas sin espacios en blanco , use comillas dobles y escape de las líneas nuevas con barras invertidas:
(Gracias @Tobia)
fuente
En caso de que esté usando YAML y Twig para traducciones en Symfony, y quiera usar traducciones de varias líneas en Javascript, se agrega un retorno de carro justo después de la traducción. Entonces, incluso el siguiente código:
var javascriptVariable = "{{- 'key'|trans -}}";
Que tiene la siguiente traducción yml:
Seguirá dando como resultado el siguiente código en html:
Entonces, el signo menos en Twig no resuelve esto. La solución es agregar este signo menos después del signo mayor que en yml:
Tendrá el resultado adecuado, traducción de varias líneas en una línea en Twig:
fuente
Para situaciones en las que la cadena puede contener espacios o no, prefiero las comillas dobles y la continuación de línea con barras invertidas:
Pero tenga en cuenta sobre el peligro para el caso de que una línea de continuación comienza con un espacio, debe escaparse (porque se eliminará en otro lugar):
Si la cadena contiene saltos de línea, esto debe escribirse en estilo C
\n
.Ver también esta pregunta .
fuente
Ninguna de las soluciones anteriores funcionó para mí, en un archivo YAML dentro de un proyecto Jekyll. Después de probar muchas opciones, me di cuenta de que una inyección HTML con
<br>
podría funcionar, ya que al final todo se procesa en HTML:nombre:
|
en un pueblo de La Mancha<br>
cuyo nombre no sé<br>
quiero recordar.Al menos me funciona. No tengo idea de los problemas asociados a este enfoque.
fuente