vimのすべての行の終わりに^ M


132

vimやその他のエディターを使用してソースファイルを編集しているときに、行末にこれらの^ M文字が表示されることがあります。Windowsでファイルを編集し、次にLinuxで編集することと関係があると思います。これらのすべてを自動的に削除するにはどうすればよいですか?


18
これは、Windowsが2文字のシーケンス(通常は「\ r \ n」と表記)を使用して改行を表すのに対し、UNIX / Linuxは2番目の文字「\ n」のみを使用して改行を表すためです。したがって、LinuxエディターでWindowsテキストファイルを編集すると、エディターは改行の一部とは見なされない余分な文字を確認するため、それらをレンダリングしようとすると、^ Mになります。
デビッドZ

13
それだけではありません、デビッド。VimはDOSの行末を含むテキストファイルを喜んで編集し、それらすべてを表示することはありませ^Mん。VimでDOSテキストファイルを編集するときに表示される唯一の兆候%{&ff}は、statuslineオプション値があるかどうかです。Vimは^M、行末のスタイルが混在していることを示します。これは、Vimのように既存の行末スタイルに従っていないVimほど精通していないテキストエディターを使用したことを意味します。WindowsでVimやその他の優れた機能を使用している場合、そのような行末の問題は発生しません。
ウォーレンヤング

回答:


128

コマンドとして、

:%s/^M$//

(^ Mを取得するには、^ V ^ Mを押します。ここで、^はほとんどのキーボードでCTRLです)


62
また、:%sの/ \ R $ // ^ V ^ Mの手間を避けるために
グレンはジャックマン

8
または、文字を保存::%s/\r$
sehe

2
@seheは技術的に2文字を保存します:)
Chris

@glennjackman、私は^ V + ^ Mを取得するのに苦労していたので、まったく発生していなかったので、ヒントははるかに簡単でした。私が得ていたのは、クリップボードのコンテンツだけでした(^ Vは毎回有効だったので、両方を取得するためのさまざまな戦略を繰り返し試みたにもかかわらず)。
itsraghz

86

DOSの行末を取り除く簡単な方法の1つは、ffオプションを使用することです。

:set ff=unix
:wq

これでファイルは古き良きUnixの方法に戻りました。

DOSの行末を追加したい場合(プリンターを幸せに保つため、または素晴らしいツールを持っていないWindowsの友達とファイルを転送するため)、反対の方向に簡単に進むことができます。

:set ff=dos
:wq

8
vimは^ m、\ r、またはその他の行末を検出しませんでしたが、これは機能しました。ありがとう:)
SgtPooki 14

2
Vimは^ Mや\ rを見つけることができませんでしたが、これでうまくいきました!ありがとう@sarnold
7ochem

gitは、これを1文字の変更として検出するにはあまりにも馬鹿げているようです。私はこれをVimで実行し、git diffすべての行が削除され、すべての行が追加されたことを示しています:/
Tommy

トミー、それはdiffではなくの制限gitです。
Spidey 2017年

34

あなたはこれを行うことができます:

:set fileformats=dos

^Mファイルに触れずにを非表示にします。


17

これらを取り除くはずのdos2unixというプログラムがあります。Windowsは異なる行末文字を使用しているため、これが発生します。


6

これは、すべてが1行にあるファイルで私にとってはうまくいきました:

最初にすべての一致を見つける

:%s/^M//

(取得するには^M、^ V ^ Mを押します。^はCtrlほとんどのキーボードにあります)

次に改行で置き換えます

:%s//\r/g

結合されたコマンドは次のようになります:

:%s/^M/\r/g

ありがとう、検索置換で実際にCtrl-Mを入力する方法を疑問に思いました!
Roboprog 2013年


1

問題の原因はFTP転送にある可能性があります。これらのファイルをあるボックスから別のボックスにFTP送信するときは、必ずASCII転送を使用してください。コマンド「ASC」を使用します。


0
" put this in your ~/.vimrc file and :source ~/.vimrc
" then you can do: Dos2Unix
" dos2unix ^M
fun! Dos2unixFunction()
    let _s=@/
    let l = line(".")
    let c = col(".")
    try
        set ff=unix
        w!
        "%s/\%x0d$//e
    catch /E32:/
        echo "Sorry, first save the file."
    endtry
    let @/=_s
    call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()

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