Como parto um fio em várias linhas?

Em YAML, tenho um fio que's muito longo. Quero manter isto dentro da visão de 80 colunas (ou assim) do meu editor, por isso eu'gostaria de quebrar a corda. Qual'é a sintaxe para isto?

Por outras palavras, eu tenho isto:

Key: 'this is my very very very very very very long string'

e I'gostaria de ter isto (ou algo para este efeito):

Key: 'this is my very very very ' +
     'long string'

I'gostaria de usar citações como acima, por isso eu não'não preciso de escapar a nada dentro da corda.

Existem 5 6 NINE (ou 63*, dependendo de como se conta) diferentes formas de escrever cordas multi-linhas em YAML.

TL;DR

  • Normalmente, quer `>``:

      chave: >
        A sua longa
        fio aqui.
  • Se quiser que os linebreaks sejam preservados como `\n' na corda (por exemplo, marcação embutida com parágrafos), utilize ````.

      chave: |
        ### Título
    
        * Bala
        * Pontos
  • Utilize >- ou |- em vez disso, se não quiser'não queira um linebreak anexado no final.

  • Se precisar de dividir linhas no meio das palavras ou digitar literalmente linebreaks como `\n', utilize aspas duplas em vez disso:

      chave: "Antidisestab\
       lishmentarianismo.nGet on it."
  • A YAML é uma loucura.

Bloquear estilos de escalar (>, ||)

Estes permitem caracteres como `e `" sem escapar, e adicionam uma nova linha (`n) ao fim da sua corda.

> Folded style remove linhas novas individuais dentro da cadeia (mas adiciona uma no final, e converte linhas novas duplas em singles):

Key: >
  this is my very very very
  long string

→ `this is my very very long string\n``


Key: | this is my very very very long string



→ 'este é o meu fio muito longo'.

Aqui's a definição oficial do [YAML Spec 1.2](http://www.yaml.org/spec/1.2/spec.html#id2760844)

>O conteúdo escalar pode ser escrito em notação de bloco, usando um estilo literal (indicado por "|") onde todas as quebras de linha são significativas. Alternativamente, podem ser escritos com o estilo dobrado (indicado por ">") onde cada quebra de linha é dobrada num espaço, a menos que termine uma linha vazia ou mais atenta.

#### Estilos de blocos com indicador de chomping de blocos (`>-`, `|-`, `>+`, `|+`)

É possível controlar a manipulação da nova linha final na cadeia, e quaisquer linhas em branco (`\n\n') acrescentando um carácter [indicador de accionamento de blocos](http://www.yaml.org/spec/1.2/spec.html#id2794534):

* `>`, ``, ``: "clip": manter a linha de alimentação, remover as linhas em branco.
* `>-`, `||-`: "strip": remover o avanço de linha, remover as linhas em branco do traçado.
* `>+`, `|+`, `|+`: "keep": manter o avanço de linha, manter linhas em branco.

### "Flow" estilos escalares (` `, `"`, `'`)

Estes têm uma fuga limitada, e constroem uma linha única sem novos caracteres de linha. Podem começar na mesma linha que a chave, ou com novas linhas adicionais primeiro.

*[estilo simples](http://www.yaml.org/spec/1.2/spec.html#id2788859)* (sem escapar, sem `` #` ou ``: ` combinações, limites no primeiro carácter):

Key: this is my very very very long string



*[estilo de citação dupla](http://www.yaml.org/spec/1.2/spec.html#style/flow/double-quoted)* (`` e `"`` deve ser escapado por ``, novas linhas podem ser inseridas com uma sequência literal ``n`, as linhas podem ser concatenadas sem espaços com traçado ``):

Key: "this is my very very \"very\" loooo\ ng string.\n\nLove, YAML."



→ `"isto é o meu próprio&"muito" loooong string.nLove, YAML." `

*[estilo de citação simples](http://www.yaml.org/spec/1.2/spec.html#style/flow/single-quoted)* (literal `'` deve ser duplicado, sem caracteres especiais, possivelmente úteis para expressar cadeias de caracteres que comecem com aspas duplas):

Key: 'this is my very very "very" long string, isn''t it.'



→ `"este é o meu muito&"muito" fio longo, é't it."`

## Resumo

Nesta tabela, `_` significa `` carácter espacial`. ``n` significa "newline character" (``n` em JavaScript), excepto para o "in-line newlines" linha, onde significa literalmente uma barra invertida e um 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 |



## Exemplos

*Note the trailing spaces on the line before "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." ]



### Estilos de blocos com indicadores de indentação

Só no caso do acima mencionado ser' não é suficiente para si, pode adicionar um "[indicador de indentação de bloco](http://www.yaml.org/spec/1.2/spec.html#id2793979)" (após o seu indicador de indentação de bloco, se tiver um):

  • 8 My long string starts over here

  • |+1 This one starts here

Adenda

Se inserir espaços extra no início das linhas não primeiras em estilo Folded, estes serão mantidos, com uma nova linha de bónus. Isto não'não acontece com os estilos de fluxo:

- >
    my long
      string
- my long
    string

→ `[" my long string\n", " my long string"]``

Eu posso't nem sequer.

``2 estilos de bloco, cada um com 2 possíveis indicadores de chomping de bloco (ou nenhum), e com 9 possíveis indicadores de indentação (ou nenhum), 1 estilo simples e 2 estilos cotados: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63*

Algumas destas informações foram também resumidas aqui.

Comentários (26)
Solução

Usando o estilo yaml dobrado, cada quebra de linha é substituída por um espaço. A indenção em cada linha será ignorada. Uma quebra de linha será inserida no 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

Pode usar o "indicador &quot de bloqueio; para eliminar a quebra da linha de fuga, como se segue:

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.

Existem também outros instrumentos de controlo disponíveis (para controlar a indentação, por exemplo).

Ver https://yaml-multiline.info/

Comentários (11)

Para preservar **newlines* utilizar |**, por exemplo:

|
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  with newlines preserved.

é traduzida para "Esta é uma frase muito longa que se estende por várias linhas no YAML** mas que será traduzida como um fio* com novas linhas preservadas.**n*"

Comentários (12)