[ホーム]-> [emacs]-> [活用法]-> [dired]

dired/dired-x

dired/dired-x とは?

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-jdired-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/ というディレクトリにある拡張子が htmlcss であるファイルだけが表示されます。 (もっとも、例えば *.html に該当するファイルはあるが、*.css に該当するファイルがない場合、エラーが出てしまいますが。)

主なキー

主なコマンドは次の通りです。 詳しいことは info に書かれていますが、ざっとみてもいろいろなことが出来ることが分かると思います。

移動
SPC, n次の行へ
p前の行へ
削除
d削除フラグを付ける
u削除フラグを消す
x削除フラグがついたファイルを実際に削除
まとめて削除フラグをつける
##なんとか# のような自動保存ファイルに
~~ のついたバックアップファイルに
.番号つきバックアップファイルに
% d REGEXP RTN正規表現REGEXPに一致するものに
訪問
f, RETカーソル下のファイルを
ofと同じだが別ウィンドウに
C-ooと同じだがそのウィンドウを選択しない
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圧縮
LEmacs Lisp ファイルのロード
BEmacs 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 SWITCHESSWITCHES で表示の切替

他にもサブディレクトリの表示についてのコマンドが用意されています。 詳しくは info の Emacs の dired の所を御覧下さい。

カスタマイズ

dired-x を使っている場合は、あらかじめ設定しておいたファイルを表示しないようにすることもできます。 例えば、dired のフックを次のように設定したとします。

(add-hook 'dired-mode-hook
          (lambda ()
            (load "dired-x")
            (setq dired-omit-files-p t)
                 ))

すると、デフォルトで dired-omit-filesdired-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 の特定のキーに割り当てれば良いわけです。 その関数の書き方も上を参考にすると分かるでしょう。


[ホーム]-> [emacs]-> [活用法]-> [dired]