2009-07-23 19 views
31

私はhexlモードを使用してテキストファイルからいくつかの特別な文字を手動で削除しようとしていますが、hexlモードで何かを削除する方法は見当たりません。emacsでは、CR(^ M)を取り除き、LF(^ J)文字を残す方法は?

私が本当に望むのは、改行を削除し、改行文字を保持することです。これを行うには、Hexlモードが正しい方法ですか?

+0

...なぜ使用HEXLモードによるファイルのエンコーディングを設定することができますか? –

+0

私はキャリッジリターンを取り除き、ラインフィードを残そうとしています...尋ねないでください - この設定ファイルを読んでいるプログラムはそれを望んでいます。 –

+1

+1私も同様の問題がありました。いくつかの奇妙な理由のために、いくつかの16進文字が私のテキストファイルのいくつかの先頭に追加されていました。私はそれらの文字を削除したいだけですが、通常のバッファモードでそれらの文字を見ることはできません。なぜ、 "削除"機能が16進モードでは難しいのですか?それはそこになければならない。 – User1

答えて

10

このためにhexモードは必要ありません。^J^Mのグローバル検索と置き換えは^ J Worksと一緒にやってください。 :)その後、ファイルを保存し、バッファを殺して、ファイルが新しいファイルモード(Unix vs DOS)を表示するようにファイルを再訪します。

+0

これはいつも私のために働く。 – Cheeso

+2

なぜこれをするのは気にかかりますか? keysersozeがdos2unixやunix2dosを提案し使用するものを実行します。 –

+0

バッファを強制終了してファイルを再訪する代わりに、モード行のEOLタイプインジケータをクリックして、さまざまなオプションを順番に調べることができます。この方法であなたはあなたのキルリングを失うことはありません。 – phils

3

(16進モード)文字を削除することができないとわかりません。私はいつもそれらをスペースやその他の文字に変換し、通常のテキストエディタに切り替えてそこで削除しました。

+0

すばらしい回避策、ありがとう! – Anne

5

キャリッジリターン(通常は^Mと表示されます)を削除し、改行を残す場合は、キャリッジリターンを持つファイルは、一般的にDOSモード(キャリッジリターンを隠す)に表示されているので

M-x find-file-literally /path/to/file 

:あなただけ/アウト任意の変換wのファイルを訪問することができます。モードラインはおそらく(DOS)を左側に表示します。

これを済ませたら、^Mが表示され、どのような文字でも好きなように削除できます。

28

^J^Mは2つのリテラル文字として入力する必要があります。 c-qc-j,c-mを使用し、置換文字列にはc-qc-jを使用してください。

+0

これはどれくらいの投票権があるのか​​信じられません!これは、初心者(または忘れ去られた)Emacsユーザーを完全に節約するでしょう! –

+1

はい、これはもっと高くなるはずです。また、^ Mを置き換えて^ Jを無視することもできます。 – ahonnecke

4

hexモードを使用する必要はありません。代わりに:

  • あなたにそれらの^ Mを示す方法でファイルを開きます。上記のM-x find-file-literally/path/to/fileを参照してください。 XEmacsでは、C-u C-x C-fを実行し、バイナリエンコーディングを選択することもできます。可能
  • でそれを置き換えるものにプロンプ​​トが表示されたら
  • のMw
  • はM-%を行う(クエリが置き換え)と、使用してコピーしたいものを貼り付ける使用して、それを交換し、コピーしたい文字列を選択Cyの
  • 存在は、入力します押す !すべての出現を置き換えるように今すぐ

あなたが置き換えようとしているものを入力する方法がなくても、いつでもそれを選択/コピーできます。

+0

おかげさまで、find-fileについてはわかりませんでした。実際には、私が使っていたhexlモードよりもテキストファイルの制御文字を見るためのより良いツールでした。 –

8

DOSエンコードファイルをUNIXエンコードに変更する場合は、M-x set-buffer-file-coding-system(C-x RET f)を使用して、コーディングシステムを "unix"に設定してファイルを保存します。 http://www.xsteve.at/prg/emacs/xsteve-functions.elから

1

;02.02.2000 
(defun xsteve-remove-control-M() 
    "Remove ^M at end of line in the whole buffer." 
    (interactive) 
    (save-match-data 
    (save-excursion 
     (let ((remove-count 0)) 
     (goto-char (point-min)) 
     (while (re-search-forward (concat (char-to-string 13) "$") (point-max) t) 
      (setq remove-count (+ remove-count 1)) 
      (replace-match "" nil nil)) 
     (message (format "%d ^M removed from buffer." remove-count)))))) 

があなたの.emacsにこれを追加し、M-x xsteve-remove-control-Mを経由して、それを実行したり、簡単にキーにバインドします。それはanymodeの^Mを取り除きます。

+1

これはすばらしい解決策です。ファイル全体を直ちに修正する1つのコマンド。 – DOKKA

80

交換する必要はありません。ちょうど使用する。

M-x delete-trailing-whitespace 

また、それがテキストファイルなら

C-x RET f unix 
+0

ファイルエンコーディングを設定すると、私の問題が解決しました! – Ajoy

関連する問題