En YAML, tengo una cadena que es muy larga. Quiero mantenerlo dentro de la vista de 80 columnas (más o menos) de mi editor, así 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 parecido):
Key: 'this is my very very very ' +
'long string'
Me gustaría usar las comillas como en el caso anterior, para no tener que escapar nada dentro de la cadena.
Hay 5 6 Nueve (o 63*, según se cuente) formas diferentes de escribir cadenas de varias líneas en YAML.
Por lo general, usted quiere >
:
llave: >
Su larga
cadena aquí.
Si quieres que los saltos de línea se conserven como \n
en la cadena (por ejemplo, markdown incrustado con párrafos), utiliza |
.
clave: |
### Título
### Bullet
* Puntos
Utilice >-
o |-
si no desea que se añada un salto de línea al final.
Si necesita dividir las líneas en medio de las palabras o escribir literalmente los saltos de línea como \n
, utilice las comillas dobles en su lugar:
clave: "Antidisestab\
lishmentarianism.\n\nPonte a ello".
YAML es una locura.
>
, |
)Estos permiten caracteres como \
y "
sin escapar, y añaden una nueva línea (\n
) al final de su cadena.
>
Estilo doblado elimina las nuevas líneas simples dentro de la cadena (pero añade una al final, y convierte las nuevas líneas dobles en simples):
Key: >
this is my very very very
long string
→ esta es mi cadena muy muy larga\n
.
|
Estilo literal convierte cada nueva línea dentro de la cadena en una nueva línea literal, y añade una al final:
Key: |
this is my very very very
long string
→ "Esta es mi cadena muy muy larga".
Aquí está la definición oficial de la YAML Spec 1.2
Los contenidos escalares pueden escribirse en notación de bloque, utilizando un estilo literal (indicado por "|") donde todos los saltos de línea son significativos. Como alternativa, pueden escribirse con el estilo plegado (indicado por ">"), en el que cada salto de línea se pliega a un espacio a menos que termine una línea vacía o con más sangría.
>-
, |-
, >+
, |+
)Puede controlar el manejo de la última línea nueva en la cadena, y cualquier línea en blanco al final de la misma (\n\n
) añadiendo un carácter indicador de bloque:
>
, |
: "clip": mantiene el avance de línea, elimina las líneas en blanco finales.>-
, |-
: "strip": elimina el salto de línea, elimina las líneas en blanco finales.>+
, |+
: "keep": mantener el salto de línea, mantener las líneas en blanco.`,
",
'`)Tienen un escape limitado, y construyen una cadena de una sola línea sin caracteres de nueva línea. Pueden comenzar en la misma línea que la clave, o con nuevas líneas adicionales primero.
estilo simple (sin escape, sin combinaciones #
o :
, límites en el primer carácter):
Key: this is my very very very
long string
estilo de comillas dobles (y `"` deben escaparse con
, las nuevas líneas pueden insertarse con una secuencia literal \n
, las líneas pueden concatenarse sin espacios con `` al final):
Key: "this is my very very \"very\" loooo\
ng string.\n\nLove, YAML."
→ "esta es mi muy \"\Ncadena muy larga.\N-Amor, YAML".
estilo de comillas simples (el literal '
debe ser doble, sin caracteres especiales, posiblemente útil para expresar cadenas que comienzan con comillas dobles):
Key: 'this is my very very "very"
long string, isn''t it.'
→ `"esta es mi cadena muy muy larga, ¿verdad?
En esta tabla, _
significa carácter de espacio
. \n
significa "carácter de nueva línea" (\n
en JavaScript), excepto en la fila de "nuevas líneas", donde significa literalmente una barra invertida y una n).
> | " ' >- >+ |- |+
-------------------------|------|-----|-----|-----|------|------|------|------
Trailing spaces | Kept | Kept | | | | Kept | Kept | Kept | Kept
Single newline => | _ | \n | _ | _ | _ | _ | _ | \n | \n
Double newline => | \n | \n\n | \n | \n | \n | \n | \n | \n\n | \n\n
Final newline => | \n | \n | | | | | \n | | \n
Final dbl nl's => | | | | | | | Kept | | Kept
In-line newlines | No | No | No | \n | No | No | No | No | No
Spaceless newlines| No | No | No | \ | No | No | No | No | No
Single quote | ' | ' | ' | ' | '' | ' | ' | ' | '
Double quote | " | " | " | \" | " | " | " | " | "
Backslash | \ | \ | \ | \\ | \ | \ | \ | \ | \
" #", ": " | Ok | Ok | No | Ok | Ok | Ok | Ok | Ok | Ok
Can start on same | No | No | Yes | Yes | Yes | No | No | No | No
line as key |
*Nota los espacios finales en la línea antes de "spaces".
- >
very "long"
'string' with
paragraph gap, \n and
spaces.
- |
very "long"
'string' with
paragraph gap, \n and
spaces.
- very "long"
'string' with
paragraph gap, \n and
spaces.
- "very \"long\"
'string' with
paragraph gap, \n and
s\
p\
a\
c\
e\
s."
- 'very "long"
''string'' with
paragraph gap, \n and
spaces.'
- >-
very "long"
'string' with
paragraph gap, \n and
spaces.
[
"very \"long\" 'string' with\nparagraph gap, \\n and spaces.\n",
"very \"long\"\n'string' with\n\nparagraph gap, \\n and \nspaces.\n",
"very \"long\" 'string' with\nparagraph gap, \\n and spaces.",
"very \"long\" 'string' with\nparagraph gap, \n and spaces.",
"very \"long\" 'string' with\nparagraph gap, \\n and spaces.",
"very \"long\" 'string' with\nparagraph gap, \\n and spaces."
]
En caso de que lo anterior no sea suficiente para ti, puedes añadir un "indicador de indentación de bloque" (después de tu indicador de indentación de bloque, si tienes uno):
- >8
My long string
starts over here
- |+1
This one
starts here
Si inserta espacios adicionales al comienzo de líneas que no son las primeras en el estilo plegado, se mantendrán, con una nueva línea adicional. Esto no ocurre con los estilos fluidos:
- >
my long
string
- my long
string
→ ["mi cadena larga\n", "mi cadena larga"]
.
Ni siquiera puedo.
``2 estilos de bloque, cada uno con 2 posibles indicadores de picado de bloque (o ninguno), y con 9 posibles indicadores de sangría (o ninguno), 1 estilo llano y 2 estilos entrecomillados: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63*
Parte de esta información también se ha resumido aquí.
Utilizando el estilo plegado yaml, cada salto de línea se sustituye por un espacio. La sangría en cada línea será ignorada. Se insertará un salto de línea al final.
Key: >
This is a very long sentence
that spans several lines in the YAML
but which will be rendered as a string
with only a single carriage return appended to the end.
http://symfony.com/doc/current/components/yaml/yaml_format.html
Para eliminar el salto de línea final se puede utilizar el "indicador de rotura de bloque", como se indica a continuación:
Key: >-
This is a very long sentence
that spans several lines in the YAML
but which will be rendered as a string
with NO carriage returns.
También hay otras herramientas de control (para controlar la sangría, por ejemplo).
Para conservar las nuevas líneas utilice |
, por ejemplo:
|
This is a very long sentence
that spans several lines in the YAML
but which will be rendered as a string
with newlines preserved.
se traduce como "Esta es una frase muy largan que abarca varias líneas en el YAMLn pero que se renderizará como una cadenan con las nuevas líneas preservadas.\n"