^ Mで終わるすべての行にvimが表示されます。
これを「通常の」改行に置き換えるにはどうすればよいですか。
:%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
そして、それをグローバルに行います(行の最初の出現だけではありません)。
LinuxとMac OSでは、次のように動作します。
:%s/^V^M/^V^M/g
^V^M
は型を意味します Ctrl+Vそれから Ctrl+M。
注:Windowsでは、デフォルトで^Q
は貼り付けテキストにマップされるため、^V
の代わりに^V
を使用することをお勧めします。
vim
の中で、ファイルフォーマットを見てください - DOSかUnix:
:set filetype=unix
:set fileformat=unix
ファイルはキャリッジリターン(CR、^ M)文字なしで書き戻されます。
MacVim で見たBBEditで作成したファイルは、通常のものではなく^M
行のリターンをたくさん表示していました。次の文字列を置き換えることで問題が解決しました - これが役立つことを願っています:
:%s/\r/\r/g
改行を同じ文字に置き換えているので面白いですが、Vimが正しく表示するには新しい\ rを取得するだけでよいと思います。なぜこれが機能するのかという根本的な仕組みを知りたいと思います。
まず、:set ff?
を使ってあなたのファイルのファイルフォーマットを調べます。
unix
かもしれませんが、問題はあなたのファイルがfileformat=dos
で行末に "^ M ^ J"を追加して作成されたが、flieformat=unix
で行末から "^ J"のみを削除して読み込まれることです。そこ。
ファイルのフォーマットをunixからdosに変更するには、Vimのコマンドラインに:e ++ff=dos
を入力するだけです。それは問題を解決するはずです。そうでない場合は、:%s/\r//g
が役に立ちます。
^ 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検索で高まってくるので、その一部を明確にすることをお勧めします。
これらのどれも私のために働いていなかったので、私はこれを試してみました。
タイプ:%s/
押す CTRL-VCTRL-M
タイプ//g
押す Enter
Vimのコマンド全体は:%s/^M//g
のようになります。
これが何をするか::%s
(検索と置換)/^M/
(そのシンボル)/
(文字なし)g
(グローバル)。
Ctrl::%s/\r$//
を使わなくても
私のために働いた簡単なこと
dos2unix filename
私はsedでこれを行いました:
sed -i -e 's/\r/\n/g' filename
^ Mはによって検索されます Ctrl+V そして Mそうです
s/^M//g
:%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
を実行します。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
は- flagは、行の最初の出現とは対照的に、「グローバル」を意味します。
私の場合、
上記で何もできませんでした、私は自分の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,
これは私のために働いた:
\n
行の終わり)だからvimで:
:set ff=unix
:w
あるいは、dos2unixおよびunix2dosと呼ばれるオープンソースのユーティリティがあり、これを利用しています。 Linuxシステムでは、おそらくデフォルトでインストールされています。 Windowsシステムの場合は、 http://www.bastet.com/ からダウンロードできます。
sed s/^M//g file1.txt > file2.txt
^ Mは、3つのキーを同時に押すことによって入力されます。 ctrl + v + m
ファイルがWindows上で作成された場合はdos2unixユーティリティを使用し、ファイルがMac上で作成された場合はmac2unixユーティリティを使用します。 :)
これは私のために働いた:
:% s/\r\n/\r
次のいずれかのコマンドを使用してください。
:%s/\r//g
または
:%s/\r\(\n\)/\1/g
キーストロークを保存にすると、入力を避けることができます。 Ctrl+VCtrl+M これをマッピングに入れることによって。 ^ M文字を含むファイルを開き、ヤンクして、.vimrcの次のような行に貼り付けます。
nnoremap <Leader>d :%s/^M//g<CR>
あなたの.vimrcのset binary
を削除してください。
^M
は不要な改行をします。これを処理するために、以下のようにsed
コマンドを使用できます。
sed 's/\r//g'
VimとEclipseの両方で作業している間に^M
改行の負荷を得ることに成功したので、これらの提案のどれも私にとってうまくいかなかった。私は外部の事件に遭遇したのではないかと思いますが、念のためそれが私の誰かを助けています。
:%s/.$//g
そしてそれは私の問題を整理しました
:g/^M/s// /g
^M
を使用してShift+6 Caps+M
を入力した場合は受け入れられません。
ctrl+v ctrl+m
と入力する必要があります。
シリアルコンソールを介してすべてのviとsedのソリューションは私のために動作しませんでした。そうしなければならなかった:
cat inputfilename | tr -d '\r' > outputfilename
上記のどれも私のために働きませんでした。 (\ r、^ M、ctrl-v-ctrl-mの置換)テキストを新しいファイルに貼り付けるには、コピー&ペーストを使用しました。
干渉するマクロがある場合は、貼り付け操作の前に:set paste
を、その後に:set nopaste
を試すことができます。
あるいは、vimを使う代わりに、このコマンドを使って単に改行を修正することができます。
fromdos <filename.txt>
それが役に立てば幸い!
MacOSでsed
を使うには、次のようにします。
sed -i.bak $'s/\r//' <filename>
説明: ここの$'STRING'
構文はbashシェルに関連しています。 Macは\r
を特殊文字として扱いません。 $''
内のコマンド文字列を引用符で囲むことで、シェルに\r
をANSI-C規格で指定されている実際の\r
文字で置き換えるように指示しています。
"この関数はジャンプのリストを保存します
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フラグを使用することに注意してください
私は午後に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)
魔法。私は深く感謝しています