みっちゃんラボ

2022/02/08(Tue)

Emacs上で改行コードを統一する

LinuxとWindowsなど2つ以上のオペレーティングシステム環境で編集したファイルに複数の改行コードが混ざっていました。

検証環境: Debian GNU/Linux 11 (bullseye) + GNU Emacs 27.1

Emacsは改行コードが混ざっているとそのファイル内の該当箇所に「^M」などと記号を表示してくれます。

これをどうするかによりますが、シンプルにすべての改行コードを同じに揃えるには、「^M」を置換する方法があります。

まず、C-x hで全選択状態にするか、ファイルの先頭にカーソルを移動します。

そして置換処理を開始するため、M-x replace-stringをTABキー補完を活用しながら押下し<RET>

ミニバッファが「Replace string:」となるので、C-q C-m <RET>の順に押下。

「Replace string ^M with:」と入力を求められるので、そのまま<RET>を押下します。

これでファイル内の「^M」記号がすべて置き換わります。この環境ではLFに統一されます。

参考サイト:

Emacs: Newline Convention CR LF (xahlee.info)

上記サイトに詳しくありますが、内容を一部抜き出して書いてみます。

改行コード

名称 短縮形 ASCII 10進法 エスケープ表記 キャレット表記 Emacsでの入力方法
Line Feed LF 10 \n ^J C-q C-j
Carriage Return CR 13 \r ^M C-q C-m

Windows、Linux、Macでの違い

Operating System 改行コード
Unix, Linux, Mac OS X LF
Windows CR/LF
Mac OS Classic CR

※C-x <RET>のあとにfで文字コードと改行コードを変更する方法はうまく作用しませんでした。。

また、諸事情によりファイル全体を修正できない場合は「^M」を非表示にするという手もあるみたいです。

実際はこっちのほうが現場で役立つかもしれません。_(:3」∠)_

Hiding ^M in emacs - Stack Overflow (stackoverflow.com)

(defun remove-dos-eol ()
  "Do not show ^M in files containing mixed UNIX and DOS line endings."
  (interactive)
  (setq buffer-display-table (make-display-table))
  (aset buffer-display-table ?\^M []))

以上です(・∀・)

Posted by (mi|o)cchan  Updated at 08 Feb 2022  Category editor  Tags emacs tips