No YAML, eu tenho uma string que é muito longa. Eu quero manter isso dentro da visualização de 80 colunas (mais ou menos) do meu editor, então eu gostaria de quebrar a string. Qual é a sintaxe para isso?
Em outras palavras, eu tenho o seguinte:
Key: 'this is my very very very very very very long string'
e eu gostaria de ter isso (ou algo nesse sentido):
Key: 'this is my very very very ' +
'long string'
Eu gostaria de usar aspas como acima, para não precisar escapar de nada dentro da string.
{{- 'key'|trans -}}
também não funciona.Existem
56NINE (ou 63 *, dependendo de como você conta) maneiras diferentes de escrever strings de várias linhas no YAML.TL; DR
Geralmente você deseja
>
:Se você deseja que as quebras de linha sejam preservadas como
\n
na seqüência de caracteres (por exemplo, descontos incorporados com parágrafos), use|
.Use
>-
ou|-
não, se você não quiser que uma quebra de linha seja anexada ao final.Se você precisar dividir linhas no meio das palavras ou digitar literalmente quebras de linha como
\n
, use aspas duplas:YAML é louco.
Bloquear estilos escalares (
>
,|
)Isso permite caracteres como
\
e"
sem escapar e adiciona uma nova linha (\n
) ao final da sua string.>
O estilo dobrado remove as novas linhas da cadeia (mas adiciona uma no final e converte as novas linhas em simples):→
this is my very very very long string\n
|
O estilo literal transforma cada nova linha da string em uma nova linha literal e adiciona uma no final:→
this is my very very very\nlong string\n
Aqui está a definição oficial do YAML Spec 1.2
Estilos de bloco com indicador mastigando bloco (
>-
,|-
,>+
,|+
)Você pode controlar o manuseio da nova linha final na string e de qualquer linha em branco à direita (
\n\n
) adicionando um caractere indicador de chomping de bloco :>
,|
: "clip": mantenha o avanço da linha, remova as linhas em branco à direita.>-
,|-
: "strip": remova a alimentação da linha, remova as linhas em branco à direita.>+
,|+
: "keep": mantém o avanço da linha, continua seguindo linhas em branco."Flow" escalares estilos (
,
"
,'
)Eles têm escape limitado e constroem uma cadeia de caracteres de linha única sem novos caracteres de linha. Eles podem começar na mesma linha que a chave ou com novas linhas adicionais primeiro.
estilo simples (sem escape, sem
#
ou:
combinações, limites para o primeiro caractere):estilo de aspas duplas (
\
e"
deve ser escapado por\
, novas linhas podem ser inseridas com uma\n
sequêncialiteral, linhas podem ser concatenadas sem espaços com final\
):→
"this is my very very \"very\" loooong string.\n\nLove, YAML."
estilo de aspas simples (literal
'
deve ser duplicado, sem caracteres especiais, possivelmente útil para expressar cadeias começando com aspas duplas):→
"this is my very very \"very\" long string, isn't it."
Sumário
Nesta tabela,
_
significaspace character
.\n
significa "caractere de nova linha" (\n
em JavaScript), exceto a linha "novas linhas em linha", onde significa literalmente uma barra invertida e um n).Exemplos
Observe os espaços à direita na linha antes de "espaços".
Estilos de bloco com indicadores de indentação
Caso as opções acima não sejam suficientes, você pode adicionar um " indicador de indentação de bloco " (após o indicador de chomping de bloco, se você tiver um):
Termo aditivo
Se você inserir espaços extras no início das não-primeiras linhas no estilo Dobrado, eles serão mantidos, com uma nova linha de bônus. Isso não acontece com os estilos de fluxo:
→
["my long\n string\n", "my long string"]
Eu não posso nem.
*
2 estilos de bloco, cada um com 2 possíveis indicadores de chomping de bloco (ou nenhum) e com 9 possíveis indicadores de recuo (ou nenhum), 1 estilo simples e 2 estilos entre aspas: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63Algumas dessas informações também foram resumidas aqui .
fonte
"..." + "..."
na maioria das linguagens de programação ou barra invertida antes da nova linha no Bash.:
dentro de uma sequência em uma matriz de sequências faz com que o YAML a interprete como uma matriz de objetos. Isso viola o princípio de menos espanto .Para preservar novas linhas
|
, use , por exemplo:é traduzido para "Esta é uma frase muito longa \ n que abrange várias linhas no YAML \ n, mas que será renderizada como uma string \ n com novas linhas preservadas. \ n "
fonte
|
em cada linha, por razões que não são óbvias para mim: groups.google.com/forum/#!topic/pandoc-discuss/xuqEmhWgf9Acat
com delimitador, isso faz com que os espaços à esquerda (necessários para o YAML) sejam adicionados à saída.1. Notação de bloco (simples, estilo de fluxo, escalar): as novas linhas se tornam espaços e novas linhas extras após a remoção do bloco
JSON equivalente
2. Escalar em blocos literais: um escalar em blocos literais | incluirá as novas linhas e os espaços à direita. mas remove extra
novas linhas após o bloco.
JSON equivalente
3. + indicador com Escalar literal de bloco: mantenha novas linhas extras após o bloco
JSON equivalente
4. - indicador com Literal Block Scalar: - significa que a nova linha no final da string é removida.
JSON equivalente
5. Escalada de bloco dobrado (>):
dobrará novas linhas em espaços e removerá novas linhas adicionais após o bloco.
JSON equivalente
para mais você pode visitar meu blog
fonte
Você pode não acreditar, mas o YAML também pode executar chaves de várias linhas:
fonte
key:value
, mas se a sua chave contém nova-line, você pode fazê-lo como descrito acima?
é o indicador principal (como na chave de um mapeamento). Em muitas situações, você pode deixar de fora o indicador de chave, quando o indicador de valor (obrigatório):
após a chave torna a análise inequívoca. Mas esse não é o caso, você precisará usar isso para marcar explicitamente a chave.Para concatenar linhas longas sem espaço em branco , use aspas duplas e escape das novas linhas com barras invertidas:
(Obrigado @Tobia)
fonte
Caso você esteja usando YAML e Twig para traduções no Symfony e queira usar traduções de várias linhas em Javascript, um retorno de carro será adicionado logo após a tradução. Portanto, mesmo o seguinte código:
var javascriptVariable = "{{- 'key'|trans -}}";
Qual possui a seguinte tradução yml:
Ainda resultará no seguinte código em html:
Portanto, o sinal de menos no Twig não resolve isso. A solução é adicionar este sinal de menos após o yml maior que:
Terá o resultado adequado, tradução de várias linhas em uma linha no Twig:
fonte
Para situações em que a string pode conter espaços ou não, prefiro aspas duplas e continuação de linha com barras invertidas:
Mas observe a armadilha do caso de uma linha de continuação começar com um espaço, ela precisa ser escapada (porque será removida em outro lugar):
Se a string contém quebras de linha, isso precisa ser escrito em estilo C
\n
.Veja também esta pergunta .
fonte
Nenhuma das soluções acima funcionou para mim, em um arquivo YAML dentro de um projeto Jekyll. Depois de tentar muitas opções, percebi que uma injeção de HTML também
<br>
poderia funcionar, pois no final tudo é renderizado em HTML:nome:
|
em uma vila de La Mancha,<br>
cujo nome não<br>
quero lembrar.Pelo menos funciona para mim. Não faço ideia dos problemas associados a essa abordagem.
fonte