^ 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=dos
ardından :set ff=unix
sonları 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^M
türü , ardından +CtrlVCtrlM .
Not: Windows'da muhtemelen ^Q
yerine kullanmak istersiniz ^V
, çünkü varsayılan ^V
olarak metin yapıştırmak için eşlenir.
%s/\r/\r/g
Sadece ^M
satı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=unix
aynı şekilde biraz kısayol olarak ft
bir 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.
\r
karakterlerin 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=dos
satı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=dos
Vim komut satırında dos unix adresinin dosyanın biçimini değiştirmek için. Sorunu çözmeli. Değilse, :%s/\r//g
size yardımcı olmalıdır.
:e ++ff=dos
sonra :set ff=unix
ve: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$//g
ama 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
sed
ama 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=dos
Dos satırı sonları olarak tüm dosyanın yeniden yüklenmesini zorlamak için .:w ++ff=unix
Unix satır sonlarını kullanarak dosyayı yazmak için çalıştırınCtrl+ Mpenceremi en aza indirir, ancak Ctrl+ Enteraslında bir ^M
karakter 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 \r
sonra ^M
.
Bunu önlemek için, ^M
karakterleri değiştirmeden silmek istersiniz .
:%s/<Ctrl-V><Ctrl-Enter>//g
Nerede %
aracı "bu tamponda," s
vası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 g
bir bayraktır .
Bu benim için çalıştı:
\n
satı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, ^M
hem 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
^M
Kullanarak yazarsanızShift+6 Caps+M
kabul etmez.
Yazmanız gerekiyor ctrl+v ctrl+m
.
^M
istenmeyen satır sonları verir. Bunun üstesinden gelmek için sed
komutu aşağıdaki gibi kullanabiliriz :
sed 's/\r//g'
Sadece set binary
.vimrc'nizden kaldırın !
sed
MacOS'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 \r
gerçek \r
karakterle 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