Guía
Cadenas multilínea en YAML: diferencias entre | y >
Entiende los bloques literal y plegado de YAML, los indicadores de chomping y cómo conservar o unir saltos de línea.
por Tools in a Tab · Publicado el · Actualizada
Respuesta breve
En YAML, | crea un bloque literal y conserva los saltos de línea del
contenido. > crea un bloque plegado y convierte la mayoría de los saltos
simples en espacios, aunque conserva separaciones de párrafo y bloques más
indentados. Los sufijos - y + controlan los saltos finales.
|: bloque literal
Este YAML:
mensaje: |
primera línea
segunda línea
representa conceptualmente:
{ "mensaje": "primera línea\nsegunda línea\n" }
Es adecuado para scripts, certificados, fragmentos de configuración o texto en el que cada línea tiene significado. La sangría común se elimina del valor; no forma parte de la cadena.
>: bloque plegado
Con el indicador plegado:
mensaje: >
primera línea
segunda línea
el valor habitual es:
{ "mensaje": "primera línea segunda línea\n" }
Resulta útil para párrafos largos que quieres dividir en el archivo sin
introducir un salto lógico en cada línea. Una línea vacía mantiene la separación
entre párrafos, y una línea con más indentación tiene reglas distintas; por eso
> no equivale a reemplazar ciegamente todos los \n por espacios.
Puedes observar el resultado exacto con el
conversor YAML a JSON. El conversor acepta el
subconjunto YAML 1.2 representable en JSON y muestra los saltos como escapes
\n dentro de la cadena resultante.
Sufijos -, sin sufijo y +
El indicador de chomping decide qué ocurre al final del bloque:
| Forma | Comportamiento final |
|---|---|
|- o >- |
Elimina los saltos finales |
| o > |
Conserva un salto final en un bloque no vacío |
|+ o >+ |
Conserva todos los saltos finales |
Por ejemplo, |- es frecuente cuando el valor no debe terminar en nueva
línea. |+ solo conviene cuando varios saltos finales son parte real del dato.
Comparar las seis formas con su salida exacta
Pega este ejemplo completo en el
conversor YAML a JSON. Cada bloque tiene una
línea vacía después de su segunda línea de contenido. Consérvalas al copiar;
la clave final fin delimita expresamente el último bloque.
literal_strip: |-
primera línea
segunda línea
literal_clip: |
primera línea
segunda línea
literal_keep: |+
primera línea
segunda línea
folded_strip: >-
primera línea
segunda línea
folded_clip: >
primera línea
segunda línea
folded_keep: >+
primera línea
segunda línea
fin: true
El JSON resultante es:
{
"literal_strip": "primera línea\nsegunda línea",
"literal_clip": "primera línea\nsegunda línea\n",
"literal_keep": "primera línea\nsegunda línea\n\n",
"folded_strip": "primera línea segunda línea",
"folded_clip": "primera línea segunda línea\n",
"folded_keep": "primera línea segunda línea\n\n",
"fin": true
}
El escape JSON \n representa un carácter de salto de línea en el valor.
Literal o plegado decide qué ocurre entre las dos líneas; strip, clip y keep
controlan por separado los saltos finales. Estas salidas corresponden a los
bloques no vacíos del ejemplo: un bloque vacío no gana texto ni un salto solo
por usar |.
Indentación y errores habituales
El contenido debe comenzar más adentro que la clave. YAML suele detectar la
indentación a partir de la primera línea no vacía; también permite indicar una
profundidad explícita en casos especiales, como |2. No la añadas si no hace
falta.
- Usa
|cuando los saltos son datos y>cuando las líneas forman un párrafo. - No confundas el guion de
|-con un elemento de lista. - Comprueba el carácter final si el consumidor compara firmas, plantillas o comandos literalmente.
- Revisa espacios adicionales: una línea más indentada puede dejar de plegarse.
La especificación YAML 1.2.2 define los estilos literal y plegado, y documenta por separado los indicadores de chomping. Convierte y compara el valor resultante cuando cada byte importe.