Vimで^ M文字は何を意味しますか?


500

^Mvimrcでキャラクターが増え続け、構成が壊れます。


35
ところでこれは素晴らしいリソースです。
オービットでの軽さのレース2011年

@LightnessRacesinOrbit-うーん、フォームも今は機能します。リンクが切れているとのコメントを撤回しました。
ArtOfWarfare 2015

3
現在ダウンしている@LightnessRacesinOrbitリンクのミラー:fifi.org/doc/vim/html/digraph.html#digraph-table
alexpls

4
:digraphsvim内で入力すると、@ LightnessRacesinOrbitがリンクしているダイグラフテーブルが表示されます。
askewchan

1
phpを使用してこの種の文字を置き換えようとするときは、このpreg_replace('/[\x01]/', ' ' ,$str); Hopeを試してみてください 。
Rachel Geller 2016年

回答:


561

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

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

:%s/^M//g

^M押したままCtrl入力vm、続いて、次にリリースすることで、どこに入るのかCtrl。これはと省略されること^V^Mもありますが、文字どおりに入力するのではなく、前の文の説明に従って入力する必要があることに注意してください。

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


9
Windowsを使用している場合に備えて、Ctrl + Vはおそらく貼り付けにマップされます。その場合は、デフォルトで「特殊文字エスケープ」キーをCtrl + Qに再マッピングします。
R.マルティーニョフェルナンデス

8
本当の質問は、なぜVimが行末を自動的に検出して正しく表示するのか、そうでないのかです。
スコット

10
^Mファイルの行末が一致しない場合、文字が表示されます。Tomaszが提供するコマンドを使用し、:fileformat={unix|dos|mac}ターゲットとするOSに応じて入力します。^M文字のない行が数行しかない場合は、おそらく必要です:fileformat=dos。vim以外のエディターでファイルを編集している場合は、ファイルが行末に一致するように構成されていることを確認してください(メモ帳はこれを行いませんが、メモ帳++やTextMateなどの信頼できるエディターはこれを行います)。
Mikkel Paulson

9
初心者がに注意してくださいvi。そのコマンドは手動で入力する必要があります。vi実行中の開いているターミナルに貼り付けるだけでは、「パターンが見つかりません」というエラーが発生します。
IQAndreas 2013年

51
@bluesm実際に使用:%s/\r//gして、ファイルの改行を置き換える必要がありました。^ V ^ Mパターンは、私が^ M文字の束を持っていたファイルに見つかりませんでした。
jonnybot

139
:%s/\r//g 

今日は私のために働きました。しかし、私の状況は少し異なっていたかもしれません。


1
gオプションは必要ありません。1行に新しい行が1つだけあります。 :%s/\r//十分でしょう。
frogcoder

7
復帰は必ずしも改行ではないため、gオプションが必要になる場合があります。Unixモードで開いた場合、キャリッジリターンは別の文字であり、Windowsモードで開いた場合、キャリッジリターンは特別で、その後に改行が続きます。
ジョナサンボールドウィン

65

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

:%s/\r/\r/g

2
これは実際に何をすることになっていますか?私にとっては、like for likeの置換を行っているように見えますが、何かを変更するとは思えません。ここで構文がどのように機能するかについて何か特別なものがありませんか?
Platinum Azure

16
@PlatinumAzureなぜ誰もあなたの質問に答えようと思ったことがないのか分かりません。\r検索部分と置換部分では動作が異なります。たとえば、stackoverflow.com / a / 3834303をご覧ください。

または :%s/^V^M/^V^M/gこちらを
tomd

@TomDリンクは、コメントしている回答を参照しています。
bzeaman

私にとって、これは迷惑な文字を追加の改行で置き換えました。@ dlk5730の回答は私にとってより効果的でした。ie:%s/\r//g
marcusshep 2017

37

おそらく、キャリッジリターンがあることを意味します(オペレーティングシステムによって、行末の信号を送る方法が異なります)。

dos2unixファイルを修正するか、vimでファイル形式を設定するために使用します。

set ffs=unix,dos

19

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

dos2unix file.txt 

テキストファイルをdosからunix形式に変換します。


完璧に動作します!
robe007

9

最初にMacユーザーを介してWindowsマシンで生成されたテキストファイルを取得し、load dataコマンドを使用してLinux MySQL DBにインポートする必要がありました。

VIMは「^ M」という文字を表示しましたが、上記のどれも私の特定の問題に対しては機能しませんでしたが、データはインポートされましたが、常に何らかの方法で破損していました。結局のところ、このソリューションは非常に簡単でした(多くの不満の後)。

解決策:同じファイルでdos2unix TWICEを実行するとうまくいきました!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

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



9

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

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

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

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

これらのsedコマンドはのGNU / Linuxバージョンでsed動作しますが、BSD(macOSを含む)で微調整が必​​要になる場合があります。


4

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

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

ここで、^は制御文字です。


2
これは何^Mが説明されていません。
オービットでの軽さのレース2011年

2
彼はそれが何であるかを実際に尋ねているのではなく、それを修正する方法を尋ねています。DOSからの復帰文字です。
Scott C Wilson

3
はそれが何であるか知っています。質問のタイトルは、「Vimでの^ M文字の意味」です。
オービットの軽さのレース2011年


2

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

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


2

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

:%s/ Ctrl+ V、次にCtrl+ M、次にCtrl+ Mです。


1

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

たとえば、ファイルが持ついくつかの行がある場合<CR><NL>と語尾など <NL>終末を、とfileformatに設定されているunix、それを読むときにはVimによって自動的に、^M (<CR>)表示されます。そのような場合、fileformats出てきます。詳細:help ffsはをご覧ください。


0

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


0

しようと:%s/\^M//、少なくともこれは私のために働きました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.