507

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

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

4

37 に答える 37

599

指示

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

where<Ctrl-V><Ctrl-M>Ctrl+Vを入力してからCtrl+を入力することを意味しMます。

説明

:%s

代替、% = すべての行

<Ctrl-V><Ctrl-M>

^M 文字 (Ctrl-V は Vim による Ctrl ^ 文字の書き方であり、Ctrl-M は正規表現の後に M を書き、^M 特殊文字になります)

/\r/

改行あり ( \r)

g

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

于 2009-05-01T12:48:40.217 に答える
424

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

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

where^V^MはタイプCtrl+ V、次にCtrl+を意味しMます。

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

于 2009-05-01T12:47:21.890 に答える
186

vimで、ファイル形式 (DOS または Unix) を確認します。

:set filetype=unix

:set fileformat=unix

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

于 2009-05-01T12:57:04.253 に答える
149

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

:e ++ff=ドス

次の場所にあります: http://vim.wikia.com/wiki/File_format

于 2014-04-02T15:30:11.437 に答える
120

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

:%s/\r/\r/g

改行を同じ文字に置き換えているので興味深いのですが、Vim が正しく表示するには新しい \r を取得する必要があるだけだと思います。これが機能する理由の根底にあるメカニズムを知りたいです。

于 2012-09-27T04:46:16.440 に答える
35

まず、 を使用:set ff?して、ファイルのファイル形式を把握します。

unix問題は、ファイルが行末に「^M^J」を追加して作成されたが、fileformat=dos行末flieformat=unixから「^J」を削除するだけで読み取られ、「^M」が残っていることです。

Vim コマンド ラインに入力:e ++ff=dosするだけで、ファイルの形式を unix から dos に変更できます。それは問題を解決するはずです。そうでない場合は、:%s/\r//gあなたを助ける必要があります。

于 2012-03-07T04:01:20.707 に答える
29

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

/^M

最初の不良行を選択する必要があります

:%s/^M/\r/g

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

これは、gvim 7 に基づいた MacVim の関数です。

編集:

Windows用のUbuntuを搭載したWindows 10マシンでこの問題が再び発生し、これがvimのファイル形式の問題を引き起こしていると思います。この場合、ff を unix、mac、または dos に変更しても、^M を ^J に変更して元に戻す以外に何も起こりませんでした。

この場合の解決策:

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

私がこのルートを選んだ理由は、ファイルを破壊しないようにしたかったからです。できたかもしれません:%s/\r$//gが、そうすると改行がすぐに削除され、予期しない結果が生じる可能性がありました。代わりに、単数形の CR 文字 (ここでは ^M 文字) をスペースに変換し、行末のすべてのスペースを削除します (これは私にとって望ましい結果です)。

長い間回答されていない古い質問を復活させて申し訳ありませんが、混乱が進行しているようで、Google検索で上位に来ているので、その一部を解決するのに役立つと思いました.

于 2011-04-25T19:36:57.733 に答える
18

Ctrl^M は+Vとで取得されMます。

s/^M//g
于 2009-05-01T12:47:02.717 に答える
16

Ctrl を使用する必要なし: :%s/\r$//

于 2015-10-06T19:46:01.050 に答える
14

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

dos2unix   filename
于 2014-11-07T07:30:16.000 に答える
14

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

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

于 2015-01-03T04:08:16.727 に答える
8

Ctrl+Mはウィンドウを最小化しますが、Ctrl+Enterは実際には文字を挿入し^Mます。Ctrlまた、キーを押す間にキーを離さないようにする必要がありました。

したがって、私にとっての解決策は次のとおりです。

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

ここでは、押したままにする、押して離す、押して離す離す<Ctrl-V><Ctrl-Enter>という意味です。 CtrlVEnter Ctrl

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

上記のソリューションでは、既存の行の間に追加の行が追加さ\r^Mます。

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

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

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

于 2017-04-04T15:55:11.897 に答える
7

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

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

だからvimで:

:set ff=unix
:w
于 2016-11-30T20:30:26.980 に答える
7

私の場合、

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,
于 2016-12-04T02:53:34.143 に答える
5
sed s/^M//g file1.txt > file2.txt

where ^M is typed by simultaneously pressing the 3 keys, ctrl + v + m

于 2014-08-04T10:07:26.063 に答える
5

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

于 2009-05-01T13:10:59.447 に答える
4

次のコマンドのいずれかを使用します。

:%s/\r//g

または

:%s/\r\(\n\)/\1/g
于 2015-06-10T10:45:49.653 に答える
4

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

于 2012-09-25T12:29:04.520 に答える
2

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

nnoremap <Leader>d :%s/^M//g<CR>
于 2013-12-06T09:18:44.970 に答える
2

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

:% s/\r\n/\r
于 2014-04-18T01:09:34.283 に答える
1
:g/^M/s// /g

^Mを使用して入力Shift+6 Caps+Mすると、受け入れられません。

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

于 2015-04-30T05:42:40.017 に答える
1

Solaris の場合:

:%s/<CTRL+V><CTRL+M>//g

あれは:

:%s/^M//g

つまり、次のことを意味します。

  • % = すべての行、
  • s = 代用、
  • ^M = 置き換えたいもの
  • // = 何も置き換えない
  • g = グローバル (最初の出現だけでなく)
于 2020-12-02T09:20:12.033 に答える
1

^M不要な改行を与えます。これを処理するには、sed次のようにコマンドを使用できます。

sed 's/\r//g'
于 2016-07-20T11:03:07.320 に答える
0

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

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()
于 2011-04-25T23:06:30.440 に答える
0

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

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

検索して置換する場所:

\r\n

の中へ

\r

そしてその

/g

グローバル用です

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

于 2015-08-14T00:54:03.753 に答える
0

シリアル コンソールでは、すべての vi および sed ソリューションが機能しませんでした。そうしなければならなかった:

cat inputfilename | tr -d '\r' > outputfilename
于 2016-11-16T12:37:56.660 に答える
0

または、vim を使用する代わりに、このコマンドを使用して改行を修正できます。

fromdos <filename.txt>

それが役に立てば幸い!

于 2013-03-17T16:39:39.850 に答える
0

\n ctrl-v 012 と格闘して午後を過ごしました (どちらも null を返します)。&メタグラファーにたどり着くまで、このスレッドに苦労しました。

\r私にとってはうまくいきました!

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

このようなものになりました:

blacklist-extra: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-common: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)

魔法。心より感謝しております

于 2013-01-21T16:28:24.217 に答える