Ben ^M
vimrc karakter almaya devam ve benim yapılandırma bozar.
:digraphs
Vim içine yazmak , @LightnessRacesinOrbit'in bağlı olduğu digraph tablosunu gösterir.
preg_replace('/[\x01]/', ' ' ,$str);
umarım yardımcı olur.
Ben ^M
vimrc karakter almaya devam ve benim yapılandırma bozar.
:digraphs
Vim içine yazmak , @LightnessRacesinOrbit'in bağlı olduğu digraph tablosunu gösterir.
preg_replace('/[\x01]/', ' ' ,$str);
umarım yardımcı olur.
Yanıtlar:
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. ^M
vim'in 0xD gösterme şekli olduğu için olur (0x0D = 13, M İngiliz alfabesindeki 13. harftir).
^M
Aşağıdakileri çalıştırarak tüm karakterleri kaldırabilirsiniz :
:%s/^M//g
Nerede ^M
bası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 ^M
dizilerini boş dizeyle değiştirir (yani hiçbir şey). Bunu ^M
Windows'tan Unix'e (Solaris, Linux, OSX) kopyalanan dosyalardan kurtulmak için kullanıyorum .
^M
Dosyada 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 . ^M
Karakteri 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).
vi
bu 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.
:%s/\r//g
değiştirmek için kullanmam gerekiyordu . ^ V ^ M kalıbı içinde bir sürü ^ M karakterim vardı dosyada bulunamadı.
:%s/\r//g
bugün benim için çalıştı. Ama durumum biraz farklı olabilir.
:%s/\r//
yeterli olur.
Yeni satırı kaldırmak yerine çevirmek için:
:%s/\r/\r/g
\r
arama 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 .
:%s/\r//g
Bir Mac kullanıcısı aracılığıyla orijinal olarak bir Windows Machine üzerinde oluşturulan bir metin dosyası var ve load data
komutu 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ı! file
Komutun 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ı.
Unix'te 'tr' komutunu kullanmak daha kolaydır.
cat file1.txt | tr "\r" "\n" > file2.txt
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 sed
komutlar GNU / Linux sürümünde çalışır, sed
ancak BSD'lerde (macOS dahil) ince ayar yapılması gerekebilir.
Bunu kullanarak vim'de düzeltebilirsiniz
:1,$s/^V^M//g
burada ^ kontrol karakteridir.
^M
olduğunu açıklamaz .
Benim durumumda işe yarayan tek şey bu:
:e ++ff=dos
:wq
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
FreeBSD'de, ^M
aşağıdakileri yazarak manuel olarak temizleyebilirsiniz :
:%s/
Ctrl+ V, sonra Ctrl+ M, sonra Ctrl+ Mtekrar.
fileformat
Bilerek farklı bir şey belirtmediyseniz (örneğin, :e ++ff=unix
bir 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 fileformat
ayarlandığında unix
bunu okurken Vim tarafından otomatik olarak ^M (<CR>)
görünecektir. Bu gibi durumlarda fileformats
devreye girer. Ayrıntılar :help ffs
için bakınız.