GNU Emacsはテキスト行を分けるのに改行文字を使用します。これはGNU、Unixmその他のPOSIX準拠システムで使用されている慣習です。
対照的にMS-DOSとMS-Windowsは、テキスト行を分けるのに、通常はCR(carriage-return: キャリッジリターン)とその後にLF(linefeed: ラインフィード)の、2文字からなるシーケンスを使用します(LFは改行と同じ文字です)。したがってこれらのファイルを便利に編集するために、Emacsはこれらの行末(EOL: end-of-line)文字を変換する必要があります。そしてこれはEmacsが通常行なっていることです。Emacsはファイルを読み込むときCRLFを改行に変換して、ファイルに書き込むときは改行をCRLFに変換します。国際化文字コードの変換を処理するのと同じ仕組みが、この変換でも行なわれます(コーディングシステムを参照してください)。
ほとんどのファイルにおいて、この特別なフォーマット変換の重要な問題は、Emacsが報告する文字の位置(カーソル位置の情報を参照してください)が、オペレーティングシステムが認識するファイルサイズの情報と一致しないことです。
それに加えて、ファイル内容から行の区切りにCRLFではなく改行(LF)が使用されているとEmacsが認識した場合、Emacsはファイルの読み書きでEOL変換を行ないません。したがって特別に何かを行なわなくても、GNUおよびUnixシステムのファイルをMS-DOSで読み書きでき、編集した後でも、それらのファイルのEOLはUnixスタイルの慣習にしたがいます。
カレントバッファーにたいして、どのEOL変換が使用されているかは、モードラインに表示されます。そのバッファーにたいしてMS-DOSのEOL変換が使用されている場合、MS-WindowsでビルドされたEmacsでは、モードラインの先頭付近の、コーディングシステムニーモニックの後ろにバックスラッシュ‘\’が表示されます。なんのEOL変換も処理されていない場合、そのファイルのEOLフォーマットが通常のCRLFではないことを警告するために、バックスラッシュのかわりに文字列‘(Unix)’が表示されます。
ファイルをvisitして、DOSスタイルとUnixスタイルのどちらを使用するか指定するには、コーディングシステムを指定します(ファイルのテキストにたいするコーディングシステムの指定を参照してください)。たとえばC-x RET c unix RET C-x C-f
foobar.txtは、EOL変換をせずに、ファイルfoobar.txtをvisitします。CRLFで終わる行がある場合、Emacsは行末に‘^M’を表示します。同様に、C-x
RET
fコマンドで、そのバッファーを指定したEOLフォーマットで保存するよう指示できます。たとえばバッファーをUnixのEOLフォーマットで保存するには、C-x
RET f unix RET C-x
C-sとタイプします。DOSのEOL変換でファイルをvisitしていて、それをUnixのEOLフォーマットで保存すると、dos2unix
コマンドのように、そのファイルをUnixのEOLスタイルに変換できます。
NFS、Samba、または他の類似した方法により、GNUおよびUnixシステムを使用しているコンピューターのファイルシステムにアクセスする場合、Emacsはそれらのファイルシステム上のファイル
—
たとえファイルを新たに作成する場合でも、EOL変換を行なうべきではありません。EOL変換を行なわないようにするには、関数w32-add-untranslated-filesystem
を呼び出して、それらのファイルシステムがuntranslated(変換なし)だと指定します。この関数は、ドライブ文字とオプションでディレクトリーを含む、ファイルシステム名を引数にとります。たとえば、
(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
を使用するのが、ほとんどでしょう。site-start.elに記述しておけば、そのサイトのすべてのユーザーが恩恵にあずかることができます。
w32-add-untranslated-filesystem
の効果を取り消すには、関数w32-remove-untranslated-filesystem
を使用します。この関数は、前にw32-add-untranslated-filesystem
で使用された文字列と同様の文字列を引数にとります。
ファイルシステムを変換なしと指定しても、影響があるのはEOL変換だけで、文字セットの変換に影響はありません。原則的として、行末に改行を使用するUnixスタイルをデフォルトとして、新たにファイルを作成するようEmacsに指示します。コーディングシステムを参照してください。