dired とは DIRectory EDitor の略です。
その昔 DOS を使っていた頃はファイラーを使っていた人も多いと思いますが、
そのようなモードです。
現在の Emacs には dired の拡張版である dired-x も含まれています。
デフォルトでは、dired が使われますが、.emacs.el に
(add-hook 'dired-load-hook (lambda () (load "dired-x")))
と書いておけば、dired を起動したときに dired-x の方が起動します。
SKK 使いの人への注意: dired-x を load
すると、通常 skk の起動キーに使われている C-x C-j が
dired-jump に奪われてしまいます。
これを避けるには、フックを使って
(add-hook 'dired-load-hook
(lambda ()
(load "dired-x")
(global-set-key "\C-x\C-j" 'skk-mode)
))
みたいに書いておくと良いです。 後で説明するように、ここには他にもいろいろ設定をすると嬉しいことがあるかもしれません。
今では更に speedbar というものもありますが...。
C-x d (dired) とすると、ディレクトリ名を聞いてくるので、それに答えるとそのディレクトリを開きます。
他に C-x 4 d とかすると、別ウィンドウで、C-x 5 d とすると別フレームで開かれます。
ウィンドウは次のような感じになります。
/home/foo/public_html/emacs/emacs21: 合計 356 drwxr-xr-x 3 matsu matsu 4096 Feb 8 21:04 . drwxrwxr-x 8 matsu matsu 4096 Feb 6 22:40 .. -rw-r--r-- 1 matsu matsu 237 Jun 16 2000 .htaccess drwxrwxr-x 3 matsu matsu 4096 Feb 7 14:33 CVS -rw-r--r-- 1 matsu matsu 13193 Feb 4 23:30 abbrev.html -rw-r--r-- 1 matsu matsu 11512 Feb 5 10:51 autoinsert.html ...
ワイルドカードを使って特定のファイルを指定することもできます。
例えば C-x d ~/public_html/{*.html,*.css} とすると、
~/public_html/ というディレクトリにある拡張子が html と css であるファイルだけが表示されます。
(もっとも、例えば *.html に該当するファイルはあるが、*.css に該当するファイルがない場合、エラーが出てしまいますが。)
主なコマンドは次の通りです。 詳しいことは info に書かれていますが、ざっとみてもいろいろなことが出来ることが分かると思います。
| 移動 | |
|---|---|
| SPC, n | 次の行へ |
| p | 前の行へ |
| 削除 | |
|---|---|
| d | 削除フラグを付ける |
| u | 削除フラグを消す |
| x | 削除フラグがついたファイルを実際に削除 |
| まとめて削除フラグをつける | |
|---|---|
| # | #なんとか# のような自動保存ファイルに |
| ~ | ~ のついたバックアップファイルに |
| . | 番号つきバックアップファイルに |
| % d REGEXP RTN | 正規表現REGEXPに一致するものに |
| 訪問 | |
|---|---|
| f, RET | カーソル下のファイルを |
| o | fと同じだが別ウィンドウに |
| C-o | oと同じだがそのウィンドウを選択しない |
| v | 閲覧 view-file で |
| 印 | |
|---|---|
| m, * m | カレントファイルに |
| * * | 実行ファイルに |
| * @ | シンボリックリンクに |
| * / | . と .. 以外のディレクトリに(数引数で印消去) |
| * s | 現在のサブディレクトリ内の . と .. を除くファイルに |
| u, * u | 印を消す |
| DEL, * DEL | ポイントを前の行に動かしつつ印を消去 |
| ! | 全てのファイルの印を消去 |
| * C-n | 印付きの次のファイルへ |
| * C-p | 印付きの前のファイルへ |
| * t | 全ての印の入れ替え |
| * c OLD NEW | 印を OLD から NEW へ |
| * % REGEXP RTN | 正規表現 REGEXP に一致する名前のファイルに |
| % m REGEXP RTN | 同上 |
| % g REGEXP RTN | ファイルの内容が REGEXP に一致するファイルに |
| C-_ | dired バッファへの変更のアンドゥ |
| ファイル操作 | |
|---|---|
| C NEW RTN | コピー(NEW はディレクトリか新ファイル名) |
| D | 削除 |
| R NEW RTN | 名前変更 |
| H NEW RTN | ハードリンク作成 |
| S NEW RTN | シンボリックリンク作成 |
| M MODESPEC RTN | モード(パーミッションビット)変更 |
| G NEWGROUP RTN | グループ変更 |
| O NEWOWNER RTN | 所有者変更 |
| P COMMAND RTN | 印刷 |
| 註: COMMAND は lpr-command と lpr-swithches から候補を表示 | |
| Z | 圧縮 |
| L | Emacs Lisp ファイルのロード |
| B | Emacs Lisp ファイルのバイトコンパイル |
| A REGEXP RTN | 指定ファイル群から正規表現 REGEXP に一致するものを検索 |
| Q FROM RTN TO RTN | 同じく正規表現での置換 |
註: 数引数 N を付けると、後続 N 個 (N < 0 の場合は上の) のファイルに対して、 そうでなければ、ファイルに * 印がついているものがあれば、印がついているもの全てに、 そうでなければ、現在行のファイルのみを操作する。
| シェルコマンドの実行 | |
|---|---|
| ! | ミニバッファで読み込んだシェルコマンドを指定ファイルに実行 |
註: コマンド中に * を使うと * をファイル名のリストで置き換えて、コマンドを一度だけ実行、そうでない場合は指定ファイル毎にコマンドを一回ずつ実行
| ファイル名変換など | |
|---|---|
| % u | 選択したファイル名を大文字に |
| % l | 選択したファイル名を小文字に |
| % R FROM RTN TO RTN | ファイル名変更 |
| % C FROM RTN TO RTN | コピー |
| % H FROM RTN TO RTN | ハードリンクを張る |
| % S FROM RTN TO RTN | シンボリックリンクを張る |
註: 最後の4つでは正規表現が使えます。
| ファイルの比較 | |
|---|---|
| = | 現在行とマークの位置のファイルを比較 |
| M-= | 現在行のファイルとその最新バックアップを比較 |
| バッファの更新 | |
|---|---|
| g | バッファ全体の更新 |
| l | 指定したファイルの更新 |
| k | 表示行の削除 |
| s | アルファベット順/時間順表示の切替 |
| C-u s SWITCHES | SWITCHES で表示の切替 |
他にもサブディレクトリの表示についてのコマンドが用意されています。 詳しくは info の Emacs の dired の所を御覧下さい。
dired-x を使っている場合は、あらかじめ設定しておいたファイルを表示しないようにすることもできます。 例えば、dired のフックを次のように設定したとします。
(add-hook 'dired-mode-hook
(lambda ()
(load "dired-x")
(setq dired-omit-files-p t)
))
すると、デフォルトで
dired-omit-files と
dired-omit-extensions で設定されているファイル達が無視されます。
これらの値は C-h v (describe-variable)などで確認して下さい。
なお、M-o でファイルの無視がトグルされます。
無視するファイルをカスタマイズするには、直接 dired-omit-extensions を設定してもよいですし、 dired-omit-extensions が次の変数で設定されていることから、それを編集するのも手です。(重複しているものもあるので注意。) completion-ignored-extensions, dired-latex-unclean-extensions, dired-bibtex-unclean-extensions, dired-texinfo-unclean-extensions
単純に無視するファイルを追加するなら、
(setq dired-omit-files
(concat dired-omit-files "\\|^INDEX$\\|.bak\\.foo$"))
などとすればよいです。
dired を使っていると、特定の Emacs Lisp の関数を特定のキーに割り当てたくなります。 例えば、HTML で書かれたファイルがあった場合、それを emacs-w3m で見たいなど。
上の場合は、emacs-w3m の TIPS.ja に書かれているように、
(add-hook 'dired-mode-hook
(lambda ()
(define-key dired-mode-map "\C-xm" 'dired-w3m-find-file)))
(defun dired-w3m-find-file ()
(interactive)
(require 'w3m)
(let ((file (dired-get-filename)))
(if (y-or-n-p (format "Open 'w3m' %s " (file-name-nondirectory file)))
(w3m-find-file file))))
のように書けば、OK です。
これを見れば分かるように、dired 用の関数を用意して、それを dired-mode-map の特定のキーに割り当てれば良いわけです。 その関数の書き方も上を参考にすると分かるでしょう。