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

26.1.1 ファイルを参照するための関数

本節では、通常ファイルを参照する際に使用される関数について説明します。歴史的な経緯により、これらの関数の名前は ‘visit-’ ではなく ‘find-’ で始まっています。バッファの参照ファイル名にアクセスする関数や変数、あるいは参照ファイル名から既存のバッファを検索する関数や変数については、バッファファイル名を参照してください。

Lispプログラムにおいて、ファイルの内容を参照したいが変更は行わない場合、最も高速な方法は一時バッファでinsert-file-contentsを使用することです。ファイルへのアクセスは不要であり、かえって時間がかかります。ファイルからの読み込みを参照してください。

コマンド: find-file filename &optional wildcards

このコマンドは、ファイル filename を参照するバッファを選択します。既存のバッファがある場合はそれを使用し、ない場合は新しいバッファを作成してファイルの内容を読み込みます。また、そのバッファを返します。

いくつかの技術的な詳細を除けば、find-file 関数の本体は基本的に以下と同等です:

(switch-to-buffer (find-file-noselect filename nil nil wildcards))

(ウィンドウ内のバッファへの切り替えのswitch-to-bufferを参照してください。)

wildcards が nil 以外である場合(対話型呼び出しでは常にこの条件が成立します)、find-file は filename 内のワイルドカード文字を展開し、一致するすべてのファイルを参照します。

find-file を対話的に呼び出すと、ミニバッファで filename の入力が求められます。

コマンド: find-file-literally filename

このコマンドは、find-fileと同様にfilenameを訪れますが、書式変換(ファイル書式変換を参照)、文字コード変換(符号化方式を参照)、または行末変換(行末変換を参照)は行いません。ファイルを訪れるバッファはユニバイトとなり、ファイル名に関わらずメジャーモードはFundamentalモードになります。ファイル内のファイルローカル変数の指定(ファイルローカル変数を参照)は無視され、require-final-newlineによる自動解凍およびファイル末尾への改行追加(require-final-newlineを参照)も無効になります。

なお、Emacs がすでに同じファイルを非リテラル形式で参照しているバッファを持っている場合、同じファイルをリテラル形式で参照するのではなく、単に既存のバッファに切り替える点に注意してください。ファイルの内容をリテラル形式で確実に参照したい場合は、一時的なバッファを作成し、insert-file-contents-literally を用いてファイルの内容をそこに読み込む必要があります(ファイルからの読み込みを参照してください)。

関数: find-file-noselect filename &optional nowarn rawfile wildcards

この関数は、すべてのファイルアクセス関数の中核となるものです。ファイル filename を参照するバッファを返します。必要に応じて、このバッファをカレントに設定したり、ウィンドウに表示したりすることもできますが、この関数自体はそのような処理は行いません。

この関数は、既存のバッファがあればそれを返し、なければ新しいバッファを作成してファイルを読み込みます。find-file-noselect が既存のバッファを使用する場合、まずそのバッファで最後にアクセスまたは保存されて以来、ファイルに変更がないかを確認します(nowarn が non-nil である場合を除きます。詳細は後述)。ファイルに変更がある場合、この関数は変更されたファイルを再読み込みするかどうかをユーザーに確認します。ユーザーが ‘yes’ と答えた場合、バッファ内で以前に行われた編集内容は失われます。

ファイルの読み込みでは、行末変換やフォーマット変換(ファイルフォーマット変換を参照)を含む、ファイル内容のデコード(符号化方式を参照)が行われます。wildcards が nil 以外の場合、find-file-noselect は filename 内のワイルドカード文字を展開し、一致するすべてのファイルを処理します。

この関数は、オプション引数 nowarn が nil でない限り、さまざまな特殊なケースにおいて警告または注意メッセージを表示します。例えば、バッファを作成する必要があるにもかかわらず filename という名前のファイルが存在しない場合、echo 領域にメッセージ ‘(New file)’ を表示し、バッファを空のままにします。また、nowarn が nil でない場合は、ファイルの最終更新時刻の確認もスキップされます。

find-file-noselect 関数は通常、ファイルを読み込んだ後に after-find-file を呼び出します(訪問時のサブルーチン を参照)。この関数は、バッファのメジャーモードを設定し、ローカル変数を解析し、直前に訪問したファイルよりも新しい自動保存ファイルが存在する場合にユーザーに警告を表示し、最後に find-file-hook 内の関数を実行して終了します。

オプション引数 rawfile が nil 以外の場合、after-find-file は呼び出されず、失敗時に find-file-not-found-functions も実行されません。さらに、nil 以外かつ rawfile 以外の値を指定すると、符号化方式の変換およびフォーマット変換が抑制されます。

find-file-noselect 関数は通常、ファイル filename を参照しているバッファを返します。ただし、実際にワイルドカードが使用され展開された場合は、各種ファイルを参照しているバッファの一覧を返します。

(find-file-noselect "/etc/fstab")
     ⇒ #<buffer fstab>
コマンド: find-file-other-window filename &optional wildcards

このコマンドは、ファイル filename を参照しているバッファを選択しますが、選択済みのウィンドウとは別のウィンドウで選択を行います。既存の別のウィンドウを使用したり、ウィンドウを分割したりすることもあります。詳細は ウィンドウ内のバッファへの切り替え を参照してください。

このコマンドを対話的に呼び出すと、filename の入力が求められます。

コマンド: find-file-read-only filename &optional wildcards

このコマンドは、find-fileと同様にファイルfilenameを参照するバッファを選択しますが、そのバッファを読み取り専用としてマークします。関連する関数や変数については、読み取り専用バッファを参照してください。

このコマンドを対話的に呼び出すと、filename の入力が求められます。

ユーザーオプション: find-file-wildcards

この変数が nil 以外の場合、各種 find-file コマンドはワイルドカード文字の有無を確認し、それに一致するすべてのファイルを処理します(対話的に呼び出された場合、または wildcards 引数が nil 以外である場合)。このオプションが nil の場合、find-file コマンドは wildcards 引数を無視し、ワイルドカード文字を特別に扱うことはありません。

ユーザーオプション: find-file-hook

この変数の値は、ファイルが参照された後に呼び出される関数のリストです。ファイルのローカル変数の指定(もしあれば)は、フックが実行される前に処理されます。フック関数が実行される際は、当該ファイルを参照しているバッファがカレントとなります。

この変数は通常のフックです。フックを参照してください。

変数: find-file-not-found-functions

この変数の値は、find-file または find-file-noselect に存在しないファイル名が渡された際に呼び出される関数のリストです。find-file-noselect は、存在しないファイルを検出するとすぐにこれらの関数を呼び出します。リストの順に呼び出し、いずれかが non-nil を返すまで続けます。buffer-file-name は既に設定済みです。

関数の値が利用されており、多くの場合、一部の関数しか呼び出されないため、これは通常のフックではありません。

変数: find-file-literally

このバッファローカル変数にnil以外の値を設定すると、save-bufferはあたかもバッファがファイルをリテラルに参照しているかのように、すなわち一切の変換を行わずに動作します。コマンドfind-file-literallyはこの変数のローカル値を設定しますが、ファイル末尾への改行の自動追加を避ける場合など、他の同等の関数やコマンドでも同様に設定可能です。この変数は永続的なローカル変数であるため、メジャーモードの変更による影響は受けません。