Next: , Previous: File Names, Up: Files


12.2 ファイルを訪問する

C-x C-f
ファイルを訪問する(find-file)。
C-x C-r
ファイルを眺めるために訪問し、変更を許さない (find-file-read-only)。
C-x C-v
最後に訪問したファイルのかわりに、別のファイルを訪問する (find-alternate-file)。
C-x 4 f
別のウィンドウでファイルを訪問する (find-file-other-window)。 選択されているウィンドウに表示されている内容は変化しない。
C-x 5 f
新たなフレームでファイルを訪問する (find-file-other-frame)。 選択されているフレームに表示されている内容は変化しない。
M-x find-file-literally
ファイルの内容をいっさい変換せずに訪問する。

ファイルを訪問する/訪れるとは、 ファイルの内容のコピーを編集できるようにEmacsバッファに入れることです。 Emacsは、訪問する各ファイルごとに新たにバッファを作ります。 バッファ名は、ディレクトリ部分を取りさったファイル名から作ります。 たとえば、ファイル名/usr/rms/emacs.texの バッファ名は‘emacs.tex’となります。 その名前のバッファがすでに存在するならば、 まだ使われていない名前になるようなもっとも小さい数を使って、 ‘<2>’, ‘<3>’などを付加して唯一の名前を作ります。

各ウィンドウのモード行にはウィンドウ内に表示している バッファ名が示されているので、 編集しているバッファが何かいつでもわかります。

編集コマンドによる変更は、Emacsバッファに対して行われます。 バッファを保存するまでは、 変更は、訪問先のファイルや他のどんな恒久的なものにも影響しません。 バッファを保存するとは、 バッファの現在の内容をそのバッファの訪問先のファイルに書き出すことです。 See Saving

バッファに未保存の変更がある場合、 バッファは変更されているといいます。 バッファを保存しないと変更内容が失われてしまうので、 これは重要なことです。 モード行の左端近くに2個の星印を表示して、 バッファが変更されていることを示します。

ファイルを訪問するには、コマンドC-x C-ffind-file)を使います。 このコマンドに、訪問したいファイル名を続けて<RET>で終えます。

ファイル名はミニバッファ(see Minibuffer)で読まれ、 このときデフォルトや標準的な方法の補完を使えます(see File Names)。 ミニバッファ内でC-gと打てば、C-x C-fをアボートできます。

C-x C-fが正しく完了したことは、画面上に新たに現れるテキストと モード行に現れる新たなバッファ名で確認できます。 指定したファイルが存在せず作成もできない場合や読めない場合には、 エコー領域にエラーメッセージが表示されます。

すでに訪問しているファイルを再度訪問すると、 C-x C-fは別のコピーを作らずに、 そのファイルを入れた既存のバッファを選択します。 しかし、そうするまえに、訪問してから、あるいは、保存してから以降に ファイルが変更されたかどうか検査します。 ファイルが変更されていると警告メッセージを表示します。 See Interlocking

新たにファイルを作りたいときにはどうするのでしょう? 単に訪問すればよいのです。 Emacsはエコー領域に‘(New File)’と表示しますが、 それ以外に関しては、あたかも空のファイルが存在するかのようにふるまいます。 変更してから保存すれば、ファイルを作成できます。

Emacsはファイルの内容から、行区切りの方法、 すなわち、(GNU/LinuxやUNIXで使われる)改行、 (Microsoftシステムで使われる)復帰改行、 (Machintoshで使われる)復帰のみを認識します。 さらに、Emacsの通常の方法、つまり、改行文字で行を区切るように 内容を自動的に変換します。 これは、コーディングシステム変換(see Coding Systems)の 一般的な機能の一部であり、 さまざまの異なるオペレーティングシステムから持ってきた ファイルを同一の方法で編集できるようにします。 テキストを変更してファイルに保存すると、 Emacsは逆変換を行い、必要ならば、改行を 復帰改行や復帰のみに戻します。

指定したファイルが実際にはディレクトリならば、 C-x C-fはEmacsのディレクトリブラウザであるdiredを起動するので、 ディレクトリの内容を『編集』できます(see Dired)。 diredは、ディレクトリ内のファイルを、消去したり、眺めたり、 操作するのに便利です。 しかし、変数 find-file-run-dirednilならば、 ディレクトリを訪問しようとするとエラーになります。

指定したファイル名にワイルドカード文字が含まれていると、 Emacsは一致するすべてのファイルを訪問します。 ワイルドカード文字そのものを含む名前のファイルを訪問するには、 See Quoted File Names

オペレーティングシステムが変更を許さないファイルを訪問すると、 Emacsはバッファを読み出し専用に設定するので、 修正できなかったり、修正できてもあとで保存に手間取ります。 C-x C-qvc-toggle-read-only)で、 バッファを書き込み可能にできます。 See Misc Buffer

ときには、自分でまちがって変更しないように、 ファイルを読み出し専用で訪問したい場合があります。 そういう場合には、コマンドC-x C-rfind-file-read-only)で ファイルを訪問します。

(ファイル名をまちがって打ったりして) 存在しないファイルを意図せずに訪問してしまったときには、 C-x C-vコマンド(find-alternate-file)を使って 本当の目的のファイルを訪問します。 C-x C-vC-x C-fと同様ですが、 (バッファが変更されていればまず保存するかどうか聞いてから) カレントバッファを消去します。 訪問するファイル名を読むときには、 ミニバッファにデフォルトファイル名全体を挿入し、 ディレクトリ部分の直後にポイントを置きます。 これは、ファイル名をほんの少しまちがって入力したときに便利です。

存在するのに読めないファイルを訪問すると、 C-x C-fはエラーを通知します。

C-x 4 ffind-file-other-window)は、 別のウィンドウで、指定したファイルを入れたバッファを選択することを除けば、 C-x C-fと同じです。 C-x 4 fを実行するまえに選択されていたウィンドウは、 同じバッファを表示したままです。 ウィンドウを1つだけ表示しているときにこのコマンドを使うと、 そのウィンドウを2つに分けて、一方のウィンドウにはまえと同様に同じバッファを 表示しますが、もう一方には新たに指示したファイルを表示します。 See Windows

C-x 5 ffind-file-other-frame)も同様ですが、 新たなフレームを開くか、 捜しているファイルを表示している既存のフレームを見えるようにします。 ウィンドウシステムを使っているときだけ、 この機能を利用できます。 See Frames

特別な符号化や変換をせずにファイルを文字の列として編集したいときには、 M-x find-file-literallyコマンドを使います。 このコマンドは、C-x C-fのようにファイルを訪問しますが、 形式変換(see Formatted Text)、文字コード変換(see Coding Systems)、 (圧縮を)自動展開(see Compressed Files)といったことをしません。 (そのままの文字の列としてではなく)普通の方法で同じファイルを すでに訪問している場合には、このコマンドは、 そのままの文字の列として訪問するかどうか聞いてきます。

2つの特別なフック変数で、ファイルを訪問する操作を修正して拡張できます。 存在しないファイルを訪問すると、 find-file-not-found-hooksのリスト内の関数群を実行します。 この変数は関数のリストを保持していて、 呼び出した関数の中のどれかがnil以外を返すまで1つ1つ順に呼び出します。 ファイルが存在するかどうかに関わらず、 どんなファイルを訪問するときでも find-file-hooksには関数のリストが入っていると仮定され、 それらの1つ1つを順にすべて呼び出します。 いずれの場合でも、関数は引数を受け取りません。 2つの変数のうち、先にfind-file-not-found-hooksを使います。 これらの変数はノーマルフックではありません。 これらの名前が‘-hook’ではなくて‘-hooks’で終っていることで、 その事実を表しています。 See Hooks

編集するファイルに対して自動的にメジャーモード(see Choosing Modes)を 設定し、そのファイルに対して特別なローカル変数(see File Variables)を 定義する方法がいくつかあります。