Windows'da oluşturduğum dosyaları açarsam, satırların tümü ile biter ^M.
Bu karakterleri bir kerede nasıl silebilirim?
Windows'da oluşturduğum dosyaları açarsam, satırların tümü ile biter ^M.
Bu karakterleri bir kerede nasıl silebilirim?
Yanıtlar:
dos2unix bunu yapacak bir komut satırı yardımcı programıdır veya ^ M'yi girmek :%s/^M//giçin Ctrl- v Ctrl- mkullanırsanız veya :set ff=unixvim bunu sizin için yapar.
'Dosya biçimi' ayarındaki dokümanlar burada ve vim wiki'nin satır sonu dönüşümleriyle ilgili kapsamlı bir sayfası var .
Alternatif olarak, dosyaları çok fazla ileri geri taşırsanız, onları dönüştürmek istemeyebilirsiniz, daha ziyade yapmak istersiniz :set ff=dos, bu yüzden vim bunun bir DOS dosyası olduğunu ve satır sonları için DOS kurallarını kullanacağını bilecektir.
:%s/^M//golmalıdır :%s/\r//g, çünkü ^M"satır başındaki" M "eşleme sermayesi" anlamına gelir.
:%s/\r//gbenim için çalıştı, şerefe @Bunyk
set ff=unixhiçbir şey yapmaz. Belki dosyayı dönüştürür, ancak tüm ^Mkarakterler hala oradadır.
Görünümdeki satır sonlarını değiştirin:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Bu, kaydetme işlemi olarak da kullanılabilir (: w, yalnızca ekranda gördüğünüz satır sonlarını kullanarak kaydetmez):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
Ve komut satırından kullanabilirsiniz:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
:w +ff=unixburada yazılı diğer şeylerin çoğundan çok daha güzel ve bash betiği güzel bir bonus.
:eKomutlar yüklemek Vim benim Windows üzerinde hiçbir şey görünmüyor. Benim görüşüm hala ^Mkodları gösteriyor .
Tipik olarak kullanıyorum
:%s/\r/\r/g
Bu biraz garip görünüyor, ancak vim'in hat yemleriyle eşleşmesi nedeniyle çalışıyor. Ayrıca hatırlamayı daha kolay buluyorum :)
:set ff=unix, ancak bugün açtığım dosya özellikle garip olmalı. Vim zaten olduğunu fileformat=unixama bütün satır sonlarının olduğunu söyledi ^M. Bu çözüm benim için çalıştı.
:%s/\r//gonun yerine benim için çalışıyor.
:%s/\r//g, özellikle DOS ve UNIX tarzı yeni satırların heterojen bir karışımını içeren karışık mod dosyaları için tek genel amaçlı çözümdür. Kanonik çözümler (örneğin :set ff=unix, :e ++ff=unix) aynı satır tarzında akım tampon uçlarının her satırını varsayalım. Bazen yaparlar; bazen değil. Sadface işaret.
Aşağıdaki komutu kullanmayı tercih ederim:
:set fileformat=unix
Ayrıca, macveya dosdosyanızı sırasıyla macintosh veya MS-DOS / MS-Windows dosya kuralına dönüştürmek için de kullanabilirsiniz . Ve dosya zaten doğru biçimde ise hiçbir şey yapmaz.
Daha fazla bilgi için vim yardımına bakın:
:help fileformat
^Mgörüşümde hala karakter var.
set fileformat=unix.Vimrc dosyama ekleme işlemi yapıldı .
:set fileformat=unix dos biriminden unix birimine dönüştürmek için.
from: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
@ https://gist.github.com/sparkida/7773170
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
ayrıca, yukarıda belirtildiği gibi ^ M = Ctrl+V+ Ctrl+M(sadece "^" işaretini ve M harfini yazmayın)
dos2unix dosya içeriğini doğrudan değiştirebilir.
Geçici dosya yönlendirmesine gerek kalmadan doğrudan dosya üzerinde kullanabilirsiniz.
dos2unix input.txt input.txt
Yukarıda varsayılan ABD klavyesi kullanılır. -İngiltere klavyesini kullanmak için 437 seçeneğini kullanın.
dos2unix -437 input.txt input.txt
tr -d '\15\32' < winfile.txt > unixfile.txt
(bkz: http://kb.iu.edu/data/acux.html )
Aşağıdaki adımlar dos için dosya biçimini unix'e dönüştürebilir:
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]
:w Write buffer using unix (LF-only) line endings.
Referans: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
^ M'nin görünmesi hakkındaki yorum benim için işe yaradı. Sadece benim vi "^ M" yazmak hiçbir şey (bulunamadı) var. CTRL+ V CTRL+ MDizisi mükemmel olsa bunu yaptı.
Çalışma yerine koyma komutum
:%s/Ctrl-V Ctrl-M/\r/g
ve ekranımda şöyle görünüyordu:
:%s/^M/\r/g
:%syerine :1,$s. %kısaltmasıdır 1,$.
Çok kolay bir yol buldum: Dosyayı nano ile açın: nano file.txt
Basın CTRL+ Okaydetmek için, ancak basmadan önce Enterbasın: ALT+ DDOS ve Unix / Linux hat-sonları betwen geçiş yapmak için, ya da: ALT+ MMac ve Unix / Linux hat-sonları betwen sonra basın geçiş yapmak için Enterkaydetmek ve CTRL+ Xçıkmak için.
^Msonları vardı . tutmak için dos olarak kaydedin, kaldırmak için linux olarak kaydedin. kullanarak kontrol edebilirsinizcat -v
Kullanabilirsiniz:
vim somefile.txt +"%s/\r/\r/g" +wq
veya dos2unix utility.
Vim'de şunu yazın:
:w !dos2unix %
Bu, geçerli arabelleğinizin içeriğini dos2unix komutuna aktaracak ve sonuçları geçerli içeriklerin üzerine yazacaktır. Vim dosyayı yeniden yüklemeyi isteyecek
Genellikle bunun için kullanabileceğiniz bir dos2unixkomut vardır, GNU ve BSD sürümleri argümanlarla nasıl başa çıktıklarına göre farklılık gösterdiğinden kılavuzu okuduğunuzdan emin olun.
BSD sürümü:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
GNU sürümü:
dos2unix $FILENAME
Alternatif olarak, dos2unixburada önerilen cevaplardan herhangi biriyle kendinizinkini oluşturabilirsiniz , örneğin:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
Bunu bir yerlerde gördüğümü biliyordum. İşte FreeBSD giriş ipucu:
Tüm bu ^ M karakterlerini bir DOS dosyasından kaldırmanız mı gerekiyor? Deneyin
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
Bu konu çok eski olmasına rağmen, wikia'dan başka bir şey daha koymak istiyorum:
%s/\r\+$//g
bu dolgu satır sonuna kadar tüm satırbaşı işaretlerini (bir ve daha fazla tekrar) bulun ve silin, bu yüzden sadece \neol'de kalacaktır.
Bu benim yolum. Dos EOL'de bir dosya açtım ve dosyayı otomatik olarak unix EOL'ye dönüştürecek dosyayı kaydettiğimde
autocmd BufWrite * :set ff=unix
Windows'ta NotePad veya NotePad ++ ile bir dosya oluşturup Linux'a getirip vim ile açarsanız, her satırın sonunda ^ M görürsünüz. Bunu kaldırmak için,
Linux terminalinize şunu yazın
dos2unix dosyaadı.ext
Bu gerekli sihri yapacak.
^ M yerine satırsonu istedim. Kurtarmaya Perl:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
Veya stdout'a yazmak için:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
hexdump -C badfileve0x0d 0x0a"\r\n"bunun sizin probleminiz olduğunu görürseniz .