Mengetik :digraphsdalam vim menunjukkan tabel-digraf yang terhubung dengan @LightnessRacesinOrbit.
askewchan
1
Ketika mencoba mengganti karakter semacam ini menggunakan php, coba preg_replace('/[\x01]/', ' ' ,$str); Semoga ini bisa membantu.
Rachel Geller
Jawaban:
561
Unix menggunakan 0xA untuk karakter baris baru. Windows menggunakan kombinasi dua karakter: 0xD 0xA. 0xD adalah karakter carriage return.^Mkebetulan cara vim menampilkan 0xD (0x0D = 13, M adalah huruf ke-13 dalam alfabet bahasa Inggris).
Anda dapat menghapus semua ^Mkarakter dengan menjalankan yang berikut:
:%s/^M//g
Di mana ^Mdimasukkan dengan menahan Ctrldan mengetik vdiikuti oleh m, dan kemudian melepaskan Ctrl. Ini terkadang disingkat ^V^M, tetapi perhatikan bahwa Anda harus memasukkannya seperti yang dijelaskan dalam kalimat sebelumnya, daripada mengetiknya secara harfiah.
Ekspresi ini akan menggantikan semua kemunculan ^Mdengan string kosong (yaitu tidak ada). Saya menggunakan ini untuk menyingkirkan ^Mfile yang disalin dari Windows ke Unix (Solaris, Linux, OSX).
Untuk berjaga-jaga jika Anda menggunakan Windows, Ctrl + V mungkin akan dipetakan untuk menempel. Jika itu yang terjadi maka defaultnya memetakan kembali "special character escape" untuk Ctrl + Q.
R. Martinho Fernandes
8
Pertanyaan sebenarnya adalah mengapa Vim terkadang secara otomatis mendeteksi ujung garis dan menampilkannya dengan benar, dan terkadang tidak.
Scott
10
Anda akan melihat ^Mkarakternya jika file tersebut memiliki ujung garis yang tidak cocok. Gunakan perintah yang disediakan oleh Tomasz, lalu ketik :fileformat={unix|dos|mac}tergantung pada OS yang Anda targetkan. Jika hanya ada beberapa baris tanpa ^Mkarakter, Anda mungkin ingin :fileformat=dos. Jika Anda mengedit file dalam editor selain vim, pastikan itu dikonfigurasi untuk mencocokkan akhir baris (Notepad tidak akan melakukan ini, tetapi editor yang memiliki reputasi baik seperti Notepad ++ atau TextMate akan).
Mikkel Paulson
9
Catatan untuk pemula vi, perintah itu harus diketik secara manual. Hanya menempelkannya ke terminal terbuka dengan vimenjalankan akan menghasilkan kesalahan "pola tidak ditemukan".
IQAndreas
51
@ Bluesm saya benar-benar perlu digunakan :%s/\r//guntuk mengganti carriage return dalam file saya. Pola ^ V ^ M tidak dapat ditemukan dalam file yang saya punya banyak karakter ^ M.
jonnybot
139
:%s/\r//g
bekerja untuk saya hari ini. Tetapi situasi saya mungkin sedikit berbeda.
opsi g tidak diperlukan, hanya ada satu baris baru per baris. :%s/\r//sudah cukup.
frogcoder
7
Opsi g mungkin sangat dibutuhkan, karena carriage return belum tentu merupakan baris baru. Ketika dibuka dalam mode Unix, carriage return hanyalah karakter lain, dan ketika dibuka dalam mode Windows, carriage return hanya spesial segera diikuti oleh umpan baris.
Jonathan Baldwin
65
Untuk menerjemahkan baris baru alih-alih menghapusnya:
Apa yang sebenarnya harus dilakukan? Bagi saya sepertinya melakukan substitusi like for like, yang saya tidak bisa bayangkan akan mengubah apa pun. Apakah saya melewatkan sesuatu yang istimewa tentang bagaimana sintaks bekerja di sini?
Platinum Azure
16
@PlatinumAzure Saya tidak tahu mengapa tidak ada yang pernah berpikir untuk menjawab pertanyaan Anda. \rmemiliki perilaku yang berbeda di bagian pencarian vs bagian ganti. Lihat stackoverflow.com/a/3834303 misalnya.
Saya mendapat file teks yang awalnya dibuat di Mesin Windows melalui pengguna Mac dan perlu mengimpornya ke Linux MySQL DB menggunakan load data perintah.
Meskipun VIM menampilkan karakter '^ M', tidak ada yang di atas berfungsi untuk masalah khusus saya, data akan diimpor tetapi selalu rusak dalam beberapa cara. Solusinya cukup mudah pada akhirnya (setelah banyak frustrasi).
Solusi: Menjalankan dos2unixDUA KALI pada file yang sama berhasil! Menggunakan fileperintah menunjukkan apa yang terjadi di sepanjang jalan.
$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text
Dan versi final file diimpor dengan sempurna ke dalam basis data.
Jika itu merusak konfigurasi Anda, dan karakter ^ M diperlukan dalam pemetaan, Anda dapat dengan mudah mengganti karakter ^ M dengan <Enter>atau bahkan<C-m> (keduanya diketikkan sebagai urutan karakter sederhana, jadi masing-masing 7 dan 5 karakter).
Ini adalah cara portabel yang disarankan untuk menyimpan kode kunci khusus dalam pemetaan
Jika Anda tidak secara spesifik menentukan yang berbeda fileformat(misalnya, :e ++ff=unixuntuk file Windows), kemungkinan file target memiliki EOL campuran.
Misalnya, jika file memiliki beberapa baris dengan <CR><NL>ujung dan lainnya dengan
<NL>ujung, dan fileformatdiatur unixsecara otomatis oleh Vim ketika membacanya, ^M (<CR>)akan muncul. Dalam kasus seperti itu, fileformatsikut bermain. Lihat :help ffsdetailnya.
Saya telah menemukan bahwa saya telah mencemari file selama berminggu-minggu karena fakta bahwa instance Homebrew Mvim saya diatur untuk menggunakan filetype = dos. Membuat perubahan yang diperlukan dalam .vimrc ....
:digraphs
dalam vim menunjukkan tabel-digraf yang terhubung dengan @LightnessRacesinOrbit.preg_replace('/[\x01]/', ' ' ,$str);
Semoga ini bisa membantu.Jawaban:
Unix menggunakan 0xA untuk karakter baris baru. Windows menggunakan kombinasi dua karakter: 0xD 0xA. 0xD adalah karakter carriage return.
^M
kebetulan cara vim menampilkan 0xD (0x0D = 13, M adalah huruf ke-13 dalam alfabet bahasa Inggris).Anda dapat menghapus semua
^M
karakter dengan menjalankan yang berikut:Di mana
^M
dimasukkan dengan menahan Ctrldan mengetik vdiikuti oleh m, dan kemudian melepaskan Ctrl. Ini terkadang disingkat^V^M
, tetapi perhatikan bahwa Anda harus memasukkannya seperti yang dijelaskan dalam kalimat sebelumnya, daripada mengetiknya secara harfiah.Ekspresi ini akan menggantikan semua kemunculan
^M
dengan string kosong (yaitu tidak ada). Saya menggunakan ini untuk menyingkirkan^M
file yang disalin dari Windows ke Unix (Solaris, Linux, OSX).sumber
^M
karakternya jika file tersebut memiliki ujung garis yang tidak cocok. Gunakan perintah yang disediakan oleh Tomasz, lalu ketik:fileformat={unix|dos|mac}
tergantung pada OS yang Anda targetkan. Jika hanya ada beberapa baris tanpa^M
karakter, Anda mungkin ingin:fileformat=dos
. Jika Anda mengedit file dalam editor selain vim, pastikan itu dikonfigurasi untuk mencocokkan akhir baris (Notepad tidak akan melakukan ini, tetapi editor yang memiliki reputasi baik seperti Notepad ++ atau TextMate akan).vi
, perintah itu harus diketik secara manual. Hanya menempelkannya ke terminal terbuka denganvi
menjalankan akan menghasilkan kesalahan "pola tidak ditemukan".:%s/\r//g
untuk mengganti carriage return dalam file saya. Pola ^ V ^ M tidak dapat ditemukan dalam file yang saya punya banyak karakter ^ M.bekerja untuk saya hari ini. Tetapi situasi saya mungkin sedikit berbeda.
sumber
:%s/\r//
sudah cukup.Untuk menerjemahkan baris baru alih-alih menghapusnya:
sumber
\r
memiliki perilaku yang berbeda di bagian pencarian vs bagian ganti. Lihat stackoverflow.com/a/3834303 misalnya.:%s/^V^M/^V^M/g
lihat di sini:%s/\r//g
Ini mungkin berarti Anda mendapatkan carriage return (sistem operasi yang berbeda menggunakan berbagai cara menandakan ujung saluran).
Gunakan
dos2unix
untuk memperbaiki file atau mengatur format file di vim:sumber
Katakanlah file teks Anda adalah - file.txt, lalu jalankan perintah ini -
Itu mengkonversi file teks dari dos ke format unix.
sumber
Saya mendapat file teks yang awalnya dibuat di Mesin Windows melalui pengguna Mac dan perlu mengimpornya ke Linux MySQL DB menggunakan
load data
perintah.Meskipun VIM menampilkan karakter '^ M', tidak ada yang di atas berfungsi untuk masalah khusus saya, data akan diimpor tetapi selalu rusak dalam beberapa cara. Solusinya cukup mudah pada akhirnya (setelah banyak frustrasi).
Solusi: Menjalankan
dos2unix
DUA KALI pada file yang sama berhasil! Menggunakanfile
perintah menunjukkan apa yang terjadi di sepanjang jalan.Dan versi final file diimpor dengan sempurna ke dalam basis data.
sumber
Di Unix mungkin lebih mudah menggunakan perintah 'tr'.
sumber
Saya menghapus semuanya dengan sed:
sed -i -e 's/\r//g' <filename>
Bisa juga diganti dengan string atau karakter yang berbeda:
sed -i -e 's/\r/string/g' <filename>
sed
Perintah - perintah itu berfungsi pada versi GNU / Linuxsed
tetapi mungkin perlu mengubah pada BSD (termasuk macOS).sumber
Anda dapat memperbaikinya di vim menggunakan
di mana ^ adalah karakter kontrol.
sumber
^M
itu.Ini adalah satu-satunya hal yang berhasil dalam kasus saya:
:e ++ff=dos
:wq
sumber
Jika itu merusak konfigurasi Anda, dan karakter ^ M diperlukan dalam pemetaan, Anda dapat dengan mudah mengganti karakter ^ M dengan
<Enter>
atau bahkan<C-m>
(keduanya diketikkan sebagai urutan karakter sederhana, jadi masing-masing 7 dan 5 karakter).Ini adalah cara portabel yang disarankan untuk menyimpan kode kunci khusus dalam pemetaan
sumber
Di FreeBSD, Anda dapat menghapus
^M
secara manual dengan mengetik berikut ini::%s/
Ctrl+ V, lalu Ctrl+ M, lalu Ctrl+ Mlagi.sumber
Jika Anda tidak secara spesifik menentukan yang berbeda
fileformat
(misalnya,:e ++ff=unix
untuk file Windows), kemungkinan file target memiliki EOL campuran.Misalnya, jika file memiliki beberapa baris dengan
<CR><NL>
ujung dan lainnya dengan<NL>
ujung, danfileformat
diaturunix
secara otomatis oleh Vim ketika membacanya,^M (<CR>)
akan muncul. Dalam kasus seperti itu,fileformats
ikut bermain. Lihat:help ffs
detailnya.sumber
Saya telah menemukan bahwa saya telah mencemari file selama berminggu-minggu karena fakta bahwa instance Homebrew Mvim saya diatur untuk menggunakan filetype = dos. Membuat perubahan yang diperlukan dalam .vimrc ....
sumber
coba
:%s/\^M//
Setidaknya ini bekerja untuk saya.sumber