vim menunjukkan pada setiap baris yang berakhir ^ M
Bagaimana cara saya mengganti ini dengan linebreak 'normal'?
vim menunjukkan pada setiap baris yang berakhir ^ M
Bagaimana cara saya mengganti ini dengan linebreak 'normal'?
Jawaban:
Ini adalah satu-satunya hal yang berhasil untuk saya:
: e ++ ff = dos
Ditemukan di: http://vim.wikia.com/wiki/File_format
:e ++ff=dos
diikuti oleh :set ff=unix
akan mengubah ujung ke format waras.
:%s/<Ctrl-V><Ctrl-M>/\r/g
Dimana <Ctrl-V><Ctrl-M>
artinya ketik Ctrl+ Vlalu Ctrl+ M.
:%s
pengganti,% = semua baris
<Ctrl-V><Ctrl-M>
^ M karakter (Ctrl-V adalah cara Vim menulis karakter Ctrl ^ dan Ctrl-M menulis M setelah ekspresi reguler, menghasilkan ^ M karakter khusus)
/\r/
dengan baris baru (\r
)
g
Dan lakukan secara global (bukan hanya kejadian pertama di telepon).
:%s/<Ctrl-V><Ctrl-M>/\r/g
(di mana ^ r mengganti ^ M dengan baris baru).
Di Linux dan Mac OS, berikut ini berfungsi,
:%s/^V^M/^V^M/g
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.
%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).
set ff=unix
sebagai jalan pintas kecil dengan cara yang sama ft
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:
:%s/\r/\r/g
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.
\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 dengan fileformat=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.
: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.
/^M
harus memilih garis buruk pertama
:%s/^M/\r/g
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:
:%s/\r$/ /g
:%s/ $//g
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.
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).
^ M diambil oleh Ctrl+ Vdan M, begitu juga
s/^M//g
Tanpa perlu menggunakan Ctrl:
:%s/\r$//
Hal sederhana yang berhasil untuk saya
dos2unix filename
Saya melakukan ini dengan sed:
sed -i -e 's/\r/\n/g' filename
sed -e 's/\r/\n/g' <<< 'over and over'
->oven and oven
sed
tetapi tidak BSD sed
(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.
Ada banyak jawaban lain untuk pertanyaan ini, tetapi tetap saja, berikut ini yang terbaik bagi saya, karena saya membutuhkan solusi baris perintah:
vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile
Penjelasan:
myfile
:e ++ff=dos
untuk memaksa memuat ulang seluruh file sebagai akhiran baris dos.:w ++ff=unix
untuk menulis file menggunakan ujung baris unixCtrl+ 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:
:%s/<Ctrl-V><Ctrl-Enter>/\r/g
Di mana <Ctrl-V><Ctrl-Enter>
berarti menekan dan menahan Ctrl , tekan dan lepaskan V, tekan dan lepaskan Enter, lalu lepaskan Ctrl .
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.
:%s/<Ctrl-V><Ctrl-Enter>//g
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 "), dan g
merupakan bendera yang berarti" secara global, "yang bertentangan dengan kemunculan pertama dalam sebuah garis.
Ini bekerja untuk saya:
\n
akhir baris)Jadi dalam vim:
:set ff=unix
:w
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
tr "\015" "\n" < inputfile > outputfile
Saya punya file di mana ^ M karakter sandwitched antara baris sesuatu seperti di bawah ini
Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
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.
sed s/^M//g file1.txt > file2.txt
di mana ^ M diketik dengan secara bersamaan menekan 3 tombol, ctrl + v + m
Gunakan salah satu dari perintah ini:
:%s/\r//g
Atau
:%s/\r\(\n\)/\1/g
Ini bekerja untuk saya:
:% s/\r\n/\r
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.
:%s/.$//g
Dan itu menyelesaikan masalah saya
:g/^M/s// /g
Jika Anda mengetik ^M
menggunakanShift+6 Caps+M
tidak akan menerima.
Anda perlu mengetik ctrl+v ctrl+m
.
^M
memberikan jeda baris yang tidak diinginkan. Untuk menangani ini kita dapat menggunakan sed
perintah sebagai berikut:
sed 's/\r//g'
Hapus saja set binary
.vimrc Anda!
Untuk digunakan sed
di MacOS, lakukan ini:
sed -i.bak $'s/\r//' <filename>
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.
"Fungsi ini menyimpan daftar lompatan
fun! Dos2unixFunction()
let _s=@/
let l = line(".")
let c = col(".")
try
set ff=unix
w!
"%s/\%x0d$//e
catch /E32:/
echo "Sorry, the file is not saved."
endtry
let @/=_s
call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()
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!
/),/s/),/)\r/g
mengubah sesuatu seperti ini:
blacklist-extra: i386 (0.4.1, 0.4.1 + nmu1), libmount1: i386 (2.20.1-5.1, 2.20.1 -5.2), libblkid1: i386 (2.20.1-5.1, 2.20.1-5.2) , libapt-pkg4.12: i386 (0.9.7.4, 0.9.7.5), nmap: i386 (6.00-0.1, 6.00-0.2), libsane-common: i386 (1.0.22-7.3,
menjadi sesuatu seperti ini:
26 libwv-1.2-4: i386 (1.2.9-3, otomatis)
27 openjdk-6-jre-headless: i386 (6b24-1.11.4-3, otomatis)
28 jed: i386 (0.99.19-2.1)
Sihir. Saya sangat berterima kasih