vim menunjukkan pada setiap baris yang berakhir ^ M
Bagaimana cara saya mengganti ini dengan linebreak 'normal'?
vim
line-breaks
ByteNirvana
sumber
sumber
Jawaban:
Ini adalah satu-satunya hal yang berhasil untuk saya:
Ditemukan di: http://vim.wikia.com/wiki/File_format
sumber
:e ++ff=dos
diikuti oleh:set ff=unix
akan mengubah ujung ke format waras.Perintah
Dimana
<Ctrl-V><Ctrl-M>
artinya ketik Ctrl+ Vlalu Ctrl+ M.Penjelasan
pengganti,% = semua baris
^ M karakter (Ctrl-V adalah cara Vim menulis karakter Ctrl ^ dan Ctrl-M menulis M setelah ekspresi reguler, menghasilkan ^ M karakter khusus)
dengan baris baru (
\r
)Dan lakukan secara global (bukan hanya kejadian pertama di telepon).
sumber
:%s/<Ctrl-V><Ctrl-M>/\r/g
(di mana ^ r mengganti ^ M dengan baris baru).Di Linux dan Mac OS, berikut ini berfungsi,
di mana
^V^M
artinya ketik Ctrl+ V, lalu Ctrl+M .Catatan: pada Windows Anda mungkin ingin menggunakan
^Q
bukan^V
, karena secara default^V
dipetakan untuk menempelkan teks.sumber
%s/\r/\r/g
bekerja dengan baik di MacVim untuk file yang hanya menunjukkan^M
di akhir baris (satu baris panjang dalam istilah MacVim). Jelas artinya hal yang berbeda dalam pola vs penggantian bagian dari perintah ini.Di dalam
vim
, lihat format file - DOS atau Unix::set filetype=unix
:set fileformat=unix
File akan ditulis kembali tanpa karakter carriage return (CR, ^ M).
sumber
set ff=unix
sebagai jalan pintas kecil dengan cara yang samaft
adalah jalan pintas untukfiletype
File yang saya buat dengan BBEdit yang terlihat di MacVim menampilkan banyak
^M
baris, bukan yang biasa. Penggantian string berikut menyelesaikan masalah - harap ini membantu:Ini menarik karena saya mengganti jeda baris dengan karakter yang sama, tapi saya kira Vim hanya perlu mendapatkan yang baru untuk ditampilkan dengan benar. Saya tertarik untuk mengetahui mekanisme yang mendasari mengapa ini berhasil.
sumber
\r
karakter dengan\n
meskipun menentukan\r
sebagai pengganti. Tidak mengeluh, itulah yang saya inginkan. Sangat aneh.Pertama, gunakan
:set ff?
untuk mencari tahu format file file Anda.Saya kira bisa jadi
unix
, maka masalahnya adalah file Anda dibuat denganfileformat=dos
menambahkan "^ M ^ J" ke baris akhir tetapi baca denganflieformat=unix
hanya menghapus "^ J" dari ujung baris, meninggalkan "^ M" di sana.Cukup masukkan
:e ++ff=dos
dalam baris perintah Vim untuk mengubah format file Anda dari unix ke dos. Itu harus menyelesaikan masalah. Jika tidak,:%s/\r//g
akan membantu Anda.sumber
:e ++ff=dos
lalu:set ff=unix
dan:w
untuk mendapatkan karakter ^ M yang cocok, saya harus memilihnya secara visual dan kemudian menggunakan perintah OS copy to clipboard untuk mengambilnya. Anda dapat mengujinya dengan melakukan pencarian karakter sebelum mencoba perintah ganti.
harus memilih garis buruk pertama
akan mengganti semua errant ^ M dengan carriage return.
Ini sebagai fungsi di MacVim, yang didasarkan pada gvim 7.
EDIT:
Mengalami masalah ini lagi di mesin Windows 10 saya, yang memiliki Ubuntu untuk Windows, dan saya pikir ini menyebabkan masalah format file untuk vim. Dalam hal ini mengubah ff menjadi unix, mac, atau dos tidak melakukan apa pun selain mengubah ^ M ke ^ J dan kembali lagi.
Solusi dalam hal ini:
Alasan saya memilih rute ini adalah karena saya ingin memastikan bahwa saya tidak merusak file saya. Saya bisa saja
:%s/\r$//g
tetapi itu akan menghapus carriage return out, dan dapat memiliki hasil yang tidak terduga. Alih-alih, kita mengubah karakter CR singular, di sini a ^ M karakter, menjadi spasi, dan kemudian menghapus semua spasi di akhir baris (yang bagi saya adalah hasil yang diinginkan terlepas dari)Maaf telah menghidupkan kembali pertanyaan lama yang sudah lama dijawab, tetapi tampaknya ada beberapa kebingungan yang terjadi dan saya pikir saya akan membantu menjernihkan sebagian dari itu karena ini muncul tinggi dalam pencarian google.
sumber
Tak satu pun dari ini bekerja untuk saya, jadi saya mencoba ini, yang berhasil:
Tipe
:%s/
tekan CTRL-VCTRL-M
Tipe
//g
tekan Enter
Jadi perintah keseluruhan di Vim seharusnya terlihat seperti
:%s/^M//g
Kegunaannya:
:%s
(temukan dan ganti)/^M/
(simbol itu)/
(tanpa karakter)g
(secara global).sumber
^ M diambil oleh Ctrl+ Vdan M, begitu juga
sumber
Tanpa perlu menggunakan Ctrl:
:%s/\r$//
sumber
Hal sederhana yang berhasil untuk saya
sumber
Saya melakukan ini dengan sed:
sed -i -e 's/\r/\n/g' filename
sumber
sed -e 's/\r/\n/g' <<< 'over and over'
->oven and oven
sed
tetapi tidak BSDsed
(seperti yang ditemukan di OSX). Siapa pun yang memperbaiki linebreak mungkin bekerja dengan campuran sistem operasi, jadi akan sangat berguna untuk mengetahui kapan jawaban akan bekerja.Bagaimana dengan hanya:
:%s/\r//g
Itu benar-benar bekerja untuk saya.Yang dilakukan adalah membersihkan ujung garis dari semua baris, menghapus ^ M dan hanya itu.
sumber
Ada banyak jawaban lain untuk pertanyaan ini, tetapi tetap saja, berikut ini yang terbaik bagi saya, karena saya membutuhkan solusi baris perintah:
Penjelasan:
myfile
:e ++ff=dos
untuk memaksa memuat ulang seluruh file sebagai akhiran baris dos.:w ++ff=unix
untuk menulis file menggunakan ujung baris unixsumber
Ctrl+ Mmeminimalkan jendela saya, tetapi Ctrl+ Entersebenarnya menyisipkan
^M
karakter. Saya juga harus memastikan untuk tidak mengangkatCtrl kunci di antara mesin cetak.Jadi solusi bagi saya adalah:
Di mana
<Ctrl-V><Ctrl-Enter>
berarti menekan dan menahan Ctrl , tekan dan lepaskan V, tekan dan lepaskan Enter, lalu lepaskan Ctrl .Jika Anda bekerja pada file yang dihasilkan Windows
Solusi di atas akan menambahkan baris tambahan antara baris yang ada, karena sudah ada yang tidak terlihat
\r
setelah^M
.Untuk mencegah ini, Anda ingin menghapus
^M
karakter tanpa menggantinya.Di mana
%
berarti "dalam buffer ini,"s
berarti "pengganti,"/
berarti "(temukan) pola berikut,"<Ctrl-V><Ctrl-Enter>
mengacu pada tombol untuk menekan untuk mendapatkan^M
karakter (lihat di atas),//
berarti "tanpa apa-apa" (atau, "dengan pola antara dua garis miring ini, yang kosong "), dang
merupakan bendera yang berarti" secara global, "yang bertentangan dengan kemunculan pertama dalam sebuah garis.sumber
Ini bekerja untuk saya:
\n
akhir baris)Jadi dalam vim:
sumber
Dalam hal ini,
Tidak ada yang berhasil, saya memiliki file CSV yang disalin ke mesin Linux dari mac saya dan saya menggunakan semua perintah di atas tetapi tidak ada yang membantu kecuali yang di bawah ini
Saya punya file di mana ^ M karakter sandwitched antara baris sesuatu seperti di bawah ini
sumber
Atau, ada utilitas open-source yang disebut dos2unix dan unix2dos tersedia yang melakukan hal ini. Pada sistem linux, mereka mungkin diinstal secara default; untuk sistem windows Anda dapat mengunduhnya dari http://www.bastet.com/ antara lain.
sumber
di mana ^ M diketik dengan secara bersamaan menekan 3 tombol, ctrl + v + m
sumber
gunakan utilitas dos2unix jika file dibuat di windows, gunakan utilitas mac2unix jika file tersebut dibuat di mac. :)
sumber
Gunakan salah satu dari perintah ini:
Atau
sumber
Ini bekerja untuk saya:
sumber
Untuk menyimpan penekanan tombol , Anda dapat menghindari mengetik Ctrl+ VCtrl+ Mdengan menempatkan ini dalam pemetaan. Cukup buka file yang berisi karakter ^ M, tarik, dan tempel ke baris seperti ini di .vimrc Anda:
sumber
Tidak satu pun dari saran ini yang bekerja untuk saya setelah berhasil mendapatkan banyak
^M
jeda baris saat bekerja dengan vim dan gerhana. Saya menduga bahwa saya menemukan kasus luar tetapi jika itu membantu siapa pun saya lakukan.Dan itu menyelesaikan masalah saya
sumber
Jika Anda mengetik
^M
menggunakanShift+6 Caps+M
tidak akan menerima.Anda perlu mengetik
ctrl+v ctrl+m
.sumber
^M
memberikan jeda baris yang tidak diinginkan. Untuk menangani ini kita dapat menggunakansed
perintah sebagai berikut:sumber
Hapus saja
set binary
.vimrc Anda!sumber
Untuk digunakan
sed
di MacOS, lakukan ini:Penjelasan: The
$'STRING'
sintaks di sini berkaitan dengan shell bash. Mac tidak memperlakukan\r
sebagai karakter khusus. Dengan mengutip string perintah di$''
Anda memberitahu shell untuk mengganti\r
dengan\r
karakter aktual yang ditentukan dalam standar ANSI-C.sumber
"Fungsi ini menyimpan daftar lompatan
sumber
Saya telah menghabiskan sore itu berjuang dengan \ n ctrl-v 012 (keduanya memasok saya dengan nol). & bekerja melalui utas ini sampai saya mencapai metagrapher.
\r
bekerja dengan baik untuk saya!mengubah sesuatu seperti ini:
menjadi sesuatu seperti ini:
Sihir. Saya sangat berterima kasih
sumber