web-dev-qa-db-ja.com

Vimで開かれたファイルで^ M改行を '通常の'改行に変換するにはどうすればいいですか?

^ Mで終わるすべての行にvimが表示されます。

これを「通常の」改行に置き換えるにはどうすればよいですか。

461
ByteNirvana

これは私のために働いた唯一のものです:

:e ++ ff = dos

それを見つけました: http://vim.wikia.com/wiki/File_format

110
Pam

コマンド

:%s/<Ctrl-V><Ctrl-M>/\r/g

<Ctrl-V><Ctrl-M>は型を意味します Ctrl+V それから Ctrl+M

説明

:%s

代替、%=すべての行

<Ctrl-V><Ctrl-M>

^ M文字(Ctrl-VはCtrl ^文字を書くためのVimの方法で、Ctrl-Mは正規表現の後にMを書くので、^ M特殊文字になります)

/\r/

改行あり(\r

g

そして、それをグローバルに行います(行の最初の出現だけではありません)。

551

LinuxとMac OSでは、次のように動作します。

:%s/^V^M/^V^M/g

^V^Mは型を意味します Ctrl+Vそれから Ctrl+M

注:Windowsでは、デフォルトで^Qは貼り付けテキストにマップされるため、^Vの代わりに^Vを使用することをお勧めします。

412
Paul Tomblin

vimの中で、ファイルフォーマットを見てください - DOSかUnix:

:set filetype=unix

:set fileformat=unix

ファイルはキャリッジリターン(CR、^ M)文字なしで書き戻されます。

182

MacVim で見たBBEditで作成したファイルは、通常のものではなく^M行のリターンをたくさん表示していました。次の文字列を置き換えることで問題が解決しました - これが役立つことを願っています:

:%s/\r/\r/g

改行を同じ文字に置き換えているので面白いですが、Vimが正しく表示するには新しい\ rを取得するだけでよいと思います。なぜこれが機能するのかという根本的な仕組みを知りたいと思います。

103
netpoetica

まず、:set ff?を使ってあなたのファイルのファイルフォーマットを調べます。

unixかもしれませんが、問題はあなたのファイルがfileformat=dosで行末に "^ M ^ J"を追加して作成されたが、flieformat=unixで行末から "^ J"のみを削除して読み込まれることです。そこ。

ファイルのフォーマットをunixからdosに変更するには、Vimのコマンドラインに:e ++ff=dosを入力するだけです。それは問題を解決するはずです。そうでない場合は、:%s/\r//gが役に立ちます。

34
chenxsan

^ M文字を一致させるには、それを視覚的に選択してからOSのクリップボードへコピーコマンドを使用して取得する必要がありました。 replaceコマンドを試す前に、文字を検索してテストすることができます。

/^M

最初の不良行を選択してください

:%s/^M/\r/g

誤った^ Mをすべてキャリッジリターンで置き換えます。

これはgvim 7をベースにしたMacVimの機能としてです。

編集:

Ubuntu for Windowsを持っている私のWindows 10マシン上でこの問題を再び抱えています、そしてこれはvimのためにファイルフォーマットの問題を引き起こしていると思います。この場合、ffをunix、mac、またはdosに変更しても、^ Mを^ Jに変更してから元に戻すこと以外は何もしませんでした。

この場合の解決策:

:%s/\r$/ /g
:%s/ $//g

私がこの道をたどったのは、自分のファイルを破壊しないようにしたかったからです。私は:%s/\r$//gを持つことができましたが、それはキャリッジリターンをすぐに削除したでしょう、そして予想外の結果をもたらすかもしれませんでした。代わりに、ここでは^ Mという単数形のCR文字をスペースに変換してから、行末のスペースをすべて削除します(これは私にとって望ましい結果です)。

長い間回答されてきた古い質問を復活させて申し訳ありませんが、しばらくしてから混乱が生じているように思われます。Google検索で高まってくるので、その一部を明確にすることをお勧めします。

28
Metagrapher

これらのどれも私のために働いていなかったので、私はこれを試してみました。

タイプ:%s/

押す CTRL-VCTRL-M

タイプ//g

押す Enter

Vimのコマンド全体は:%s/^M//gのようになります。

これが何をするか::%s(検索と置換)/^M/(そのシンボル)/(文字なし)g(グローバル)。

22
d-_-b

Ctrl::%s/\r$//を使わなくても

14
Brian Harman

私のために働いた簡単なこと

dos2unix   filename
12
Shahzeb

私はsedでこれを行いました:

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

12
Freedom_Ben

^ Mはによって検索されます Ctrl+V そして Mそうです

s/^M//g
12
Andrew Sledge

:%s/\r//gそれは私にとって完全にうまくいきました。

これがすることはただすべての行の行末をきれいにすることです、それは^ Mを取り除きます、そしてそれはそれです。

9
tonatiuhnb

この質問に対する答えは他にもたくさんありますが、それでも私はコマンドラインソリューションを必要としているので、次のようにします。

vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile

説明:

  • .vimrcファイルをロードせずにmyfileを開く
  • :e ++ff=dosを実行して、ファイル全体をdos行末として強制的に再ロードします。
  • Unixの行末を使用してファイルに書き込むために:w ++ff=unixを実行します。
  • Vimを終了する
8
Micah Smith

Ctrl+M ウィンドウを最小化しますが、 Ctrl+Enter 実際に^M文字を挿入します。私はまた、持ち上げないでください Ctrl 押す間キー。

だから私にとっての解決策は:

:%s/<Ctrl-V><Ctrl-Enter>/\r/g

<Ctrl-V><Ctrl-Enter>は、長押しを意味します Ctrl、プレスアンドリリース V、プレスアンドリリース Enterそしてリリース Ctrl

Windowsで生成されたファイルで作業している場合

上記のソリューションでは、\rの後に^Mが見えないため、既存の行の間に追加の行が追加されます。

これを防ぐには、^M文字を置き換えずに削除します。

:%s/<Ctrl-V><Ctrl-Enter>//g

ここで、%は「このバッファ内」を意味し、sは「置換」を意味し、/は「(次のパターンを検索)」を意味し、<Ctrl-V><Ctrl-Enter>は押すキーを意味します^M文字(上記を参照)を取得し、//は「なし」(または「これら2つのスラッシュの間にある空のパターン」)を意味し、gは- flagは、行の最初の出現とは対照的に、「グローバル」を意味します。

8
CrannDarach

私の場合、

上記で何もできませんでした、私は自分のMacからLinuxマシンにCSVファイルをコピーしていました。

tr "\015" "\n" < inputfile > outputfile

以下のような行の間に^ M文字が挟まれたファイルがありました

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
7

これは私のために働いた:

  1. ファイル形式をunixに設定します(\n行の終わり)
  2. ファイルを保存する

だからvimで:

:set ff=unix
:w
6
Stryker

あるいは、dos2unixおよびunix2dosと呼ばれるオープンソースのユーティリティがあり、これを利用しています。 Linuxシステムでは、おそらくデフォルトでインストールされています。 Windowsシステムの場合は、 http://www.bastet.com/ からダウンロードできます。

sed s/^M//g file1.txt > file2.txt

^ Mは、3つのキーを同時に押すことによって入力されます。 ctrl + v + m

5
Blue Diamond

ファイルがWindows上で作成された場合はdos2unixユーティリティを使用し、ファイルがMac上で作成された場合はmac2unixユーティリティを使用します。 :)

4
Ramesh

これは私のために働いた:

:% s/\r\n/\r
2
ContextSwitch

次のいずれかのコマンドを使用してください。

:%s/\r//g

または

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

キーストロークを保存にすると、入力を避けることができます。 Ctrl+VCtrl+M これをマッピングに入れることによって。 ^ M文字を含むファイルを開き、ヤンクして、.vimrcの次のような行に貼り付けます。

nnoremap <Leader>d :%s/^M//g<CR>
1
agouge

あなたの.vimrcのset binaryを削除してください。

1
Alex Falcucci

^Mは不要な改行をします。これを処理するために、以下のようにsedコマンドを使用できます。

sed 's/\r//g'
1
Manoj Kumar

VimとEclipseの両方で作業している間に^M改行の負荷を得ることに成功したので、これらの提案のどれも私にとってうまくいかなかった。私は外部の事件に遭遇したのではないかと思いますが、念のためそれが私の誰かを助けています。

:%s/.$//g

そしてそれは私の問題を整理しました

1
rogermushroom
:g/^M/s// /g

^Mを使用してShift+6 Caps+Mを入力した場合は受け入れられません。

ctrl+v ctrl+mと入力する必要があります。

1
Shravan Kumar

シリアルコンソールを介してすべてのviとsedのソリューションは私のために動作しませんでした。そうしなければならなかった:

cat inputfilename | tr -d '\r' > outputfilename
0
robsn

上記のどれも私のために働きませんでした。 (\ r、^ M、ctrl-v-ctrl-mの置換)テキストを新しいファイルに貼り付けるには、コピー&ペーストを使用しました。

干渉するマクロがある場合は、貼り付け操作の前に:set pasteを、その後に:set nopasteを試すことができます。

0
statueofmike

あるいは、vimを使う代わりに、このコマンドを使って単に改行を修正することができます。

fromdos <filename.txt>

それが役に立てば幸い!

0
bsmoo

MacOSでsedを使うには、次のようにします。

sed -i.bak $'s/\r//' <filename>

説明: ここの$'STRING'構文はbashシェルに関連しています。 Macは\rを特殊文字として扱いません。 $''内のコマンド文字列を引用符で囲むことで、シェルに\rをANSI-C規格で指定されている実際の\r文字で置き換えるように指示しています。

0
Nitin Nain

"この関数はジャンプのリストを保存します

fun! Dos2unixFunction()
let _s=@/
let l = line(".")
let c = col(".")
try
    set ff=unix
    w!
    "%s/\%x0d$//e
catch /E32:/
    echo "Sorry, the file is not saved."
endtry
let @/=_s
call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()
0
SergioAraujo

Vimでは、次のコマンドを使用します。

:%s/\ r\n/\ r/g

検索および置換する場所:

\ r\n

\ r

そしてその

/ g

グローバル向けです

これは@ContextSwitchによる答えと同じですが、gobalフラグを使用することに注意してください

0
markyk

私は午後にctrl-v 012と戦っていました(どちらも私にnullを渡します)。私がmetagrapherのものに達するまで、このスレッドを通して&を働きました。

\rは私のためにうまく働きました!

/),/s/),/)\r/g

このようになった:

ブラックリストエクストラ:i386(0.4.1、0.4.1 + nmu1)、libmount1:i386(2.20.1-5.1、2.20.1 -5.2)、libblkid1:i386(2.20.1-5.1、2.20.1-5.2) 、libapt-pkg4.12:i386(0.9.7.4、0.9.7.5)、nmap:i386(6.00-0.1、6.00-0.2)、libsane共通:i386(1.0.22-7.3、

このようなものに:

26 libwv-1.2-4:i386(1.2.9-3、自動)
27 openjdk-6-jre-headless:i386(6b24-1.11.4-3、自動)
28 jed:i386(0.99.19-2.1)

魔法。私は深く感謝しています

0
user1997684