GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-and-Binary.html ・ emacs-doc.conao3.com

I.2 テキストファイルとバイナリファイル

GNU Emacs では、テキスト行の区切りに改行文字を使用します。これは、GNU、Unix、およびその他の POSIX 準拠システムで採用されている慣習です。

これに対し、MS-DOSやMS-Windowsでは通常、テキスト行の区切りとしてキャリッジリターンに続くラインフィードという2文字のシーケンスを使用します。(ラインフィードはニューラインと同じ文字です。)したがって、Emacsで一般的なファイルを便利に編集するには、これらの行末(EOL)シーケンスを変換する必要があります。そして、それこそがEmacsが通常行っていることです。ファイルを読み込む際にはキャリッジリターンに続くラインフィードをニューラインに変換し、ファイルを書き込む際にはニューラインをキャリッジリターンに続くラインフィードに変換します。国際文字コードの変換を処理するのと同じ仕組みが、この変換も行っています(コーディングシステムを参照)。

ほとんどのファイルでこの特殊なフォーマット変換が行われることによる影響の一つとして、Emacsが報告する文字位置(カーソル位置情報を参照)が、オペレーティングシステムが把握しているファイルサイズ情報と一致しないという点が挙げられます。

さらに、Emacsがファイルの内容から、行区切り文字としてキャリッジリターンに続くラインフィードではなく改行が使用されていることを認識した場合、そのファイルの読み書き時にEOL変換は行われません。したがって、特別な手間をかけることなく、MS-DOS上でGNUやUnixシステムのファイルを読み込んで編集することができ、編集後もUnix形式の行末規約が維持されます。

モードラインは、現在のバッファに改行コード変換が適用されたかどうかを示します。バッファにMS-DOSの改行コード変換が使用されている場合、MS-Windows版のEmacsでは、モードラインの先頭付近にあるコーディングシステムの表記の後に、バックスラッシュ ‘\’ が表示されます(モードラインを参照)。改行コード変換が行われていない場合は、バックスラッシュの代わりに文字列 ‘(Unix)’ が表示され、ファイルの改行形式が通常のキャリッジリターンに続くラインフィードではないことを通知します。

ファイルを開き、DOS形式かUnix形式のどちらの改行コードを使用するかを指定するには、コーディングシステムを指定します(ファイルテキストのコーディングシステムの指定を参照)。例えば、C-x RET c unix RET C-x C-f foobar.txt はEOLを変換せずにファイル foobar.txt を開きます。ある行がキャリッジリターンとラインフィードのペアで終わっている場合、Emacsはその行の末尾に ‘^M’ と表示します。同様に、C-x RET f コマンドを使用して、指定したEOL形式でバッファを保存するようにEmacsに指示できます。例えば、Unix EOL形式でバッファを保存するには、C-x RET f unix RET C-x C-s と入力します。DOS EOL変換を用いてファイルを開き、その後Unix EOL形式で保存すると、dos2unix プログラムと同様に、実質的にファイルがUnix EOL形式に変換されます。

NFSやSamba、あるいはその他の同様の手法を用いてGNUやUnixシステム搭載のコンピュータ上のファイルシステムにアクセスする場合、Emacsはこれらのファイルシステム内のいかなるファイルに対しても行末変換を行わないようにすべきです。これには、新規ファイルを作成する場合も含まれます。この動作を指定するには、関数 w32-add-untranslated-filesystem を呼び出して、これらのファイルシステムを未変換ファイルシステムとして指定してください。この関数は、ドライブレターおよび(任意で)ディレクトリを含むファイルシステム名という1つの引数を取ります。例えば、

(w32-add-untranslated-filesystem "Z:")

ドライブ Z を未翻訳ファイルシステムとして指定し、

(w32-add-untranslated-filesystem "Z:\\foo")

ドライブ Z 上のディレクトリ \foo を未翻訳ファイルシステムとして指定します。

多くの場合、サイト上のすべてのユーザーがその恩恵を受けられるよう、.emacsやinit.elのinitファイル、あるいはsite-start.elでw32-add-untranslated-filesystemを使用します。

w32-add-untranslated-filesystemの効果を打ち消すには、関数w32-remove-untranslated-filesystemを使用してください。この関数は1つの引数を取り、その引数は先ほどw32-add-untranslated-filesystemで使用したものと同様に文字列である必要があります。

ファイルシステムを未変換として指定しても、文字セット変換には影響せず、行末変換にのみ影響します。実質的には、Emacsに対し、新規ファイルを作成する際に行末に改行を用いるというUnixスタイルの慣習をデフォルトで使用するよう指示するものです。コーディングシステムを参照してください。