web-dev-qa-db-ja.com

emacsでは、CR(^ M)を削除してLF(^ J)文字を残す方法は?

Hexlモードを使用してテキストファイルからいくつかの特殊文字を手動で削除しようとしていますが、hexlモードで何かを削除する方法がわかりません。

私が本当に欲しいのは、キャリッジリターンを削除し、ラインフィード文字を保持することです。 Hexlモードはこれを行う正しい方法ですか?

36
Brandon Leiran

これにはhexl-modeは必要ありません。 ^ J ^ Mを^ J Worksでグローバルに検索して置換するだけです。 :)次に、ファイルを保存し、バッファを強制終了してから、ファイルに再度アクセスして、ウィンドウに新しいファイルモードが表示されるようにします(UnixとDOS)。

10
mike

交換を見つける必要はありません。ただ使う。

M-x delete-trailing-whitespace

を介してファイルのエンコーディングを設定することもできます

C-x RET f unix
85
CantGetANick

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

31
mike

特に、行末を変換するために存在する nix2dos/dos2unix と呼ばれるコマンドラインツールもあります。

9
KeyserSoze

DOSエンコードされたファイルをUNIXエンコードに変更したい場合、M-x set-buffer-file-coding-system(C-x RET f)を使用してコーディングシステムを「unix」に設定し、ファイルを保存します。

8
remvee

キャリッジリターンを削除する場合(通常は^M)と改行します。変換せずにファイルにアクセスするだけです。

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

キャリッジリターンのあるファイルは通常、DOSモードで表示されるためです(キャリッジリターンは非表示)。モードラインはおそらく(DOS)左側にあります。

それが終わったら、^Mが表示され、他のキャラクターと同じように削除できます。

5
Trey Jackson

Hexl-modeを使用する必要はありません。代わりに:

  • それらの^ Mを示す方法でファイルを開きます。上記のM-x find-file-literally/path/to/fileを参照してください。 XEmacsでは、C-u C-x C-fを実行してバイナリエンコーディングを選択することもできます。
  • 置き換えたい文字列を選択し、M-wを使用してコピーします
  • m-%(クエリ置換)を実行し、C-yを使用してコピーしたいものを貼り付けます
  • 何に置き換えるかを尋ねられたらEnter
  • 可能プレス!すべての出現箇所を置き換える

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

4
Gleb

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

3
Chris Arguin

から http://www.xsteve.at/prg/emacs/xsteve-functions.el

;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経由で実行するか、簡単なキーにバインドします。任意のモードで^Msを削除します。

1
ayman

私はこの関数を使用します:

(defun l/cr-sanitise ()
  "Make sure current buffer uses unix-utf8 encoding.
If necessary remove superfluous ^M. Buffer will need to be saved
for changes to be permanent."
  (interactive)
    (set-buffer-file-coding-system 'utf-8-unix)
    (delete-trailing-whitespace)
    (message "Please save buffer to persist encoding changes."))
0
gsl