^M で終わるすべての行に vim が表示されます
これを「通常の」改行に置き換えるにはどうすればよいですか?
:%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
そして、それをグローバルに実行します(行の最初の出現だけではありません)。
Linux と Mac OS では、次のように動作します。
:%s/^V^M/^V^M/g
where^V^M
はタイプCtrl+ V、次にCtrl+を意味しMます。
注: Windowsでは、デフォルトで がテキストの貼り付けにマップされるため、おそらく^Q
の代わりに使用することをお勧めします。^V
^V
内vim
で、ファイル形式 (DOS または Unix) を確認します。
:set filetype=unix
:set fileformat=unix
ファイルは、キャリッジ リターン (CR、^M) 文字なしで書き戻されます。
BBEdit で作成したファイルをMacVimで表示する^M
と、通常の改行ではなく改行が表示されていました。次の文字列置換で問題が解決しました-これが役立つことを願っています:
:%s/\r/\r/g
改行を同じ文字に置き換えているので興味深いのですが、Vim が正しく表示するには新しい \r を取得する必要があるだけだと思います。これが機能する理由の根底にあるメカニズムを知りたいです。
まず、 を使用:set ff?
して、ファイルのファイル形式を把握します。
unix
問題は、ファイルが行末に「^M^J」を追加して作成されたが、fileformat=dos
行末flieformat=unix
から「^J」を削除するだけで読み取られ、「^M」が残っていることです。
Vim コマンド ラインに入力:e ++ff=dos
するだけで、ファイルの形式を unix から dos に変更できます。それは問題を解決するはずです。そうでない場合は、:%s/\r//g
あなたを助ける必要があります。
一致する ^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検索で上位に来ているので、その一部を解決するのに役立つと思いました.
Ctrl^M は+Vとで取得されMます。
s/^M//g
Ctrl を使用する必要なし:
:%s/\r$//
私のために働いた簡単なこと
dos2unix filename
私はsedでこれを行いました:
sed -i -e 's/\r/\n/g' filename
Ctrl+Mはウィンドウを最小化しますが、Ctrl+Enterは実際には文字を挿入し^M
ます。Ctrlまた、キーを押す間にキーを離さないようにする必要がありました。
したがって、私にとっての解決策は次のとおりです。
:%s/<Ctrl-V><Ctrl-Enter>/\r/g
ここでは、押したままにする、押して離す、押して離す、離す<Ctrl-V><Ctrl-Enter>
という意味です。 CtrlVEnter Ctrl
上記のソリューションでは、既存の行の間に追加の行が追加さ\r
れ^M
ます。
これを防ぐには、^M
文字を置き換えずに削除します。
:%s/<Ctrl-V><Ctrl-Enter>//g
where%
は「このバッファ内」s
を意味し、「置換」/
を意味し、「次のパターンを (見つける)」を意味し、文字<Ctrl-V><Ctrl-Enter>
を取得するために押すキーを参照し (上記参照)、 「何もない」(または「パターンを使用して」) を意味します。これらの 2 つのスラッシュの間は空です」)、行の最初の出現とは対照的に、「グローバルに」を意味するフラグです。^M
//
g
これは私のために働いた:
\n
行末)だからvimで:
:set ff=unix
:w
私の場合、
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,
sed s/^M//g file1.txt > file2.txt
where ^M is typed by simultaneously pressing the 3 keys, ctrl + v + m
別の方法として、dos2unix および unix2dos と呼ばれるオープンソース ユーティリティがあり、まさにこれを行うことができます。Linux システムでは、おそらくデフォルトでインストールされています。Windows システムの場合は、 http: //www.bastet.com/ などからダウンロードできます。
次のコマンドのいずれかを使用します。
:%s/\r//g
または
:%s/\r\(\n\)/\1/g
ファイルが Windows で作成された場合は dos2unix ユーティリティを使用し、ファイルが mac で作成された場合は mac2unix ユーティリティを使用します。:)
キーストロークを節約するために、これをマッピングに配置することでCtrl+ VCtrl+の入力を避けることができます。M^M 文字を含むファイルを開いてヤンクし、.vimrc の次のような行に貼り付けます。
nnoremap <Leader>d :%s/^M//g<CR>
これは私のために働いた:
:% s/\r\n/\r
:g/^M/s// /g
^M
を使用して入力Shift+6 Caps+M
すると、受け入れられません。
と入力する必要がありますctrl+v ctrl+m
。
Solaris の場合:
:%s/<CTRL+V><CTRL+M>//g
あれは:
:%s/^M//g
つまり、次のことを意味します。
^M
不要な改行を与えます。これを処理するには、sed
次のようにコマンドを使用できます。
sed 's/\r//g'
"この関数はジャンプのリストを保持します
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()
vim では、次のコマンドを使用します。
:%s/\r\n/\r/g
検索して置換する場所:
\r\n
の中へ
\r
そしてその
/g
グローバル用です
これは @ContextSwitch による回答と同じですが、gobal フラグが付いていることに注意してください
シリアル コンソールでは、すべての vi および sed ソリューションが機能しませんでした。そうしなければならなかった:
cat inputfilename | tr -d '\r' > outputfilename
または、vim を使用する代わりに、このコマンドを使用して改行を修正できます。
fromdos <filename.txt>
それが役に立てば幸い!
\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)
魔法。心より感謝しております