^ M karakteri Vim'de ne anlama geliyor?


500

Ben ^Mvimrc karakter almaya devam ve benim yapılandırma bozar.


35
BTW bu harika bir kaynak.
Yörüngedeki Hafiflik Yarışları

@LightnessRacesinOrbit - Hm, şimdi de formlar çalışıyor. Bağlantının öldüğünü söyleyerek yorumumu geri çektim.
ArtOfWarfare

3
Şu anda kapalı olan @LightnessRacesinOrbit bağlantısı için ayna: fifi.org/doc/vim/html/digraph.html#digraph-table
alexpls

4
:digraphsVim içine yazmak , @LightnessRacesinOrbit'in bağlı olduğu digraph tablosunu gösterir.
askewchan

1
Bu tür bir karakteri php kullanarak değiştirmeye çalışırken, bu preg_replace('/[\x01]/', ' ' ,$str); umarım yardımcı olur.
Rachel Geller

Yanıtlar:


561

Unix, yeni satır karakteri için 0xA kullanır. Windows iki karakterden oluşan bir kombinasyon kullanır: 0xD 0xA. 0xD, satır başı karakteri. ^Mvim'in 0xD gösterme şekli olduğu için olur (0x0D = 13, M İngiliz alfabesindeki 13. harftir).

^MAşağıdakileri çalıştırarak tüm karakterleri kaldırabilirsiniz :

:%s/^M//g

Nerede ^Mbasılı tutarak girilir Ctrlve yazarak vizledi mve ardından serbest Ctrl. Bu bazen olarak kısaltılır ^V^M, ancak kelimenin tam anlamıyla yazmak yerine bir önceki cümlede açıklandığı gibi girmeniz gerektiğini unutmayın.

Bu ifade, tüm ^Mdizilerini boş dizeyle değiştirir (yani hiçbir şey). Bunu ^MWindows'tan Unix'e (Solaris, Linux, OSX) kopyalanan dosyalardan kurtulmak için kullanıyorum .


9
Windows'da olmanız durumunda, Ctrl + V muhtemelen yapıştırmak için eşlenir. Bu durumda, varsayılanlar "özel karakter kaçış" anahtarını Ctrl + Q ile yeniden eşler.
R. Martinho Fernandes

8
Asıl soru, Vim'in bazen satır sonlarını otomatik olarak algılaması ve bazen doğru göstermesi, bazen göstermemesi.
Scott

10
^MDosyada eşleşmeyen satır sonları varsa karakter görürsünüz . Tomasz tarafından sağlanan komutu kullanın, ardından :fileformat={unix|dos|mac}hedeflediğiniz işletim sistemine bağlı olarak yazın . ^MKarakteri olmayan sadece birkaç satır varsa, muhtemelen istersiniz :fileformat=dos. Dosyaları vim dışında bir düzenleyicide düzenliyorsanız, satır sonlarıyla eşleşecek şekilde yapılandırıldığından emin olun (Not Defteri bunu yapmaz, ancak Notepad ++ veya TextMate gibi saygın bir düzenleyici çalışır).
Mikkel Paulson

9
Yeni başlayanlar için vibu komutun elle yazılması gerektiğini unutmayın . Sadece viçalışan açık bir terminale yapıştırmak "model bulunamadı" hatasına neden olacaktır.
IQAndreas

51
@bluesm Aslında dosyamdaki satır başlarını :%s/\r//gdeğiştirmek için kullanmam gerekiyordu . ^ V ^ M kalıbı içinde bir sürü ^ M karakterim vardı dosyada bulunamadı.
jonnybot

139
:%s/\r//g 

bugün benim için çalıştı. Ama durumum biraz farklı olabilir.


1
g seçeneği gerekli değildir, her satırda yalnızca bir yeni satır vardır. :%s/\r//yeterli olur.
frogcoder

7
G seçeneği çok iyi olabilir, çünkü satır başı mutlaka yeni satır değildir. Unix modunda açıldığında, satır başı yalnızca başka bir karakterdir ve Windows modunda açıldığında satır başı yalnızca özeldir ve ardından satır beslemesi gelir.
Jonathan Baldwin

65

Yeni satırı kaldırmak yerine çevirmek için:

:%s/\r/\r/g

2
Bunun gerçekte ne yapması gerekiyor? Bana göre, bunun gibi bir ikame yapıyor gibi görünüyor, ki hiçbir şeyi değiştireceğini hayal edemiyorum. Sözdiziminin burada nasıl çalıştığı hakkında özel bir şey mi kaçırıyorum?
Platinum Azure

16
@PlatinumAzure Neden kimsenin sorunuzu cevaplamayı düşünmediğini bilmiyorum. \rarama bölümünde, değiştirme parçasına göre farklı davranışlar gösterir. Örneğin, stackoverflow.com/a/3834303 adresine bakın .

Veya buraya:%s/^V^M/^V^M/g bakın
tomd

@TomD Bağlantı, yorum yaptığınız yanıtı ifade eder.
bzeaman

Benim için bu can sıkıcı karakterlerin yerini yeni bir satırsonu ile değiştirdi. @ dlk5730 cevap benim için daha iyi çalıştı. ie:%s/\r//g
marcusshep

37

Muhtemelen satır başı aldığınız anlamına gelir (farklı işletim sistemleri satır sonunu belirtmek için farklı yollar kullanır).

dos2unixDosyaları düzeltmek veya vim'deki dosya biçimlerini ayarlamak için kullanın :

set ffs=unix,dos

19

Diyelim ki metin dosyanız - file.txt, sonra bu komutu çalıştırın -

dos2unix file.txt 

Metin dosyasını dos'dan unix formatına dönüştürür.


Mükemmel çalışıyor !
robe007

9

Bir Mac kullanıcısı aracılığıyla orijinal olarak bir Windows Machine üzerinde oluşturulan bir metin dosyası var ve load datakomutu kullanarak bir Linux MySQL DB içine almak gerekiyordu .

VIM '^ M' karakterini gösterse de, yukarıdakilerin hiçbiri benim özel sorunum için işe yaramadı, veriler içeri aktarılacaktı, ancak her zaman bir şekilde bozuldu. Çözüm sonunda (çok hayal kırıklığı sonra) oldukça kolaydı.

Çözüm: dos2unix TWICE'ı aynı dosyada çalıştırmak hile yaptı! fileKomutun kullanılması, yol boyunca neler olduğunu gösterir.

$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators

$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators

$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text

Ve dosyanın son sürümü veritabanına mükemmel bir şekilde aktarıldı.


9

Unix'te 'tr' komutunu kullanmak daha kolaydır.

cat file1.txt | tr "\r" "\n" > file2.txt

9

Hepsini sed ile kaldırdım:

sed -i -e 's/\r//g' <filename>

Farklı bir dize veya karakterle de değiştirilebilir:

sed -i -e 's/\r/string/g' <filename>

Bu sedkomutlar GNU / Linux sürümünde çalışır, sedancak BSD'lerde (macOS dahil) ince ayar yapılması gerekebilir.




2

Yapılandırmanızı bozarsa ve eşlemelerde ^ M karakterleri gerekiyorsa, ^ M karakterlerini yalnızca <Enter>veya çift olarak değiştirebilirsiniz <C-m>(her ikisi de sırasıyla basit karakter dizileri olarak yazılır, böylece sırasıyla 7 ve 5 karakter).

Eşlemelerde özel anahtar kodlarını depolamanın önerilen tek, taşınabilir yolu budur


2

FreeBSD'de, ^Maşağıdakileri yazarak manuel olarak temizleyebilirsiniz :

:%s/ Ctrl+ V, sonra Ctrl+ M, sonra Ctrl+ Mtekrar.


1

fileformatBilerek farklı bir şey belirtmediyseniz (örneğin, :e ++ff=unixbir Windows dosyası için), hedef dosyada karışık EOL'ler olması muhtemeldir.

Bir dosya ile bazı çizgiler varsa, örneğin, <CR><NL>ile sonlar ve diğerleri <NL>sonlar ve fileformatayarlandığında unixbunu okurken Vim tarafından otomatik olarak ^M (<CR>)görünecektir. Bu gibi durumlarda fileformatsdevreye girer. Ayrıntılar :help ffsiçin bakınız.


0

Homebrew Mvim örneğimin filetype = dos kullanmak üzere ayarlanmış olması nedeniyle dosyaları haftalardır kirlettiğimi keşfettim. .Vimrc'de gerekli değişikliği yaptı ....


0

denemek :%s/\^M//en azından bu benim için çalıştı.

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.