回答:
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
次のように、「ブロックチョンピングインジケーター」を使用して、末尾の改行を削除できます。
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.
他にも利用可能な制御ツールがあります(インデントを制御するためなど)。
{{- 'key'|trans -}}
どちらも機能しません。
YAMLで複数行の文字列を書き込むには、5 6 NINE(またはカウント方法によっては63 *)の異なる方法があります。
通常、あなたは欲しい>
:
key: >
Your long
string here.
\n
文字列のように改行を保持したい場合は(たとえば、段落付きの埋め込みマークダウン)、を使用します|
。
key: |
### Heading
* Bullet
* Points
末尾に改行を追加したくない場合は>-
、|-
代わりにまたはを使用します。
単語の途中で行を分割する必要がある場合、または文字どおり改行を入力する必要がある場合は、\n
代わりに二重引用符を使用します。
key: "Antidisestab\
lishmentarianism.\n\nGet on it."
YAMLはクレイジーです。
>
、|
)これらは、次のような文字を許可\
し、"
エスケープせず、そして(新しい行を追加し\n
、あなたの文字列の末尾に)。
>
折りたたみスタイルは、文字列内の単一の改行を削除します(ただし、最後に1つ追加し、二重の改行を単一に変換します)。
Key: >
this is my very very very
long string
→ this is my very very very long string\n
|
リテラルスタイルは、文字列内のすべての改行をリテラル改行に変換し、最後に1行追加します。
Key: |
this is my very very very
long string
→ this is my very very very\nlong string\n
YAML Spec 1.2の公式定義は次のとおりです
スカラーコンテンツは、すべての改行が重要なリテラルスタイル(「|」で示される)を使用して、ブロック表記で記述できます。または、空の行またはインデントされた行で終わっていない限り、各改行がスペースに折り返される(「>」で示される)折りたたみスタイルで記述することもできます。
>-
、|-
、>+
、|+
)文字列の最後の新しい行の処理、および後続の空白行(\n\n
)を制御するには、ブロックチョッピングインジケーター文字を追加します。
>
、|
: "clip":改行を保持し、末尾の空白行を削除します。>-
、|-
: "strip":改行を削除し、末尾の空白行を削除します。>+
、|+
: "keep":改行を保持し、末尾の空白行を保持します。
、"
、'
)これらはエスケープが制限されており、改行文字のない単一行の文字列を構成します。キーと同じ行で開始することも、最初に改行を追加して開始することもできます。
プレーンスタイル(エスケープなし、なし、#
または:
組み合わせ、最初の文字の制限):
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."
一重引用符スタイル(リテラル'
は二重にする必要があります。特殊文字は使用できません。二重引用符で始まる文字列を表現するのに便利です):
Key: 'this is my very very "very"
long string, isn''t it.'
→ "this is my very very \"very\" long string, isn't it."
この表で、_
はを意味しspace character
ます。\n
「\n
インライン改行」行を除いて「JavaScriptで」「改行文字」を意味します。「インライン改行」行は文字どおりバックスラッシュと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 |
「スペース」の前の行の末尾のスペースに注意してください。
- >
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."
]
上記では不十分な場合に備えて、「ブロックインデントインジケーター」を追加できます(ブロックチョンピングインジケーターがある場合は、その後ろに)。
- >8
My long string
starts over here
- |+1
This one
starts here
折りたたみスタイルの最初ではない行の先頭に余分なスペースを挿入すると、それらは保持され、ボーナスの改行が追加されます。これはフロースタイルでは発生しません。
- >
my long
string
- my long
string
→ ["my long\n string\n", "my long string"]
私もできません。
*
2つのブロックスタイル、それぞれに2つの可能なブロックチャンピングインジケーター(またはなし)、および9つの可能なインデントインジケーター(またはなし)、1つのプレーンスタイルおよび2つの引用スタイル:2 x(2 + 1)x(9 + 1)+ 1 + 2 = 63
"..." + "..."
ほとんどのプログラミング言語で書かれているように、またはBashの改行の前にバックスラッシュを付けます。
:
文字列配列内の1つの文字列内の無害なコロンは、YAMLにそれをオブジェクトの配列として解釈させます。それは最小の驚きの原則に違反しています。
改行を保持するに|
は、たとえばを使用します。
|
This is a very long sentence
that spans several lines in the YAML
but which will be rendered as a string
with newlines preserved.
これは「これは非常に長い文ですis \ n YAMLのいくつかの行にまたがっています \ nしかし、文字列としてレンダリングされます \ n改行が保持されます。\ n "
|
、私には明らかではない理由のために、各行でを繰り返す必要があります:groups.google.com/forum
cat
デリミタ付きの複数行を使用すると、これにより先行スペース(YAMLに必要)が出力に追加されます。
1.ブロック表記(プレーン、フロースタイル、スカラー): ブロックが削除された後、改行はスペースになり、余分な改行になります。
---
# 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. +リテラルブロックスカラー付きのインジケーター:ブロック後に追加の改行を保持
---
# 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. –リテラルブロックスカラー付きのインジケーター: –文字列の最後の改行が削除されることを意味します。
---
# 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"
}
詳細については、私のブログにアクセスできます
信じられないかもしれませんが、YAMLは複数行のキーも実行できます。
?
>
multi
line
key
:
value
key:value
にしますが、キーに改行が含まれている場合は、上記のように行うことができます
?
はキーインジケータです(マッピングのキーと同様)。多くの状況では、キーの:
後に(必須の)値インジケータが解析を明確にする場合、キーインジケータを省略できます。しかし、そうではありません。これを使用して、明示的にキーをマークする必要があります。
空白なしで長い行を連結するには、二重引用符を使用して、バックスラッシュで改行をエスケープします。
key: "Loremipsumdolorsitamet,consecteturadipiscingelit,seddoeiusmodtemp\
orincididuntutlaboreetdoloremagnaaliqua."
(@Tobiaに感謝)
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の1行で複数行の翻訳が行われます。
var javascriptVariable = "This is a multi line translation.";
文字列にスペースが含まれているかどうかに関係なく、二重引用符とバックスラッシュを使用した行の継続を優先します。
key: "String \
with long c\
ontent"
ただし、継続行がスペースで始まる場合の落とし穴に注意してください。継続行はエスケープする必要があります(他の場所で削除されるため)。
key: "String\
\ with lon\
g content"
文字列に改行が含まれる場合は、Cスタイルで記述する必要があります\n
。
この質問も参照してください。
Jekyllプロジェクト内のYAMLファイルでは、上記の解決策はどれも私にとってはうまくいきませんでした。多くのオプションを試した後<br>
、最終的にすべてがHTMLにレンダリングされるため、HTMLインジェクションも可能であることに気付きました。
名前:名前を覚えたくない|
ラマンチャの村。<br>
<br>
少なくとも私にとってはうまくいきます。このアプローチに関連する問題についてはわかりません。