次: , 上: Files


12.1 ファイル名

ファイルを操作するほとんどのEmacsコマンドには、 ファイル名を指定する必要があります。 (保存と復元の操作を除く。 バッファはこれらの操作に対して使うファイル名を記録している。) ファイル名は、ミニバッファを使って入力します(see Minibuffer)。 長いファイル名の指定を簡単にする補完も使えます。 See Completion

多くの操作には、デフォルトファイル名があり、 <RET>だけを打って空の引数を指定した場合に使われます。 通常、デフォルトファイル名は、 カレントバッファで訪問したファイルの名前です。 こうすることで、 Emacsのファイルコマンドで当該ファイルを操作するのが簡単になります。

各バッファにはデフォルトディレクトリがあります。 通常は、そのバッファの訪問先のファイルのディレクトリと同じです。 ディレクトリを指定しないでファイル名を入力すると、 デフォルトディレクトリを使います。 スラッシュ(`/')で始まらない相対的なディレクトリを指定すると、 デフォルトディレクトリ相対に解釈します。 デフォルトディレクトリは変数default-directoryに保持されていて、 バッファごとに別々の値を持ちます。

たとえば、デフォルトファイル名が/u/rms/gnu/gnu.tasksならば、 デフォルトディレクトリは/u/rms/gnu/です。 ディレクトリを指定しないで`foo'とだけ打つと、 /u/rms/gnu/fooを意味します。 `../.login'は、/u/rms/.loginを意味します。 `new/foo'は、ファイル名/u/rms/gnu/new/fooを意味します。

コマンドM-x pwdは、カレントバッファのデフォルトディレクトリを表示し、 コマンドM-x cdは、それを(ミニバッファで読んだ値に)設定します。 バッファのデフォルトディレクトリは、 cdコマンドを使ったときだけ変更されます。 ファイルを訪問しているバッファのデフォルトディレクトリは、 訪問したファイルのディレクトリに初期化されます。 C-x bで作ったバッファのデフォルトディレクトリは、 その時点のカレントバッファのデフォルトディレクトリと同じです。

デフォルトディレクトリは、ミニバッファでファイル名を読むときに、 実際にミニバッファに表示されます。 これには2つの目的があります。 デフォルトが何であるかを示すことで、 相対ファイル名を打ち込めるようにし、しかも、 その意味を確実に知ることができるようにします。 もう1つは、デフォルトディレクトリを編集して、 別のディレクトリを指定できるようにします。 変数insert-default-directorynilに設定すると、 デフォルトディレクトリを挿入しません。

ミニバッファで入力するとき、 テキストの一部として入っているデフォルトディレクトリを無視して、 絶対ファイル名を打っても何の問題もありません。 最終的なミニバッファの内容は不正なように見えても、 そうではありません。 たとえば、ミニバッファには`/usr/tmp/'が入っていて `/x1/rms/foo'を追加すると、`/usr/tmp//x1/rms/foo'となります。 Emacsは連続した2個のスラッシュの始めのスラッシュまでをすべて無視するので、 結果として`/x1/rms/foo'となります。 See Minibuffer File

ファイル名の中の`$'は環境変数で置き換えられます。 たとえば、シェルコマンド`export FOO=rms/hacks'で、 環境変数FOOを設定してあるとします。 そうすると、/u/rms/hacks/test.cの略称として /u/$FOO/test.c/u/${FOO}/test.cを使えます。 環境変数の名前は、`$'のうしろにある英数字全部です。 あるいは、`$'のうしろにある括弧で囲まれたものです。 シェルコマンドで設定した環境変数がEmacsに影響を及ぼすのは、 Emacsを起動するまえに設定したものに限ります。

名前の中に`$'があるファイルを参照するには、 `$$'と打ちます。 1個の`$'に対して変数の置き換えを行うときに、 この2個の`$'は1個の`$'に変換されます。 あるいは、ファイル名全体を`/:'でクォートします (see Quoted File Names)。

(変数の)置き換えを行うLisp関数はsubstitute-in-file-nameです。 置き換えは、ミニバッファで読んだファイル名だけに適用されます。

変数file-name-coding-systemnil以外を設定すると、 ファイル名に非ASCIIを含めることができます。 See Specify Coding