YAMLでは、非常に長い文字列があります。私はこれを私のエディタの80桁(またはそれ以上)のビュー内に保ちたいので、文字列を壊したいのです。この構文は何ですか?
言い換えれば、私はこれを持っています:
Key: 'this is my very very very very very very long string'
そして私はこれを(またはこの効果を得るために何か)したいのですが:
Key: 'this is my very very very ' +
'long string'
上記のように引用符を使用したいので、文字列内のものをエスケープする必要はありません。
YAMLの折り畳みスタイルを使用すると、各改行はスペースに置き換えられます。各行のインデントは無視されます。最後に改行が挿入されます。
>
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
次のように、 "block chomping indicator"を使用して、末尾の改行をなくすことができます。
>-
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/ を参照してください。
がある 56 NINE(またはカウント方法に応じて63 *)複数行の文字列をYAMLで書くためのさまざまな方法。
通常は、>
が必要です。
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
|
リテラルスタイルは、文字列内のすべての改行をリテラル改行に変換し、最後に追加します。
Key: |
this is my very very very
long string
→this is my very very very\nlong string\n
これは YAML Spec 1.2 からの公式の定義です。
スカラの内容は、すべての改行が重要であるリテラルスタイル(「|」で示される)を使用して、ブロック表記で書くことができます。あるいは、空行またはよりインデントのある行で終わらない限り、各改行がスペースに折り返される折り返しスタイル( ">"で表記)で書くこともできます。
>-
、|-
、>+
、|+
)ブロックchompingインディケータ 文字を追加することによって、文字列の最後の新しい行、および後続の空白行(\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
は「改行文字」を意味します(JavaScriptでは\n
)。ただし、「インライン改行」行は文字通りバックスラッシュと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
Foldedスタイルの先頭行以外の行の先頭に余分なスペースを挿入した場合、それらはボーナス改行で保持されます。これはフロースタイルでは起こりません。
- >
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
この情報のいくつかはまた要約されています ここ 。
newlinesを保持するには|
を使用します。例:
|
This is a very long sentence
that spans several lines in the YAML
but which will be rendered as a string
with newlines preserved.
「これは非常に長い文ですtranslated \ n YAMLの複数の行にまたがる \ nですが、文字列としてレンダリングされます \ n改行を保存してください。\ n "
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.リテラルブロックスカラ: Aリテラルブロックスカラ | は改行と後続のスペースを含みます。しかし余分な物を取り除く
ブロックの後の改行.
---
# 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. - リテラルブロックスカラーの付いたインジケータ: - は、文字列の末尾の改行が削除されることを意味します。
---
# 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: "Loremipsumdolorsitamet,consecteturadipiscingelit,seddoeiusmodtemp\
orincididuntutlaboreetdoloremagnaaliqua."
(ありがとう@Tobia)
Symfonyの翻訳にymlと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インジェクションでもうまくいくことがわかりました。
名前:|
ラマンチャの村で<br>
名前を覚えたくない<br>
。
少なくともそれは私のために働く。このアプローチに関連した問題についての見当もつかない。