it-swarm-ja.com

ソースコードファイルの多くの行にある `^ M`。どうすればそれらを削除できますか?

最近、誰かが私に.cppソースコードファイルをいくつか送ってくれました。 GNU EmacsまたはGVIMでファイルを開くと、すべての行の終わり近くに奇妙な文字^Mがあることがわかりました。

これが私の意味を示すスクリーンショットですEditor Screenshot

これらの同じソースファイルをGeditで開くと、これらの^M文字が表示されません。私は何をすべきか?ここには問題のファイルがたくさんあるので、空の文字列に置き換えて検索-置換操作を開いて実行することは、画期的な操作のように見えます。

不思議なことに、GCCでコンパイルすると、これらのファイルはきれいにコンパイルされます。ここで何が起こっているのか。私は何をすべきか?

1
smilingbuddha

Unixでは、改行文字は\nですが、Windowsでは\r\nです。 \rまたは^Mは、キャリッジリターン文字です。

ファイルがWindowsモードのエディターで書き込まれる場合、新しい改行文字にはそれぞれキャリッジリターン文字が付きます。改行文字をWindowsのように扱うようにエディターに指示すると(そしてそれが理解できる場合)、^M文字は表示されなくなります。

または、コードベースでdos2unixを実行して、この問題を修正することもできます。

そして、あなたが正しく観察したように、それはコード内の特別な特殊文字ではなく、WindowsとLinuxの改行文字の解釈の不一致であるため、コンパイルに問題はありません。

6
Mallik

ソースインサイト->オプション->設定-> [ファイル]タブ->デフォルトのファイル形式メニューで[Unix(LF)]を作成します。

1
Eun

WindowsとUNIXの行末が混在するソースファイルがあります。 UNIXは改行(^ Jと表示されることもあります)を使用していましたが、Windowsはキャリッジリターン+改行(^ M ^ Jと表示されることもあります)を使用します。編集者はUNIX行を見て、「これはUNIXファイルである必要があります」と言いますが、その後、散在するWindows行の終わりを見て、「これは特殊文字です。表示する必要があります」と言います。

あなたはファイルをすべての方法で変換することを試みることができます。コマンドdos2unixを使用して、UNIXの行末に変換してみてください。これはUNIX側では機能しますが、UNIXの末尾を認識しているWindowsエディターを入手しない限り、Windows側は混乱します。

または、unix2dosを使用してすべてWindowsにすることもできます。ファイル全体に一貫性がある場合は、UNIXエディター(WindowsエディターがUNIXエンディングを知っているよりもWindowsエンディングをよく知っている傾向があります)で問題ないはずです。この特定の時間のemacs/gvimは、ファイルに一貫性がなかったために混乱していました。

ご覧のとおり、コンパイラは行末が何であるかを気にしません。

1
Rich Homolka

このリソース によると、^Mはキャリッジリターンです。そのため、GCCでクリーンにコンパイルできます。

0
JW8

Emacs/vimでこれらを見る理由は、それらが物事を読み取る方法/物事がエンコードされる方法によるものです。 ^Mは実際には単なるCarriage Returnです(Enterボタンを押す)。

とにかく、(Emacsで適切なコマンドがわからないのでvimで):set ff=unix、次に:wを試してみることができます。これにより、Unix形式に変換されて削除されます。次に開くとき(iirc)。

または、ドキュメントから^Mを明示的に削除する場合は、(Vimで、私はそれしか知らないので):%s/<ctrl + v><ctrl + m>//gcで検索/置換します。

このリンク EmacsでリターンのS/Rを実行する方法に関するコマンドを示しています。)

0
qweet