Saya mencoba mengganti masing-masing ,
dalam file saat ini dengan baris baru:
:%s/,/\n/g
Tapi itu menyisipkan apa yang tampak seperti ^@
bukan baris baru yang sebenarnya. File tidak dalam mode DOS atau apa pun.
Apa yang harus saya lakukan?
Jika Anda penasaran, seperti saya, periksa pertanyaan Mengapa baris baru untuk Vim? demikian juga.
Jawaban:
Gunakan
\r
sebagai ganti\n
.Mengganti dengan
\n
memasukkan karakter nol ke dalam teks. Untuk mendapatkan baris baru, gunakan\r
. Saat mencari baris baru, Anda masih akan menggunakan\n
. Asimetri ini disebabkan oleh fakta bahwa\n
dan\r
melakukan hal-hal yang sedikit berbeda :\n
cocok dengan akhir baris (baris baru), sedangkan\r
cocok dengan carriage return. Di sisi lain, dalam substitusi\n
menyisipkan karakter nol sedangkan\r
menyisipkan baris baru (lebih tepatnya, itu diperlakukan sebagai input <CR>). Berikut adalah contoh kecil, non-interaktif untuk menggambarkan hal ini, menggunakan fitur baris perintah Vim (dengan kata lain, Anda dapat menyalin dan menempel berikut ini ke terminal untuk menjalankannya).xxd
memperlihatkan hexdump dari file yang dihasilkan.Dengan kata lain,
\n
telah memasukkan byte 0x00 ke dalam teks;\r
telah memasukkan byte 0x0a.sumber
\r
tidak berfungsi seperti ini. Tapi Anda bisa menekanCtrl-V
Enter
di tempat mengetik\r
, dan itu berhasil.\r
memasukkan<CR>
dan\n
memasukkan nol, bagaimana saya akan mengganti sesuatu dengan carriage return?Inilah triknya:
Pertama, atur sesi Vi (m) Anda untuk memungkinkan pencocokan pola dengan karakter khusus (yaitu: baris baru). Mungkin layak menempatkan baris ini di file .vimrc atau .exrc Anda:
Selanjutnya, lakukan:
Untuk mendapatkan
^M
karakter, ketik Ctrl+ Vdan tekan Enter. Pada Windows, lakukan Ctrl+ Q, Enter. Satu-satunya cara saya dapat mengingat ini adalah dengan mengingat betapa sedikitnya pengertian mereka:sumber
:set magic
(itu tidak ada di ~ / _vimrc saya) atauctrl-q
. Hanyactrl-v
diikuti oleh enter sederhana menciptakan^M
karakter bagi saya baik-baik saja.Ctrl-C
tidak benar-benar membunuh editor, meskipun itu dapat membatalkan Anda kembali ke mode Normal.Ctrl-V
berarti kata demi kata, danCtrl-Q
berarti seseorang membuat kesalahan saat memuat$VIMRUNTIME/mswin.vim
file konfigurasi. Anda tidak perlu mswin. Cukup gunakan vimrc Anda sendiri sebagai gantinya.sed -n l
sampai sekarang. Senang mengetahui bahwa hal yang sama dapat dicapai denganCtrl-v
vim.Dalam sintaksis
s/foo/bar
,\r
dan\n
memiliki arti yang berbeda, tergantung konteksnya.Pendek:
Untuk
foo
:\ n = baris baru (LF di Linux / Mac, CR + LF di Windows)
\ r = carriage return (CR)
Untuk
bar
:\ r = adalah baris baru
\ n = byte nol.
Lebih lama (dengan nomor ASCII):
NUL
= 0x00 = 0 = Ctrl+ @LF
= 0x0A = 10 = Ctrl+ JCR
= 0x0D = 13 = Ctrl+MBerikut adalah daftar karakter kontrol ASCII . Masukkan mereka di Vim via Ctrl+ V, Ctrl+ ---key---.
Di Bash atau shell Unix / Linux lainnya, cukup ketik Ctrl+ ---key---.
Coba Ctrl+ Mdi Bash. Itu sama dengan memukul Enter, ketika shell menyadari apa yang dimaksud, meskipun sistem Linux menggunakan umpan garis untuk pembatasan garis.
Untuk memasukkan literal di bash, menambahkannya dengan Ctrl+ Vjuga akan berfungsi.
Coba di Bash:
Ini menggunakan urutan pelarian ANSI . Insert dua
^[
's via Ctrl+ V, Esc.Anda juga dapat mencoba Ctrl+ V, Ctrl+ M, Enteryang akan memberikan Anda ini:
Ingat
\r
dari atas? :>Ini karakter kontrol ASCII daftar berbeda dari lengkap tabel simbol ASCII , dalam bahwa karakter kontrol, yang dimasukkan ke dalam konsol / pseudoterminal / Vim melalui Ctrlkunci (haha), dapat ditemukan di sana.
Sedangkan di C dan sebagian besar bahasa lain, Anda biasanya menggunakan kode oktal untuk mewakili 'karakter' ini.
Jika Anda benar-benar ingin tahu dari mana semua ini berasal: TTY didemistifikasi . Ini adalah tautan terbaik yang akan Anda temui tentang topik ini, tetapi berhati-hatilah: Ada naga.
TL; DR
Biasanya
foo
=\n
, danbar
=\r
.sumber
:s/x/^M/g
harus melakukannya. Masukkan^M
viactrl-v
diikuti olehctrl-m
.Anda perlu menggunakan:
Untuk mendapatkan
^M
karakter, tekan Ctrl+ vdiikuti oleh Enter.sumber
\r
dapat melakukan pekerjaan di sini untuk Anda.sumber
Dengan Vim di Windows, gunakan Ctrl+ Qsebagai pengganti Ctrl+ V.
sumber
Ini adalah jawaban terbaik untuk cara saya berpikir, tetapi akan lebih baik di tabel:
Mengapa newline untuk Vim?
Jadi, menulis ulang:
Anda perlu menggunakan
\r
untuk menggunakan umpan baris (ASCII0x0A
, baris baru Unix) dalam penggantian regex, tetapi itu khusus untuk penggantian - Anda biasanya harus terus berharap untuk menggunakan\n
umpan baris dan\r
untuk pengembalian carriage.Ini karena Vim digunakan
\n
sebagai pengganti karakter NIL (ASCII0x00
). Anda mungkin mengharapkan NIL\0
sebagai gantinya, membebaskan\n
untuk penggunaan yang biasa untuk umpan baris, tetapi\0
sudah memiliki arti dalam penggantian regex, sehingga dialihkan ke\n
. Oleh karena itu kemudian melangkah lebih jauh dengan menggeser baris baru dari\n
ke\r
(yang dalam pola regex adalah karakter carriage return, ASCII0x0D
).NB:
^M
( Ctrl+ V Ctrl+ Mdi Linux) menyisipkan baris baru saat digunakan dalam penggantian regex daripada carriage return seperti yang disarankan orang lain (saya baru mencobanya).Juga perhatikan bahwa Vim akan menerjemahkan karakter umpan baris ketika menyimpan ke file berdasarkan pengaturan format file dan yang mungkin membingungkan masalah.
sumber
Dari Eclipse ,
^M
karakter dapat disematkan dalam satu baris, dan Anda ingin mengubahnya menjadi baris baru.sumber
Tetapi jika seseorang harus mengganti, maka hal berikut berfungsi:
Di atas, setiap baris berikutnya diganti dengan baris berikutnya, dan kemudian
|-
lagi baris baru. Ini digunakan dalam tabel wiki.Jika teksnya sebagai berikut:
Itu diubah menjadi
sumber
Jika Anda perlu melakukannya untuk seluruh file, disarankan juga kepada saya bahwa Anda dapat mencoba dari baris perintah:
sumber
printf 'foo\\nbar\n' | sed 's/\\n/\n/g'
untuk melihat apakah itu akan berfungsi pada sistem Anda. (Penghargaan untuk orang-orang baik #bash di freenode untuk saran ini.)Inilah jawaban yang bekerja untuk saya. Dari pria ini:
---- mengutip Gunakan editor vi untuk memasukkan karakter baris baru sebagai ganti
Hal lain yang harus saya lakukan dan tidak dapat mengingat dan kemudian harus melihat ke atas.
Di vi, untuk menyisipkan karakter baris baru dalam pencarian dan ganti, lakukan hal berikut:
Perintah di atas akan mengganti semua instance "look_for" dengan "replace_with \ n" (dengan \ n yang berarti baris baru).
Untuk mendapatkan "^ M", masukkan kombinasi tombol Ctrl+ V, dan kemudian setelah itu (lepaskan semua tombol) tekan Entertombol.
sumber