^ M ile biten her satırda vim gösterileri
Bunu 'normal' linebreak ile nasıl değiştirebilirim?
^ M ile biten her satırda vim gösterileri
Bunu 'normal' linebreak ile nasıl değiştirebilirim?
Yanıtlar:
Benim için işe yarayan tek şey bu:
: e ++ ff = dos
:e ++ff=dosardından :set ff=unixsonları aklı başında bir aklına dönüştürür.
:%s/<Ctrl-V><Ctrl-M>/\r/g
Burada <Ctrl-V><Ctrl-M>aracı tipi Ctrl+ Vo Ctrl+ M.
:%s
yedek,% = tüm satırlar
<Ctrl-V><Ctrl-M>
^ M karakterleri (Ctrl-V, Ctrl ^ karakterini yazmanın Vim yoludur ve Ctrl-M, M ifadesini normal ifadeden sonra yazar ve ^ M özel karakterine neden olur)
/\r/
yeni satırla ( \r)
g
Ve küresel olarak yapın (sadece hattaki ilk olay değil).
:%s/<Ctrl-V><Ctrl-M>/\r/g(burada ^ M, yeni satırla değiştirilir).
Linux ve Mac OS'de aşağıdakiler çalışır,
:%s/^V^M/^V^M/g
burada + ^V^Mtürü , ardından +CtrlVCtrlM .
Not: Windows'da muhtemelen ^Qyerine kullanmak istersiniz ^V, çünkü varsayılan ^Volarak metin yapıştırmak için eşlenir.
%s/\r/\r/gSadece ^Msatır sonunda (MacVim açısından bir uzun çizgi) gösteren bir dosya için eşdeğer MacVim üzerinde iyi çalıştı bulundu . Açıkça bu komutun yedek parçaları vs desen farklı şeyler anlamına gelir.
İçinde vim, dosya biçimine bakın - DOS veya Unix:
:set filetype=unix
:set fileformat=unix
Dosya, satır başı (CR, ^ M) karakterleri olmadan geri yazılır.
set ff=unixaynı şekilde biraz kısayol olarak ftbir kısayol içindirfiletype
MacVim'de görülen BBEdit ile oluşturduğum bir dosya ^M, normal olanlar yerine bir grup satır döndürme görüntülüyordu . Aşağıdaki dize değiştirme sorunu çözdü - umarım bu yardımcı olur:
:%s/\r/\r/g
İlginç çünkü satır sonlarını aynı karakterle değiştiriyorum, ancak Vim'in doğru bir şekilde görüntülenmesi için yeni bir \ r alması gerektiğini düşünüyorum. Bunun neden işe yaradığının altında yatan mekaniği bilmek isterim.
\rkarakterlerin yerine geçiyor gibiydi . Şikayet değil, tam olarak istediğim buydu. Sadece garip. \n\r
İlk olarak, :set ff?dosyanızın dosya biçimini bulmak için kullanın .
Sanırım olabilir unix, o zaman sorun fileformat=dossatır sonuna "^ M ^ J" ekleyerek oluşturuldu ama flieformat=unix"^ M" orada bırakarak, sadece satır sonunda "^ J" kaldırarak okuyun .
Sadece giriş :e ++ff=dosVim komut satırında dos unix adresinin dosyanın biçimini değiştirmek için. Sorunu çözmeli. Değilse, :%s/\r//gsize yardımcı olmalıdır.
:e ++ff=dossonra :set ff=unixve:w
^ M karakteri eşleştirmek için görsel olarak seçmek ve daha sonra almak için panoya OS kopyala komutunu kullanmak zorunda kaldı. Replace komutunu denemeden önce karakteri arayarak test edebilirsiniz.
/^M
ilk bozuk satırı seçmeli
:%s/^M/\r/g
tüm hatalı ^ M, satır başı ile değiştirilir.
Bu, gvim 7'ye dayanan MacVim'deki işlevler gibidir.
DÜZENLE:
Windows için Ubuntu olan Windows 10 makinemde tekrar bu sorunu yaşıyorum ve bunun vim için dosya biçimi sorunlarına neden olduğunu düşünüyorum. Bu durumda ff'yi unix, mac veya dos olarak değiştirmek, ^ M'yi ^ J olarak değiştirmek ve tekrar geri dönmek dışında bir şey yapmaz.
Bu durumda çözüm:
:%s/\r$/ /g
:%s/ $//g
Bu rotaya gitmemin sebebi, dosyamda yıkıcı olmadığımdan emin olmak istedim. Ben olabilirdi :%s/\r$//gama bu hemen satır taşıma silerdi ve beklenmedik sonuçlara sahip olabilirdi. Bunun yerine, tekil CR karakterini, burada bir ^ M karakterini bir boşluğa dönüştürüyoruz ve ardından satırların sonundaki tüm boşlukları kaldırıyoruz (bu benim için istenen bir sonuçtur)
Uzun süredir cevaplanan eski bir soruyu canlandırdığım için özür dilerim, ama bazı karışıklıklar var gibi görünüyordu ve bu google aramalarında yüksek çıktığı için bunların bir kısmını temizlemeye yardımcı olacağımı düşündüm.
Bunların hiçbiri benim için çalışmadı, bu yüzden denedim, işe yarayan:
tip :%s/
basın CTRL-VCTRL-M
tip //g
basın Enter
Yani Vim'deki genel komut şuna benziyor :%s/^M//g
Bu ne yapar: :%s(bul ve değiştir) /^M/(bu sembol) /(karakter içermez) g(global olarak).
^ M tarafından alınır Ctrl+ Vve Mbunu,
s/^M//g
Ctrl kullanmaya gerek kalmadan:
:%s/\r$//
Benim için işe yarayan basit şey
dos2unix filename
Bunu sed ile yaptım:
sed -i -e 's/\r/\n/g' filename
sed -e 's/\r/\n/g' <<< 'over and over'->oven and oven
sedama BSD için değil sed(OSX'te olduğu gibi). Hat kırıklarını düzelten herkes muhtemelen işletim sistemlerinin bir karışımı ile çalışıyor, bu nedenle cevabın ne zaman çalışacağı konusunda net olmak yararlıdır.
Peki ya:
:%s/\r//g
Bu tamamen benim için çalıştı.
Bunun yaptığı, tüm satırların satır sonunu temizlemek, ^ M'yi kaldırıyor ve hepsi bu.
Bu sorunun başka birçok yanıtı var, ancak bir komut satırı çözümüne ihtiyaç duyduğum için, aşağıdakiler benim için en iyisi:
vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile
Açıklama:
myfile:e ++ff=dosDos satırı sonları olarak tüm dosyanın yeniden yüklenmesini zorlamak için .:w ++ff=unixUnix satır sonlarını kullanarak dosyayı yazmak için çalıştırınCtrl+ Mpenceremi en aza indirir, ancak Ctrl+ Enteraslında bir ^Mkarakter ekler . Ayrıca kaldırmak için emin olmak zorunda kaldıCtrl presler arasında anahtarı dikkat etmeliydim.
Benim için çözüm şuydu:
:%s/<Ctrl-V><Ctrl-Enter>/\r/g
Nerede <Ctrl-V><Ctrl-Enter>için araçlar uzun süreli basın Ctrl , basın ve bırakın V, basın ve bırakın Enter, ardından serbest bırakılması Ctrl .
Zaten bir görünmez olduğundan yukarıdaki çözüm, mevcut satır aralarında bir satır daha katacak \rsonra ^M.
Bunu önlemek için, ^Mkarakterleri değiştirmeden silmek istersiniz .
:%s/<Ctrl-V><Ctrl-Enter>//g
Nerede %aracı "bu tamponda," svasıta "yerine," /araçlar "(bulmak) Aşağıdaki desen," <Ctrl-V><Ctrl-Enter>almak için tuşlara karşılık gelir ^M, (yukarıya bakınız) karakterini //desenle (veya" araçlar "hiçbir şey" boş olan bu iki eğik çizgi arasında) ve bir satırdaki ilk oluşumun aksine "küresel" anlamına gelen gbir bayraktır .
Bu benim için çalıştı:
\nsatır sonu)Yani vim'de:
:set ff=unix
:w
Benim durumumda,
Yukarıdaki hiçbir şey işe yaramadı, Mac bilgisayarımdan Linux makinesine kopyalanan bir CSV dosyası vardı ve yukarıdaki tüm komutları kullandım, ancak aşağıdakilerden başka hiçbir şey yardımcı olmadı
tr "\015" "\n" < inputfile > outputfile
^ M karakterleri aşağıdaki gibi satırlar arasında sandwitched bir dosya vardı
Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
Alternatif olarak, bunu yapmak için dos2unix ve unix2dos adı verilen açık kaynak yardımcı programları vardır. Linux sisteminde muhtemelen varsayılan olarak kurulurlar; bir windows sistemi için bunları http://www.bastet.com/ adresinden indirebilirsiniz .
sed s/^M//g file1.txt > file2.txt
burada ^ M aynı anda 3 tuşa basılarak yazılır, ctrl + v + m
Aşağıdaki komutlardan birini kullanın:
:%s/\r//g
Veya
:%s/\r\(\n\)/\1/g
Bu benim için çalıştı:
:% s/\r\n/\r
Bu önerilerin hiçbiri, ^Mhem vim hem de tutulma ile çalışırken bir miktar satır sonu almayı başardığım için çalışmıyordu. Dış bir dava ile karşılaştığımdan şüpheliyim ama yaptığım birine yardım etmesi durumunda.
:%s/.$//g
Ve sorunumu çözdü
:g/^M/s// /g
^MKullanarak yazarsanızShift+6 Caps+M kabul etmez.
Yazmanız gerekiyor ctrl+v ctrl+m.
^Mistenmeyen satır sonları verir. Bunun üstesinden gelmek için sedkomutu aşağıdaki gibi kullanabiliriz :
sed 's/\r//g'
Sadece set binary.vimrc'nizden kaldırın !
sedMacOS'ta kullanmak için şunu yapın:
sed -i.bak $'s/\r//' <filename>
Açıklama: Buradaki $'STRING'sözdizimi bash kabuğuyla ilgilidir. Mac'ler \rözel karakter olarak değerlendirilmez. Komut dizesini belirterek $''kabuğa ANSI-C standardında belirtilen \rgerçek \rkarakterle yer değiştirmesini söylersiniz.
"Bu işlev atlamaların listesini korur
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()
Bir öğleden sonra \ n ctrl-v 012 (her ikisi de bana null kaynağı) ile mücadele ederek geçirdim. ve metagraflarınkine ulaşıncaya kadar bu iş parçacığıyla çalıştı.
\r benim için iyi çalıştı!
/),/s/),/)\r/g
böyle bir şey döndü:
kara liste-ekstra: 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-ortak: i386 (1.0.22-7.3,
böyle bir şeye:
26 libwv-1.2-4: i386 (1.2.9-3, otomatik)
27 openjdk-6-jre başsız: i386 (6b24-1.11.4-3, otomatik)
28 jed: i386 (0.99.19-2.1)
Sihirli. Çok minnettarım