Di YAML, saya punya string yang sangat panjang. Saya ingin menyimpan ini dalam tampilan 80-kolom (atau lebih) dari editor saya, jadi saya ingin memutus string. Apa sintaks untuk ini?
Dengan kata lain, saya punya ini:
Key: 'this is my very very very very very very long string'
Dan saya ingin ini (atau sesuatu seperti ini):
Key: 'this is my very very very ' +
'long string'
Saya ingin menggunakan tanda kutip seperti di atas, jadi saya tidak perlu melarikan diri apa pun dalam string.
{{- 'key'|trans -}}
juga tidak bekerja.Ada
56SEMBILAN (atau 63 *, tergantung bagaimana Anda menghitung) berbagai cara untuk menulis string multi-line dalam YAML.TL; DR
Biasanya, Anda ingin
>
:Jika Anda ingin linebreak dipertahankan seperti
\n
pada string (misalnya, penurunan harga dengan paragraf), gunakan|
.Gunakan
>-
atau|-
sebagai gantinya jika Anda tidak ingin linebreak ditambahkan pada bagian akhir.Jika Anda perlu memecah garis di tengah kata atau mengetik linebreaks secara harfiah
\n
, gunakan tanda kutip ganda sebagai gantinya:YAML gila.
Blokir gaya skalar (
>
,|
)Ini memungkinkan karakter seperti
\
dan"
tanpa melarikan diri, dan menambahkan baris baru (\n
) ke akhir string Anda.>
Gaya yang dilipat menghapus baris baru dalam string (tetapi menambahkan satu di akhir, dan mengubah baris ganda menjadi tunggal):→
this is my very very very long string\n
|
Gaya literal mengubah setiap baris baru dalam string menjadi baris baru literal, dan menambahkan satu di akhir:→
this is my very very very\nlong string\n
Berikut definisi resmi dari YAML Spec 1.2
Blok gaya dengan indikator mengunyah blok (
>-
,|-
,>+
,|+
)Anda dapat mengontrol penanganan baris baru akhir dalam string, dan setiap garis kosong trailing (
\n\n
) dengan menambahkan karakter blok pengejar :>
,|
: "clip": pertahankan feed baris, hapus baris trailing blank.>-
,|-
: "strip": hapus feed baris, hapus baris kosong yang tertinggal.>+
,|+
: "keep": pertahankan feed baris, tetap ikuti baris kosong."Arus" gaya skalar (
,
"
,'
)Ini memiliki pelarian yang terbatas, dan membuat string baris tunggal tanpa karakter baris baru. Mereka dapat mulai pada baris yang sama dengan kunci, atau dengan baris baru tambahan terlebih dahulu.
gaya polos (tidak ada pelarian, tidak ada
#
atau:
kombinasi, batas karakter pertama):gaya kutipan ganda (
\
dan"
harus diloloskan oleh\
, baris baru dapat disisipkan dengan\n
urutanliteral, garis dapat digabungkan tanpa spasi dengan trailing\
):→
"this is my very very \"very\" loooong string.\n\nLove, YAML."
gaya kutipan tunggal (literal
'
harus digandakan, tidak ada karakter khusus, mungkin berguna untuk mengekspresikan string yang dimulai dengan tanda kutip ganda):→
"this is my very very \"very\" long string, isn't it."
Ringkasan
Dalam tabel ini,
_
berartispace character
.\n
berarti "karakter baris baru" (\n
dalam JavaScript), kecuali untuk baris "baris baru in-line", di mana secara harfiah berarti garis miring terbalik dan n).Contohnya
Perhatikan spasi tambahan pada baris sebelum "spasi".
Blokir gaya dengan indikator lekukan
Untuk berjaga-jaga jika hal di atas tidak cukup untuk Anda, Anda dapat menambahkan " indikator indentasi blok " (setelah indikator blok pengompakan, jika ada):
Tambahan
Jika Anda memasukkan spasi tambahan di awal baris yang tidak pertama dalam gaya Dilipat, mereka akan disimpan, dengan bonus baris baru. Ini tidak terjadi dengan aliran gaya:
→
["my long\n string\n", "my long string"]
Saya tidak bisa.
*
2 gaya blok, masing-masing dengan 2 indikator blok chomping (atau tidak ada), dan dengan 9 indikator indentasi yang mungkin (atau tidak ada), 1 gaya polos dan 2 gaya kutipan: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63Beberapa informasi ini juga telah dirangkum di sini .
sumber
"..." + "..."
dalam kebanyakan bahasa pemrograman, atau garis miring terbalik sebelum baris baru di Bash.:
dalam satu string dalam array string membuat YAML mengartikannya sebagai array objek. Itu melanggar prinsip tercengang .Untuk mempertahankan penggunaan baris baru
|
, misalnya:diterjemahkan ke "Ini adalah kalimat yang sangat panjang \ n yang mencakup beberapa baris dalam YAML \ n tetapi yang akan diterjemahkan sebagai string \ n dengan baris baru dipertahankan. \ n "
sumber
|
pada setiap baris, untuk alasan yang tidak jelas bagi saya: groups.google.com/forum/#!topic/pandoc-discuss/xuqEmhWgf9Acat
dengan pembatas, ini menyebabkan spasi terkemuka (yang diperlukan untuk YAML) ditambahkan ke output.1. Blok Notasi (polos, aliran-gaya, skalar): Baris baru menjadi spasi dan baris baru ekstra setelah blok dihapus
JSON Setara
2. Skalar Blok Sastra: Skalar Blok Sastra | akan mencakup baris baru dan spasi tambahan. tetapi menghapus ekstra
baris baru setelah blok.
JSON Setara
3. + indikator dengan Skalar Blok Sastra: menjaga baris baru ekstra setelah blok
JSON Setara
4. - Indikator dengan Literal Block Scalar: - berarti baris baru pada akhir string dihapus.
JSON Setara
5. Skalar Blok Lipat (>):
akan melipat baris baru ke spasi dan tetapi menghapus baris baru ekstra setelah blok.
JSON Setara
untuk lebih lanjut Anda dapat mengunjungi Blog saya
sumber
Anda mungkin tidak mempercayainya, tetapi YAML juga dapat melakukan kunci multi-baris:
sumber
key:value
, tetapi jika kunci Anda berisi baris baru, Anda dapat melakukannya seperti dijelaskan di atas?
adalah indikator kunci (seperti pada kunci dalam pemetaan). Dalam banyak situasi Anda dapat meninggalkan indikator kunci, ketika indikator nilai (diperlukan):
setelah kunci membuat penguraian menjadi tidak ambigu. Tapi bukan itu masalahnya, Anda harus menggunakan ini untuk secara eksplisit menandai kuncinya.Untuk menggabungkan garis panjang tanpa spasi , gunakan tanda kutip ganda dan keluar dari baris baru dengan garis miring terbalik:
(Terima kasih @Tobia)
sumber
Jika Anda menggunakan YAML dan Twig untuk terjemahan di Symfony, dan ingin menggunakan terjemahan multi-baris dalam Javascript, carriage return ditambahkan tepat setelah terjemahan. Begitu pun kode berikut:
var javascriptVariable = "{{- 'key'|trans -}}";
Yang memiliki terjemahan yml berikut:
Akan tetap menghasilkan kode berikut dalam html:
Jadi, tanda minus pada Ranting tidak menyelesaikan ini. Solusinya adalah menambahkan tanda minus ini setelah tanda lebih besar dari yml:
Akan memiliki hasil yang layak, terjemahan multi-baris pada satu baris di Twig:
sumber
Untuk situasi di mana string mungkin berisi spasi atau tidak, saya lebih suka tanda kutip ganda dan garis kelanjutan dengan garis miring terbalik:
Tetapi perhatikan tentang jebakan untuk kasus bahwa garis kelanjutan dimulai dengan spasi, perlu diloloskan (karena akan dilucuti di tempat lain):
Jika string berisi jeda baris, ini perlu ditulis dalam gaya C
\n
.Lihat juga pertanyaan ini .
sumber
Tidak ada solusi di atas yang berfungsi untuk saya, dalam file YAML dalam proyek Jekyll. Setelah mencoba banyak opsi, saya menyadari bahwa suntikan HTML dengan
<br>
mungkin dilakukan juga, karena pada akhirnya semuanya dirender ke HTML:name:
|
Di desa La Mancha<br>
yang namanya tidak<br>
ingin kuingat.Setidaknya itu bekerja untuk saya. Tidak tahu tentang masalah yang terkait dengan pendekatan ini.
sumber