web-dev-qa-db-ja.com

^ M文字はVimとはどういう意味ですか?

Vimrcに^Mという文字が表示され続けますが、設定が壊れます。

441
Max

Unixは改行文字に0xAを使います。 Windowsは2つの文字の組み合わせを使用します。0xD 0xA。 0xDはキャリッジリターン文字です。 ^Mはたまたまvimが0xDを表示する方法です(0x0D = 13、Mは英語のアルファベットの13文字目です)。

次のコマンドを実行すると、すべての^M文字を削除できます。

:%s/^M//g

^Mを押したままにする場所 Ctrl とタイピング v に続く mそして解放する Ctrl。これは^V^Mと省略されることがありますが、文字どおりに入力するのではなく、前の文の説明に従って入力する必要があります。

この式は、すべての^Mを空の文字列に置き換えます(つまり、何もしません)。私はこれを使用して、WindowsからUnix(Solaris、Linux、OSX)にコピーされたファイルの^Mを取り除きます。

506
Tomasz Stanczak
:%s/\r//g 

今日私のために働いた。しかし、私の状況は少し違うかもしれません。

125
dlk5730

新しい行を削除せずに翻訳するには

:%s/\r/\r/g
57
Mori

それはおそらくあなたがキャリッジリターンを持っていることを意味します(異なるオペレーティングシステムは行末を知らせるために異なる方法を使用します)。

dos2unixを使ってファイルを修正するか、vimでファイルフォーマットを設定します。

set ffs=unix,dos
36
cnicutar

あなたのテキストファイルが - file.txtであるとしましょう、そしてこのコマンドを実行します -

dos2unix file.txt 

テキストファイルをdosからunixフォーマットに変換します。

15
akritaag

Unixでは、おそらく 'tr'コマンドを使うほうが簡単です。

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

私はそれらをすべてsedで削除しました。

sed -i -e 's/\r//g'

別の文字列や文字に置き換えることもできます。

sed -i -e 's/\r/string/g'

7
Freedom_Ben

私はもともとWindowsマシン上でMacユーザーによって生成されたテキストファイルを手に入れ、load dataコマンドを使用してそれをLinux MySQL DBにインポートする必要がありました。

VIMには '^ M'という文字が表示されていましたが、上記のどれも私の特定の問題に対しては機能しませんでしたが、データはインポートされますが常に何らかの方法で破損しました。解決策は結局はかなり簡単でした(多くのフラストレーションの後)。

解決策:同じファイルに対してdos2unix _を2回_ を実行するとうまくいきます。 fileコマンドを使用すると、その過程で何が起こっているのかがわかります。

$ 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

そしてファイルの最終バージョンはデータベースに完全にインポートされました。

5
Anthony Palmer

あなたはvimでこれを修正することができます。

:1,$s/^V^M//g

^は制御文字です。

4
Scott C Wilson

これが私の場合うまくいった唯一のことです。

:e ++ff=dos

:wq

3
Sardeep Lakhera

設定が壊れていて、マッピングで^ M文字が必要な場合は、単に^ M文字を<Enter>または<C-m>に置き換えることができます(どちらも単純な文字シーケンスとして入力されるので、それぞれ7文字と5文字)。

これは、マッピングに特別なキーコードを格納するための、お勧めのポータブルな方法です。

2
sehe

FreeBSDでは、次のように入力して^Mを手動で消去することができます。

:%s/ Ctrl+Vそれから Ctrl+Mそれから Ctrl+M 再び。

2
Victor Ong

意図的に別のfileformatを指定しなかった場合(たとえば、Windowsファイルの場合は:e ++ff=unix)、ターゲットファイルにEOLが混在している可能性があります。

例えば、ファイルに<CR><NL>の末尾と<NL>の末尾を持つ行がいくつかあり、その読み込み時にVimによってfileformatが自動的にunixに設定されると、^M (<CR>)が表示されます。そのような場合、fileformatsが効力を発揮します。詳細は:help ffsを見てください。

1
ebk

私のHomebrew Mvimインスタンスがfiletype = dosを使うように設定されていたために、何週間もファイルを汚染していることがわかりました。 .vimrcに必要な変更を加えました....

0
nichg

:%s/\^M//を試してください少なくともこれは私のために働いた。

0
xuc