it-swarm-id.com

Mengapa baris baru untuk Vim?

Dari pertanyaan Bagaimana cara mengganti karakter untuk baris baru di Vim?. Anda harus menggunakan\r saat mengganti teks untuk baris baru, seperti ini

:%s/%/\r/g

Tetapi ketika mengganti akhir baris dan baris baru untuk karakter, Anda dapat melakukannya seperti:

:%s/\n/%/g 

Bagian mana dari manual yang mendokumentasikan perilaku ini, dan apa alasan di baliknya?

243
Vinko Vrsalovic

Dari dokumen vim pada pola :

\r cocok dengan <CR>

\n cocok dengan end-of-line - Saat mencocokkan dalam string dan bukan teks buffer karakter baris baru literal cocok.

154
pjz

Dari http://vim.wikia.com/wiki/Search_and_replace :

Saat Mencari

...

\n adalah baris baru, \r adalah CR (carriage return = Ctrl-M = ^M)

Saat Mengganti

...

\r adalah baris baru, \n adalah byte nol (0x00).

190

Aspek lain untuk ini adalah \0, yang secara tradisional NULL, diambil dalam s//\0/ berarti "keseluruhan pola yang cocok". (Omong-omong, yang berlebihan dengan, dan lebih lama dari, &).

  • Jadi Anda tidak bisa menggunakan \0 yang berarti NULL, jadi Anda menggunakan \n
  • Jadi Anda tidak bisa menggunakan \n berarti \n, jadi Anda menggunakan \r.
  • Jadi Anda tidak bisa menggunakan \r berarti \r, tapi saya tidak tahu siapa yang ingin menambahkan char itu dengan sengaja.

—☈

105
rking

:help NL-used-for-Nul

Detail teknis:

<Nul> karakter dalam file disimpan sebagai <NL> dalam kenangan. Di layar mereka ditampilkan sebagai "^@ ". Terjemahan dilakukan saat membaca dan menulis file. Untuk mencocokkan <Nul> dengan pola pencarian yang bisa Anda masukkan CTRL - @ atau " CTRL-V 000". Ini mungkin hanya apa yang Anda harapkan. Secara internal karakter diganti dengan <NL> dalam pola pencarian. Yang tidak biasa adalah mengetik itu CTRL-VCTRL-J juga menyisipkan <NL>, dengan demikian juga mencari <Nul> dalam file. {Vi tidak bisa menangani <Nul> karakter dalam file sama sekali}


47

Pertama-tama, buka :h :s untuk melihat bagian "4.2 Pengganti" dokumentasi pada "Ubah". Inilah yang diterima perintah:

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

Perhatikan deskripsi tentang pattern dan string

Untuk {pattern} Lihat |pattern| .
{string} dapat berupa string literal, atau sesuatu
khusus; Lihat |sub-replace-special| .

Jadi sekarang Anda tahu bahwa pola pencarian dan pola penggantian mengikuti aturan yang berbeda. Jika Anda mengikuti tautan ke |pattern|, ini akan membawa Anda ke bagian yang menjelaskan seluruh pola regexp yang digunakan dalam Vim.

Sementara itu, |sub-replace-special| membawa Anda ke subbagian "4.2 Substitute", yang berisi pola substitusi, di antaranya adalah \r untuk jeda baris/perpecahan.

(Cara pintas ke bagian manual ini adalah :h :s% )

10
syockit