etc./StackOverFlow

여러 줄에 걸쳐 YAML의 문자열을 어떻게 나누나요?

청렴결백한 만능 재주꾼 2021. 12. 24. 06:18
반응형

질문자 :jjkparker


YAML에는 매우 긴 문자열이 있습니다. 내 편집기의 80열(또는 그 정도) 보기 내에서 이것을 유지하고 싶기 때문에 문자열을 끊고 싶습니다. 이것에 대한 구문은 무엇입니까?

즉, 나는 이것을 가지고 있습니다 :

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

그리고 나는 이것을 (또는이 효과에 대한 무언가) 갖고 싶습니다.

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

위와 같이 따옴표를 사용하고 싶습니다. 따라서 문자열 내에서 아무 것도 이스케이프 처리할 필요가 없습니다.



YAML에서 여러 줄 문자열을 작성하는 방법에는 5 6 NINE (또는 계산 방법에 따라 63*)이 있습니다.

TL;DR

  • > 대부분의 경우 사용: 내부 줄 바꿈은 제거되지만 끝에 하나를 얻습니다.

     key: > Your long string here.
  • 사용 | 해당 줄 바꿈을 \n 으로 유지하려는 경우(예: 단락이 포함된 마크다운 포함).

     key: | ### Heading * Bullet * Points
  • 끝에 줄 바꿈을 추가하지 않으려면 >- 또는 |- 대신 사용하십시오.

  • 단어 중간에 줄을 분할해야 하거나 문자 그대로 줄바꿈을 \n "..." 사용하십시오.

     key: "Antidisestab\ lishmentarianism.\n\nGet on it."
  • YAML은 미쳤습니다.

블록 스칼라 스타일( > , | )

\" 와 같은 문자를 이스케이프 처리하지 않고 \n )을 추가할 수 있습니다.

> 접힌 스타일 은 문자열 내에서 단일 줄 바꿈을 제거하지만 끝에 하나를 추가하고 이중 줄 바꿈을 단일 줄로 변환합니다.

 Key: > this is my very very very long string

this is my very very very long string\n

추가 선행 공간이 유지되고 추가 줄 바꿈이 발생합니다. 아래 참고를 참조하십시오.

조언: 이것을 사용하십시오. 일반적으로 이것이 원하는 것입니다.

| 리터럴 스타일 은 문자열 내의 모든 줄 바꿈을 리터럴 줄 바꿈으로 바꾸고 끝에 하나를 추가합니다.

 Key: | this is my very very very long string

this is my very very very\nlong string\n

다음은 YAML 사양 1.2 의 공식 정의입니다.

스칼라 내용은 모든 줄 바꿈이 중요한 리터럴 스타일("|"로 표시)을 사용하여 블록 표기법으로 작성할 수 있습니다. 또는 접힌 스타일(">"로 표시)로 작성할 수 있습니다. 여기서 각 줄 바꿈은 비어 있거나 들여쓰기가 더 많은 줄로 끝나지 않는 한 공백으로 접힙니다.

조언: 서식 있는 텍스트 (특히 Markdown)를 값으로 삽입할 때 사용하십시오.

블록 chomping 표시기가 있는 블록 스타일( >- , |- , >+ , |+ )

블록 chomping 표시 문자를 추가하여 문자열의 마지막 줄 바꿈과 후행 공백 줄( \n\n

  • > , | : "클립": 줄 바꿈을 유지하고 후행 빈 줄을 제거합니다.
  • >- , |- : "strip": 줄 바꿈을 제거하고 후행 공백 줄을 제거합니다.
  • >+ , |+ : "유지": 줄 바꿈을 유지하고 후행 빈 줄을 유지합니다.

"흐름" 스칼라 스타일( , " , ' )

이들은 이스케이프가 제한되어 있으며 줄 바꿈 문자가 없는 한 줄 문자열을 구성합니다. 키와 같은 줄에서 시작하거나 제거된 추가 줄 바꿈으로 시작할 수 있습니다. 이중 줄 바꿈 문자는 하나의 줄 바꿈이 됩니다.

일반 스타일 (이스케이프 없음, # 또는 : 조합 없음, 첫 번째 문자는 " , ' 또는 기타 많은 구두점 문자일 수 없음):

 Key: this is my very very very long string

조언: 피하십시오. 편리해 보일 수 있지만 실수로 금지된 구두점을 사용하고 구문 오류를 유발하여 발에 총을 맞을 수 있습니다.

이중 인용 스타일 ( \" 로 이스케이프해야합니다 \ , 줄 바꿈은 문자로 삽입 할 수 있습니다 \n 순서, 선 후행 공백없이 연결될 수있다 \ ) :

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

"this is my very very \"very\" loooong string.\n\nLove, YAML."

조언: 매우 특정한 상황에서 사용하십시오. 이것은 공백을 추가하지 않고 줄에 걸쳐 매우 긴 토큰(예: URL)을 끊을 수 있는 유일한 방법입니다. 그리고 중간에 줄 바꿈을 추가하는 것이 아마도 유용할 것입니다.

작은 따옴표로 묶인 스타일 (리터럴 ' 은 반드시 두 배로 해야 하며, 특수 문자가 없어야 하며, 큰 따옴표로 시작하는 문자열을 표현하는 데 유용할 수 있음):

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

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

조언: 피하십시오. 혜택은 거의 없고 대부분 불편합니다.

들여쓰기 표시기가 있는 블록 스타일

위의 내용으로 충분하지 않은 경우를 대비하여 " 블록 들여쓰기 표시기 "를 추가할 수 있습니다.

 - >8 My long string starts over here - |+1 This one starts here

참고: 접힌 스타일의 선행 공백( > )

접힌 스타일에서 첫 번째가 아닌 줄의 시작 부분에 추가 공백을 삽입하면 보너스 줄 바꿈과 함께 유지됩니다. (흐름 스타일에서는 발생하지 않습니다.) 섹션 6.5 :

또한 선행 공백이 포함된 텍스트 줄을 둘러싼 줄 바꿈에는 접기가 적용되지 않습니다. 이러한 들여쓰기가 더 많은 줄은 이러한 선행 공백으로만 구성될 수 있습니다.

 - > my long string many spaces above - my long string many spaces above

["my long\n string\n \nmany spaces above\n","my long string\nmany spaces above"]

요약

이 표에서 _space character 의미합니다. \n 수단 "개행 문자"( \n "기타 기능"아래를 제외하고 자바 스크립트에서). "선행 공백"은 첫 번째 줄(들여쓰기 설정) 뒤에 적용됩니다.

> | " ' >- >+ |- |+
공백/줄 바꿈은 다음과 같이 변환됩니다.
후행 공백 → _ _ _ _ _ _
선두 공간 → \N_ \N_ \N_ \N_ \N_ \N_
단일 개행 → _ \N _ _ _ _ _ \N \N
이중 개행 → \N \n\n \N \N \N \N \N \n\n \n\n
마지막 줄 바꿈 → \N \N \N \N
마지막 이중 개행 → \n\n \n\n
리터럴을 만드는 방법:
작은따옴표 ' ' ' ' '' ' ' ' '
큰따옴표 " " " \" " " " " "
백슬래시 \ \ \ \\ \ \ \ \ \
다른 특징들
\n 인라인 줄 바꿈
\ 공백 없는 개행
# 또는 :
같은 시간에 시작할 수 있습니다.
키로 선

"공백" 앞의 행에서 후행 공백에 유의하십시오.

 - > 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." ]

* 2개의 블록 스타일, 각각 2개의 가능한 블록 chomping 표시기(또는 없음) 및 9개의 가능한 들여쓰기 표시기(또는 없음), 1개의 일반 스타일 및 2개의 인용 스타일: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63

이 정보 중 일부는 여기 에 요약되어 있습니다.


Steve Bennett

yaml 접힌 스타일을 사용합니다. 각 줄의 들여쓰기는 무시됩니다. 끝에 줄 바꿈이 삽입됩니다.

 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

다음과 같이 "블록 chomping 표시기"를 사용하여 후행 줄 바꿈을 제거할 수 있습니다.

 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.

두 경우 모두 각 줄 바꿈은 공백으로 바뀝니다.

다른 제어 도구도 사용할 수 있습니다(예: 들여쓰기 제어용).

https://yaml-multiline.info/ 참조


Matt Williamson

줄 바꿈 을 유지하려면 | , 예를 들어:

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

로 번역된다 "\ n하지만 YAML에서 스팬 여러 행이 \ 아주 긴 문장 N 것을하는 문자열로 \ n 보존 줄 바꿈으로 렌더링됩니다. \ n"


Ali Shakiba

1. 블록 표기법(plain, flow-style, scalar): 블록이 제거되면 개행은 공백이 되고 추가 개행은 됩니다.

 --- # Note: It has 1 new line after the string content: Arbitrary free text over multiple lines stopping after indentation changes... ...

동등한 JSON

 { "content": "Arbitrary free text over multiple lines stopping after indentation changes..." }

2. 리터럴 블록 스칼라: 리터럴 블록 스칼라 | 줄 바꿈과 모든 후행 공백이 포함됩니다. 하지만 추가 제거

블록 뒤에 줄 바꿈.

 --- # After string we have 2 spaces and 2 new lines content1: | Arbitrary free text over "multiple lines" stopping after indentation changes... ...

동등한 JSON

 { "content1": "Arbitrary free text\nover \"multiple lines\" stopping\nafter indentation changes... \n" }

3. Literal Block Scalar가 있는 + 표시기: 블록 뒤에 추가 줄 바꿈 유지

 --- # After string we have 2 new lines plain: |+ This unquoted scalar spans many lines. ...

동등한 JSON

 { "plain": "This unquoted scalar\nspans many lines.\n\n\n" }

4. – Literal Block Scalar가 있는 표시기: 문자열 끝에 있는 개행 문자가 제거되었음을 의미합니다.

 --- # After string we have 2 new lines plain: |- This unquoted scalar spans many lines. ...

동등한 JSON

 { "plain": "This unquoted scalar\nspans many lines." }

5. 접힌 블록 스칼라(>):

줄 바꿈을 공백으로 접고 블록 뒤에 추가 줄 바꿈을 제거합니다.

 --- folded_newlines: > this is really a single line of text despite appearances ...

동등한 JSON

 { "fold_newlines": "this is really a single line of text despite appearances\n" }

자세한 내용은 내 블로그를 방문하세요.


Arayan Singh

공백 없이 긴 줄을 연결하려면 큰따옴표를 사용하고 백슬래시로 줄 바꿈을 이스케이프하십시오.

 key: "Loremipsumdolorsitamet,consecteturadipiscingelit,seddoeiusmodtemp\ orincididuntutlaboreetdoloremagnaaliqua."

(@Tobia 감사합니다)


phs

믿기지 않을 수도 있지만 YAML은 여러 줄 키도 수행할 수 있습니다.

 ? > multi line key : value

Mohsen

Symfony에서 번역에 YAML과 Twig를 사용하고 Javascript에서 여러 줄 번역을 사용하려는 경우 번역 직후에 캐리지 리턴이 추가됩니다. 따라서 다음 코드도 마찬가지입니다.

var javascriptVariable = "{{- 'key'|trans -}}";

다음 yml 번역이 있습니다.

 key: > This is a multi line translation.

여전히 html에서 다음 코드가 생성됩니다.

 var javascriptVariable = "This is a multi line translation. ";

따라서 Twig의 빼기 기호는 이를 해결하지 못합니다. 해결책은 yml에서 보다 큼 기호 다음에 이 빼기 기호를 추가하는 것입니다.

 key: >- This is a multi line translation.

Twig의 한 줄에 적절한 결과, 여러 줄 번역이 있습니다.

 var javascriptVariable = "This is a multi line translation.";

Rvanlaak

문자열에 공백이 포함되거나 포함되지 않은 상황에서는 큰따옴표와 백슬래시가 있는 줄 연속을 선호합니다.

 key: "String \ with long c\ ontent"

그러나 연속 행이 공백으로 시작하는 경우의 함정에 유의하십시오. 이스케이프 처리해야 합니다(다른 곳에서 제거되기 때문에).

 key: "String\ \ with lon\ g content"

문자열에 줄 바꿈이 포함되어 있으면 C 스타일로 작성해야 합니다. \n

이 질문 도 참조하십시오.


Joe

위의 솔루션 중 어느 것도 Jekyll 프로젝트의 YAML 파일에서 작동하지 않았습니다. <br> 을 사용한 HTML 삽입도 가능하다는 것을 깨달았습니다. 결국 모든 것이 HTML로 렌더링되기 때문입니다.

이름: | 라 만차의 마을에서 <br> 이름이 나하지 <br> 기억하고 싶은.

적어도 그것은 나를 위해 작동합니다. 이 접근 방식과 관련된 문제에 대한 아이디어가 없습니다.


Irene

출처 : http:www.stackoverflow.com/questions/3790454/how-do-i-break-a-string-in-yaml-over-multiple-lines

반응형