^ M vim'deki her satırın sonunda


132

Kaynak dosyaları vim ve diğer düzenleyicileri kullanarak düzenlerken bazen satırın sonunda bu ^ M karakterlerini her satırın sonunda alıyorum. Sanırım bir dosyayı Windows'ta ve sonra linux'da düzenlemekle ilgisi var. Bunların hepsini otomatik olarak nasıl kaldırabilirim?


18
Bunun nedeni, Windows'un bir satır sonunu temsil etmek için iki karakterli bir dizi (normalde "\ r \ n" yazılır) kullanması, ancak UNIX / Linux'un bir satır sonunu temsil etmek için yalnızca ikinci "\ n" karakterini kullanmasıdır. Bu nedenle, bir Linux düzenleyicide bir Windows metin dosyasını düzenlediğinizde, düzenleyici satır sonlarının bir parçası olarak görmediği fazladan karakterler görür, bu yüzden onları oluşturmaya çalışır ve çıkan şey ^ M'dir.
David Z

13
Bundan biraz daha fazlası var David. Vim, tüm bu URL'leri göstermeden, DOS satır sonlarına sahip bir metin dosyasını mutlu bir şekilde düzenleyecektir ^M. Vim'de bir DOS metin dosyasını düzenlerken sahip olduğunuz tek gösterge %{&ff}, statuslineseçenek değerinizde olup olmadığıdır . Vim, ^Mçizgi sonlandırma stilinin ne zaman karıştırıldığını gösterir . Bu, mevcut satır bitiş stilini Vim'in varsayılan olarak yapacağı gibi, Vim kadar anlayışlı olmayan bir metin düzenleyici kullandığınız anlamına gelir. Windows'ta Vim veya onun kalibresinden başka bir şey kullanırsanız, bu şekilde harap olmuş satır sonları almazsınız.
Warren Young

1
vim'de

Yanıtlar:


128

Komut olarak yazın

:%s/^M$//

(^ M elde etmek için, ^ V ^ M'ye basın, burada ^ çoğu klavyede CTRL'dir)


62
ayrıca
,:

8
Veya bir karakter kaydetme::%s/\r$
sehe

2
@sehe teknik olarak 2 karakter kaydeder :)
Chris

@glennjackman, bahşişin çok daha kolaydı, çünkü ^ V + ^ M'yi almak için uğraşıyordum, eğer hiç olmuyorsa. Aldığım tek şey panodaki içerikti (çünkü her ikisini birden elde etmek için farklı stratejilerle defalarca girişimlerime rağmen ^ V her seferinde etkiliydi).
itsraghz

86

DOS satır sonlarını çıkarmanın kolay bir yolu ffseçeneği kullanmaktır :

:set ff=unix
:wq

Şimdi dosyanız Unix-eski güzel yoluna geri döndü.

DOS satır sonlarını eklemek istiyorsanız (bir yazıcıyı mutlu etmek veya güzel araçları olmayan Windows arkadaşlarıyla dosya aktarmak için) kolayca ters yöne gidebilirsiniz:

:set ff=dos
:wq

8
vim herhangi bir ^ m veya \ r veya diğer satır sonlarını bulamıyordu, ama bu işe yaradı. Teşekkürler :)
SgtPooki

2
Vim herhangi bir ^ M veya \ r bulamazdı, ama bu benim için çalıştı! Teşekkürler @sarnold
7ochem

Git bunu tek bir karakter değişikliği olarak algılamak için çok aptal görünüyor. Bunu Vim'de çalıştırdım ve git diffşovlar her satır silindi ve her satır eklendi: /
Tommy

Tommy, bu bir sınırlama, üzerinde diffdeğil git.
Spidey

34

Bunu yapabilirsiniz:

:set fileformats=dos

^MDosyaya dokunmadan 'leri gizleyecektir .



6

Bu, her şeyin tek satırda olduğu bir dosyada benim için çalıştı:

Önce tüm eşleşmeleri bulun

:%s/^M//

(Almak için ^M, Ctrlçoğu klavyede ^ bulunan ^ V ^ M tuşuna basın )

Ardından yeni satırlarla değiştirin

:%s//\r/g

Kombine komut şöyle olacaktır:

:%s/^M/\r/g

Teşekkürler, Ctrl-M'nin search-replace'a nasıl girileceğini merak ettiniz!
Roboprog

2

Sorunlu dosyaları fromdosyeniden açmadan önce çalıştırma eğilimindeyim . tofrodos paketinin bir fromdosparçasıdır .


1

Sorunun kaynağı bir FTP aktarımı olabilir. Bu dosyaları bir kutudan diğerine FTP ile gönderdiğinizde, ASCII aktarımlarını kullandığınızdan emin olun. "ASC" komutunu kullanın.


0
" put this in your ~/.vimrc file and :source ~/.vimrc
" then you can do: Dos2Unix
" dos2unix ^M
fun! Dos2unixFunction()
    let _s=@/
    let l = line(".")
    let c = col(".")
    try
        set ff=unix
        w!
        "%s/\%x0d$//e
    catch /E32:/
        echo "Sorry, first save the file."
    endtry
    let @/=_s
    call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.