Di YAML, aku punya string yang's sangat panjang. Saya ingin menjaga ini dalam 80-kolom (atau lebih) lihat dari editor saya, jadi saya'd suka melanggar string. Apa's sintaks untuk ini?
Dengan kata lain, saya memiliki ini:
Key: 'this is my very very very very very very long string'
dan saya'd seperti ini (atau sesuatu untuk efek ini):
Key: 'this is my very very very ' +
'long string'
I'd ingin menggunakan kutipan seperti di atas, jadi saya don't perlu untuk melarikan diri apa-apa di dalam string.
Ada 5 6 SEMBILAN (atau 63*, tergantung bagaimana anda menghitung) cara yang berbeda untuk menulis multi-line string di YAML.
>
:key: > Panjang anda string di sini.
\n
di string (misalnya, tertanam penurunan harga dengan paragraf), menggunakan |
.key: |
Peluru
Poin
Gunakan >-
atau |-
bukan jika anda don't ingin linebreak ditambahkan di akhir.
Jika anda perlu untuk membagi garis di tengah-tengah kata-kata atau secara harfiah jenis linebreaks sebagai \n
, gunakan tanda kutip ganda sebagai gantinya:
key: "Antidisestab\ lishmentarianism.\n\nget nget di atasnya."
>
, |
)Ini memungkinkan karakter seperti \
dan "
tanpa melarikan diri, dan tambahkan baris baru (\n
) di akhir string.
>
Dilipat gaya menghapus satu baris baru dalam string (tetapi menambahkan satu di akhir, dan mengkonversi dua baris baru untuk single):
Key: >
this is my very very very
long string
→ ini adalah saya sangat sangat sangat panjang string\n
|
Literal gaya ternyata setiap baris baru dalam string menjadi literal baris baru, dan menambahkan satu pada akhir:
Key: |
this is my very very very
long string
→ ini adalah saya sangat sangat sangat\nlong string\n
Berikut ini's definisi resmi dari YAML Spec 1.2
Skalar konten dapat ditulis dalam notasi blok, menggunakan literal gaya (ditunjukkan dengan tanda "|") di mana semua garis istirahat yang signifikan. Atau, mereka dapat ditulis dengan dilipat gaya (dilambangkan dengan ">") di mana setiap baris dilipat ke ruang kecuali itu berakhir kosong atau yang lebih menjorok baris.
>-
, |-
, >+
, |+
)Anda dapat mengontrol penanganan akhir baris baru dalam string, dan setiap tertinggal baris kosong (\n\n
) dengan menambahkan blok mengunyah indikator karakter:
>
, |
: "klip": menjaga line feed, menghapus trailing baris kosong.>-
, |-
: "strip": menghapus line feed, menghapus trailing baris kosong.>+
, |+
: "tetap": menjaga garis pakan, menjaga tertinggal baris kosong.`,
",
'`)Ini memiliki keterbatasan melarikan diri, dan membangun sebuah single-line string dengan karakter baris baru. Mereka dapat mulai pada baris yang sama sebagai kunci, atau dengan tambahan baris pertama.
polos (ada melarikan diri, tidak ada #
atau :
kombinasi, batas karakter pertama):
Key: this is my very very very
long string
double-quoted gaya (\
dan "
harus melarikan diri dengan \
, baris baru dapat dimasukkan dengan literal \n
urutan, garis dapat digabungkan tanpa spasi dengan akhiran \
):
Key: "this is my very very \"very\" loooo\
ng string.\n\nLove, YAML."
→ "ini adalah saya sangat sangat \"sangat\" loooong string.\n\nLove, YAML."
single-quoted gaya (harfiah '
harus dua kali lipat, tidak ada karakter khusus, mungkin berguna untuk mengekspresikan string yang dimulai dengan tanda kutip ganda):
Key: 'this is my very very "very"
long string, isn''t it.'
→ "ini adalah saya sangat sangat \"sangat\" string panjang, isn't."
Dalam tabel ini, _
berarti ruang karakter
. \n
berarti "karakter newline" (\n
di JavaScript), kecuali untuk "di baris-baris baru" baris, di mana itu berarti benar-benar sebuah backslash dan 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 |
Perhatikan trailing spasi pada baris sebelum "spasi."
- >
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."
]
Hanya dalam kasus di atas isn't cukup untuk anda, anda dapat menambahkan "blok lekukan indikator" (setelah anda blok mengunyah indikator, jika anda memiliki satu):
- >8
My long string
starts over here
- |+1
This one
starts here
Jika anda menyisipkan spasi di awal bukan-yang-pertama garis Dilipat gaya, mereka akan disimpan, dengan bonus newline. Ini doesn't terjadi dengan aliran gaya:
- >
my long
string
- my long
string
→ ["saya lama\n string\n", "saya panjang string"]
Saya dapat't bahkan.
``2 blok gaya, masing-masing dengan 2 kemungkinan blok mengunyah indikator (atau tidak ada), dan dengan 9 mungkin lekukan indikator (atau tidak ada), 1 gaya polos dan 2 dikutip gaya: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63*
Beberapa informasi ini juga telah diringkas di sini.
Menggunakan yaml dilipat gaya, masing-masing baris digantikan oleh ruang. Yang indention di setiap baris akan diabaikan. Garis putus akan dimasukkan di akhir.
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
Anda dapat menggunakan "blok mengunyah indikator" untuk menghilangkan tanda garis istirahat, sebagai berikut:
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.
Ada alat-alat kontrol lainnya juga tersedia (untuk mengendalikan lekukan misalnya).
Untuk melestarikan baris baru gunakan**|
**, misalnya:
|
This is a very long sentence
that spans several lines in the YAML
but which will be rendered as a string
with newlines preserved.
diterjemahkan ke dalam "Ini adalah kalimat yang sangat panjang\n yang mencakup beberapa baris dalam YAML\n tapi yang akan diberikan sebagai string\n dengan baris baru diawetkan.\n"
1. Blok Notasi: Baris baru menjadi ruang dan ekstra baris baru setelah blok dihapus
---
# Note: It has 1 new line after the string
content:
Arbitrary free text
over multiple lines stopping
after indentation changes...
...
Setara JSON
{
"content": "Arbitrary free text over multiple lines stopping after indentation changes..."
}
2. Literal Blok Skalar: Literal Blok Skalar | akan meliputi baris dan spasi tambahan. tapi menghilangkan ekstra
baris baru setelah blok.
---
# After string we have 2 spaces and 2 new lines
content1: |
Arbitrary free text
over "multiple lines" stopping
after indentation changes...
...
Setara JSON
{
"content1": "Arbitrary free text\nover \"multiple lines\" stopping\nafter indentation changes... \n"
}
3. + indikator dengan Literal Blok Skalar: menjaga ekstra baris baru setelah blok
---
# After string we have 2 new lines
plain: |+
This unquoted scalar
spans many lines.
...
Setara JSON
{
"plain": "This unquoted scalar\nspans many lines.\n\n\n"
}
4. – indikator dengan Literal Blok Skalar: – berarti bahwa baris baru pada akhir dari string yang akan dihapus.
---
# After string we have 2 new lines
plain: |-
This unquoted scalar
spans many lines.
...
Setara JSON
{
"plain": "This unquoted scalar\nspans many lines."
}
5. Dilipat Blok Skalar(>):
akan melipat baris ke ruang dan tapi menghilangkan extra baris baru setelah blok.
---
folded_newlines: >
this is really a
single line of text
despite appearances
...
Setara JSON
{
"fold_newlines": "this is really a single line of text despite appearances\n"
}
untuk lebih lanjut anda dapat mengunjungi saya Blog
Untuk menggabungkan garis panjang tanpa whitespace_, gunakan tanda kutip ganda dan melarikan diri baris dengan garis miring terbalik:
key: "Loremipsumdolorsitamet,consecteturadipiscingelit,seddoeiusmodtemp\
orincididuntutlaboreetdoloremagnaaliqua."
(Terima Kasih @Tobia)
Dalam kasus anda're menggunakan YAML dan Ranting untuk terjemahan dalam Symfony, dan ingin menggunakan multi-line terjemahan dalam Javascript, kereta kembali ditambahkan setelah terjemahan. Jadi, bahkan kode berikut:
var javascriptVariable = "{{- 'kunci'|trans -}}";
Yang berikut yml terjemahan:
key: >
This is a
multi line
translation.
Masih akan menjadi hasil kode berikut di html:
var javascriptVariable = "This is a multi line translation.
";
Jadi, tanda minus di Ranting tidak memecahkan masalah ini. Solusinya adalah dengan menambahkan tanda minus ini setelah tanda lebih besar daripada di yml:
key: >-
This is a
multi line
translation.
Akan memiliki hasil yang tepat, multi line terjemahan pada satu baris di Ranting:
var javascriptVariable = "This is a multi line translation.";
Untuk situasi yang string mungkin berisi spasi atau tidak, saya lebih memilih tanda kutip ganda dan garis kelanjutan dengan garis miring terbalik:
key: "String \
with long c\
ontent"
Tetapi catatan tentang perangkap untuk kasus yang kelanjutan baris dimulai dengan sebuah spasi, harus melarikan diri (karena itu akan dilucuti di tempat lain):
key: "String\
\ with lon\
g content"
Jika string mengandung garis istirahat, hal ini perlu ditulis dalam C style \n
.
Lihat juga ini question.
Tidak ada solusi di atas bekerja untuk saya, dalam NAMA file hanya Jekyll proyek. Setelah mencoba banyak pilihan, saya menyadari bahwa injeksi HTML dengan <br>
mungkin tidak juga, karena pada akhirnya semuanya diberikan ke HTML:
nama: |
Di desa La Mancha <br>
dan nama saya don't <br>
ingin ingat.
Setidaknya itu bekerja untuk saya. Tidak tahu pada masalah-masalah yang terkait dengan pendekatan ini.