Diredを起動するには、C-x d (dired)
と入力します。これにより、ミニバッファを使用してディレクトリ名が読み込まれ、そのディレクトリ内のファイルが一覧表示されるDiredバッファが開きます。また、ミニバッファの引数としてワイルドカード形式のファイル名パターンを指定することもでき、その場合はDiredバッファにそのパターンに一致するすべてのファイルが一覧表示されます。ディレクトリ部分にもワイルドカードを指定できます。例えば、
C-x d ~/foo/*.el RET C-x d ~/foo/*/*.el RET
前者は、ディレクトリ ‘foo’ 内の拡張子 ‘.el’ のファイルをすべて一覧表示します。後者は、‘foo’ のすべてのサブディレクトリ内にある拡張子 ‘.el’ のファイルを一覧表示します。
Posixシステムにおいて、システムシェルが再帰的グロブ機能であるglobstarをサポートしており、かつそのサポートが有効になっている場合、Diredで再帰的グロブを利用できます:
C-x d ~/foo/**/*.el RET
このコマンドは、‘foo’ のすべてのサブディレクトリを再帰的に辿り、拡張子が ‘.el’ であるすべてのファイルを含むディレクトリ一覧を表示します。なお、globstar の実装はシェルによって若干異なる点にご注意ください。期待される動作については、ご利用のシェルのマニュアルをご確認ください。
シェルが globstar をサポートしていても、デフォルトで無効になっている場合は、dired-maybe-use-globstar を nil
以外の値にカスタマイズすることで、Dired にこの機能を利用させることができます。すると、Dired は対応しているシェルに対して globstar
を有効にします(対応シェルの一覧については dired-enable-globstar-in-shell を参照してください)。
ミニバッファでは、通常の履歴および補完コマンドが使用可能です。特に、M-n は訪問したファイルの名前(もしあれば)をミニバッファに表示します(ミニバッファの履歴を参照)。
また、C-x C-f (find-file)
にディレクトリ名を指定して Dired を呼び出すこともできます。
C-x C-j (dired-jump)
と入力することで、任意のバッファのデフォルトディレクトリ(default-directory を参照)で Dired を呼び出すよう Emacs
に指示できます。バッファがファイルを参照している場合、このコマンドはポイントを、Dired
バッファに表示されているそのファイルの行に移動させます。そうでない場合は、ポイントはディレクトリ一覧の最初のファイルに移動します。例外として、Dired
バッファ内で C-x C-j と入力すると、Emacs
は親ディレクトリのディレクトリ一覧を表示し、dired-jump
を呼び出したディレクトリに対応する行にポイントを置きます。C-x 4 C-j (dired-jump-other-window) と入力しても同様の効果が得られますが、Dired
バッファが新しいウィンドウで表示されます(display-buffer の動作 を参照)。
変数 dired-listing-switches は、ディレクトリ一覧表示のために ls に渡すオプションを指定します。この文字列には ‘-l’ が必ず含まれている必要があります。dired コマンドでプレフィックス引数を使用する場合、ディレクトリ指定を入力する前に、ミニバッファで
ls スイッチを指定できます。指定方法にかかわらず、ls スイッチには、引数を必要としない短縮オプション(すなわち単一文字)と、引数を
‘=’ で指定するロングオプション(‘--’ で始まるもの)を含めることができます。
dired-listing-switches
を接続ローカル変数として宣言することで、リモートシステムが想定する値に合わせてその値を調整できます(接続ごとのローカル変数を参照)。
ファイル名に改行文字が含まれている場合、Diredはデフォルトでそれをリテラルの改行として表示するため、このファイル名の表示がDiredバッファ内で複数行にわたってしまいます。このようなファイル一覧に対してDiredの操作を実行すると、多くの場合失敗し、エラーが通知されます。このため、Diredがリテラルの改行を含むファイル名を表示する際、Emacsはこれを認識し、情報提供のための警告を含むバッファを自動的にポップアップ表示します。このようなファイル名に対して、Diredはlsスイッチ ‘-b’
を用いた代替表示を提供します。ここでは改行文字が‘\n’で表され、ファイルのDired一覧は通常通り1行に収まるため、適用可能なすべてのDired操作を実行できます。24
Emacsでは、Diredに‘-b’スイッチを使用させるための方法が2通り用意されています。
diredを呼び出す前に、dired-listing-switchesに‘-b’を追加できます。この変数はユーザーオプションであるため、カスタマイズインターフェース(カスタマイズの保存を参照)を使用するか、初期化ファイルでsetoptマクロ(変数の確認と設定を参照)を使用することで、その値を永続的に変更できます。25 また、C-u C-x dと入力することで、次のdired呼び出し時のみ有効な‘-b’を追加することもできます。
dired-auto-toggle-b-switch
を有効にすると、ファイル名に改行文字を含むファイルがあるディレクトリを開いた際、Emacs は自動的に ‘-b’ スイッチを追加し、Dired のディレクトリを再表示してファイル名に
‘\n’ を表示します。ファイル名を編集して ‘\n’ 文字を削除すると、編集完了時に Emacs は自動的に ‘-b’ スイッチを削除して Dired
バッファを再表示するため、タブやスペース文字を含むファイル名は、バックスラッシュのないリテラルのスペースとして表示されるようになります。改行文字を含むファイル名があるディレクトリを開いた後に
dired-auto-toggle-b-switch を有効または無効にすると、Emacs
は状況に応じて ‘-b’ スイッチを追加または削除し、自動的に Dired
バッファを再表示します。
Diredはモードラインに、lsを呼び出すために使用されたスイッチの表示を行います。デフォルトでは、Diredはスイッチが名前順または日付順のソートを示しているかを判定しようとし、その結果をモードラインに表示します。dired-switches-in-mode-line変数がas-isの場合、スイッチはそのまま表示されます。この変数の値が整数である場合、スイッチの表示はその長さに切り詰められます。また、この変数は関数であることもでき、その場合はdired-actual-switchesを唯一の引数として呼び出され、モードラインに表示するための文字列を返す必要があります。
ls プログラムが ‘--dired’ オプションをサポートしている場合、Dired
は自動的にそのオプションを渡します。これにより ls
が特定の特殊なファイル名に対して特別なエスケープシーケンスを出力するようになり、これがないと Dired はそれらの名前を解析できません。Emacs
セッションで初めて Dired を実行する際、ls が ‘--dired’
オプションをサポートしているかどうかを、そのオプションを指定して一度呼び出すことで確認します。終了コードが 0 の場合、Dired はその後
‘--dired’ オプションを使用し、そうでない場合は使用しません。変数
dired-use-ls-dired をカスタマイズすることで、この確認を抑制できます。値
unspecified(デフォルト)は確認を行うことを意味し、nil 以外の値はすべて ‘--dired’ オプションを使用することを意味し、nil は ‘--dired’
オプションを使用しないことを意味します。
MS-WindowsおよびMS-DOSシステム、ならびに一部のリモートシステムにおいて、Emacsはlsをエミュレートします。このエミュレーションのオプションや特有の挙動については、MS-Windowsにおけるlsのエミュレーションを参照してください。
Diredバッファを別のウィンドウに表示するには、C-x 4 d (dired-other-window) を使用します。C-x 5
d (dired-other-frame)
は、Diredバッファを別フレームに表示します。display-buffer の動作を参照してください。
q (quit-window)
と入力すると、Diredバッファが埋まり、そのバッファ専用にウィンドウが作成されていた場合はそのウィンドウが削除されます。
なお、‘-b’スイッチを使用すると、Diredはファイル名内のタブ文字を‘\t’として表示し、その他の制御文字やファイル名内のスペースを‘\’でエスケープします。
dired-listing-switches に ‘-b’ が含まれており、改行を含むファイル名があるディレクトリで dired
を呼び出した場合、改行は ‘\n’ として表示されるため、Emacs
は警告を出しません。