vimは^ Mで終わるすべての行に表示されます
これを「通常の」改行に置き換えるにはどうすればよいですか?
vimは^ Mで終わるすべての行に表示されます
これを「通常の」改行に置き換えるにはどうすればよいですか?
回答:
:e ++ff=dos
続いて:set ff=unix
、エンディングを正しいフォーマットに変換します。
:%s/<Ctrl-V><Ctrl-M>/\r/g
どこ<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
そして、それをグローバルに行います(行の最初の出現だけではありません)。
:%s/<Ctrl-V><Ctrl-M>/\r/g
(\ rは^ Mを改行に置き換えます)。
LinuxおよびMac OSでは、次のように動作します。
:%s/^V^M/^V^M/g
where ^V^M
はタイプCtrl+ V、次にCtrl+を意味しMます。
注:デフォルトではテキストの貼り付けにマップされているため、Windowsではおそらくの^Q
代わりに使用する必要があります。^V
^V
%s/\r/\r/g
のみ表示されるファイル^M
(MacVimの用語では1つの長い行)について、MacVim では同等のものがうまく機能することがわかりました。明らかに\ rは、このコマンドのパターンと置換部分でパターンが異なることを意味します。
内vim
で、ファイル形式を確認します— DOSまたはUnix:
:set filetype=unix
:set fileformat=unix
ファイルはキャリッジリターン(CR、^ M)文字なしで書き戻されます。
set ff=unix
同じように少しショートカットとしてft
のショートカットですfiletype
MacVimでBBEditを使用して作成したファイルに^M
、通常の改行ではなく一連の改行が表示されていました。次の文字列置換で問題が解決しました-これが役立つことを願っています:
:%s/\r/\r/g
改行を同じ文字に置き換えるので興味深いですが、Vimは正しく表示するために新しい\ rを取得する必要があるだけだと思います。これが機能する理由の根本的な仕組みを知りたいと思います。
\r
文字をで置換するように見えました。文句を言わない、それがまさに私が欲しかったものです。変だ。\n
\r
まず、 :set ff?
して、ファイルのファイル形式を把握します。
私はそれが可能性があると思うunix
、それから問題はあなたのファイルがfileformat=dos
「^ M ^ J」を行末に追加して作成されたが、flieformat=unix
、「^ M」をそこに残して行末から「^ J」を削除するだけで。
:e ++ff=dos
Vimコマンドラインに入力するだけで、ファイルの形式をunixからdosに変更できます。問題を解決するはずです。そうでない場合は、:%s/\r//g
あなたを助ける必要があります。
:e ++ff=dos
その後、:set ff=unix
および:w
^ M文字を一致させるには、視覚的に選択し、OSのcopy to clipboardコマンドを使用して文字を取得する必要がありました。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
いたが、それによってキャリッジリターンがすぐに削除され、予期しない結果が生じる可能性がありました。代わりに、単数形のCR文字(ここでは^ M文字)をスペースに変換し、行末のすべてのスペースを削除します(これは私にとっては望ましい結果です)
長い間回答されてきた古い質問を復活させて申し訳ありませんが、混乱が生じているようで、Google検索で高まっているので、そのいくつかを明らかにしたいと思います。
^ MはCtrl+ VとMで取得されるので、
s/^M//g
私はsedでこれをしました:
sed -i -e 's/\r/\n/g' filename
sed -e 's/\r/\n/g' <<< 'over and over'
->oven and oven
sed
では機能するがBSDでは機能しないようsed
です。改行を修正する人はおそらくオペレーティングシステムの組み合わせで作業しているので、答えがいつ機能するかを明確にしておくと役立ちます。
ちょうど何について:
:%s/\r//g
それは完全に私のために働いた。
これは、すべての行の行末をクリーンアップするだけで、^ Mを削除します。
この質問には他にも多くの回答がありますが、コマンドラインソリューションが必要だったので、次の方法が私にとって最適です。
vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile
説明:
myfile
:e ++ff=dos
dos行末としてファイル全体を強制的にリロードするためにします。:w ++ff=unix
UNIXの行末を使用してファイルを書き込むために実行しますCtrl+ Mウィンドウを最小化しますが、実際にはCtrl+ 文字をEnter挿入し^M
ます。またCtrl、プレスの合間にキーを持ち上げないように注意する必要がありました。
だから私のための解決策は:
:%s/<Ctrl-V><Ctrl-Enter>/\r/g
どこ<Ctrl-V><Ctrl-Enter>
に手段プレスとホールド Ctrl、プレスリリースやV、プレス、リリースEnter、およびその後のリリース Ctrl。
すでに目に見えない存在であるため、上記のソリューションは、既存の行の間に追加の行を追加します\r
後^M
。
これを防ぐには、^M
文字を置き換えずに削除します。
:%s/<Ctrl-V><Ctrl-Enter>//g
ここで%
、「このバッファー内」、「s
置換」、「/
次のパターンを(見つける)」<Ctrl-V><Ctrl-Enter>
、^M
文字を取得するために押すキー(上記を参照)、//
「何もない」(または「パターン付き」を意味します。空の2つのスラッシュの間)」であり、行の最初の出現とは対照的に、「全体的に」を意味g
するフラグです。
これは私のために働きました:
\n
行末)だからvimで:
:set ff=unix
:w
私の場合、
上記は何も機能しませんでした。CSVファイルをMacからLinuxマシンにコピーし、上記のすべてのコマンドを使用しましたが、以下の1つしか役に立ちませんでした
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,
あるいは、dos2unixおよびunix2dosと呼ばれるオープンソースのユーティリティがあり、これを行うことができます。Linuxシステムでは、おそらくデフォルトでインストールされます。Windowsシステムの場合は、http: //www.bastet.com/ からダウンロードできます。
これは私のために働きました:
:% s/\r\n/\r
^M
vimとeclipseの両方で作業しているときに、これらの提案のどれもうまく機能せず、改行が大量に発生しました。私は外部のケースに遭遇したのではないかと思いますが、それが私がした人を助ける場合に備えて。
:%s/.$//g
そしてそれは私の問題を整理しました
:g/^M/s// /g
入力した場合は^M
使用Shift+6 Caps+M
できません。
入力する必要がありctrl+v ctrl+m
ます。
^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()
私は午後に\ 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)
マジック。私は深く感謝しています