web-dev-qa-db-ja.com

ファイルモードが明示的にDOSであってもgVimがキャリッジリターン(^ M)を表示する

WindowsでgVimを使用しています。コードの行末に^M文字が表示されます。 :set ff=dosを使用しましたが、役に立ちませんでした。 ^M文字は既存の行に残りますが、入力した改行には表示されません。モードをmac(^J文字を表示)とunix(^M文字も表示)に切り替え、dosに戻りました。他の誰かがこれを見ましたか?

76
Jerph

これは、Windowsの行末とUnixの行末が混在している場合に発生します。 100行あり、99が\ r\nで、1行が\ nの場合、99 ^ M文字が表示されます。修正方法は、その1行を見つけて置き換えることです。または、ファイルに対してdos2unixを実行します。 Windowsの行末を次のように置き換えることができます。

:%s/\r\(\n\)/\1/g

139
richq

以下も実行できます。

:e ++ff=dos

^Mを削除するには: ファイル形式– Vim Tips Wiki をご覧ください。

42
beckelmw

私は通常、行末をクリーンアップするために次を使用します。

:g/^M$/s///

Ctrl-Mを取得するには、通常ctrl-Qと入力し、次にctrl-Mと入力します(環境によってはctrl-Vとctrl-Mの場合があります)。理由はわかりませんが、 rq よりも覚えやすいものです。

忘れずに:set ff=dosも同様です。そうしないと、UNIXの行末でまだ保存されてしまいます。

19
Evan

私はこれがすでに回答されていることを知っていますが、私が使用するトリックは

:%s/\r/\r/g

これにより、UNIXのキャリッジリターンがウィンドウCRLFに置き換えられます。他の誰かが問題を抱えている場合に備えて追加しました。

15
dsrekab

これらの文字は無視できます!

これをvimrcに入れて

無視/\r $ /

6
IvanM

実際に私にとってうまくいったのは(64ビットWindows、gVIM:7.2で):

:set ffs=dos

だけでなく:ff

4
ra170

Windows 7でVim 7.3を実行しています。次のコマンドを使用しました。

:%s/^M/\r/g

^ Mを作成するには、CTRL + Q、次にCTRL + Mと入力しました。

4
ddelrio1986

これはおそらくあなたの多くにとっては少し簡単ですが、偶然にも便利です。

Richqの答えに基づいて、これらは私のvimrcで役立つことがわかりました。 Vimはマップされたexコマンドである場合、Vimは別のキーストロークが動作するのを待つため、2番目のコマンドはddを少し混乱させるため、通常はコメントアウトされています。

関数! D2u()
 execute '%s/\ r \(\ n \)/\1/g' 
 endfunction 
 "map d2u:%s/\ r \(\ n \)/\1/g 

1つ目はexにcall D2u()と入力して実行され、2つ目は編集モードでD2uを押して実行されます。

2
Peter Shannon

これらは通常、UNIX/DOS混合システムでファイルを使用しているため、余分なCR行の終わりです。

各行の末尾から^ Mを1つ削除する最短の回答と、私が使用するものは次のとおりです。

:%s/\r

次と同等です:

:%s/\r//

ただし、最後のスラッシュは必要ありません(想定されています)。

2
thebriguy

多くのことを試してみましたが、以下はうまくいきました

:%s/\r/\r/g

注:ファイル全体に効果が必要な場合はgを使用します

1
Atul Subhash