[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26. ディレクトリエディタdired

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Dired"
"emacs/ディレクトリエディタdired"へのコメント(無し)
検索全文Elisp

diredはディレクトリ一覧をバッファに作成します。 場合によっては、サブディレクトリの一覧も含まれます。 普通のEmacsコマンドでこのバッファの中を動き廻ったり、 特別なdiredコマンドで一覧中にあるファイルを操作できます。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.1 diredの起動

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Dired%20Enter"
"emacs/diredの起動"へのコメント(無し)
検索全文Elisp

diredを起動するには、C-x dM-x diredを使います。 このコマンドは、一覧表示するファイルを指定するための ディレクトリ名やファイルのワイルドカードパターンをミニバッファで読み取ります。 diredlist-directoryと違うのは、 バッファがdiredモードになっていて 特別なdiredコマンドを使えるようになることです。

変数dired-listing-switchesには、 ディレクトリ一覧を作成するlsプログラムに与えるオプションを指定します。 オプション中には`-l'が必ず含まれている必要があります。 diredコマンドに数引数を指定すると、 ミニバッファでディレクトリを指定するまえに lsのオプションを指定できます。

diredバッファを現在選択しているウィンドウではなく 別のウィンドウに表示したい場合には、 C-x dのかわりにC-x 4 ddired-other-window)を使います。 C-x 5 ddired-other-frame)は 別のフレームにdiredバッファを表示します。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.2 diredバッファ内のコマンド

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Dired%20Commands"
"emacs/diredバッファ内のコマンド"へのコメント(無し)
検索全文Elisp

diredバッファは『読み出し専用』であり、 このバッファに文字を挿入しても意味がないので、 dxのような通常の印字文字は特別なdiredコマンドに使われます。 diredコマンドのいくつかは、diredバッファの カレントファイル(current file、つまり、現在行のファイル)に (mark)やフラグ(flag)を付けます。 他のコマンドは、印やフラグが付いたファイル群に作用します。

Emacsの普通のカーソル移動コマンドはdiredバッファでも使えます。 特殊用途のカーソル移動コマンドもあります。 C-nC-pは、カーソルを行の先頭ではなく ファイル名の先頭に位置合わせするように再定義されています。

さらに便利なように、 diredモードではSPCnC-nに等価です。 pC-pに等価です。 (diredでは行単位の移動をよく行うため、打鍵しやすくしてある。) DEL(上に移動してフラグを消す)は、単に上へ移動する場合には便利です。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.3 diredでのファイル削除

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Dired%20Deletion"
"emacs/diredでのファイル削除"へのコメント(無し)
検索全文Elisp

diredの主な利用法は、ファイルに削除のフラグを付けてから、 フラグの付いているファイルを(本当に)削除することです。

d
このファイルに削除フラグを付ける。
u
この行の削除フラグを消す。
DEL
ポイントをまえの行に移し、その行の削除フラグを消す。
x
削除フラグが付いたファイルを(本当に)削除する。

ファイルに削除フラグを付けるには、 そのファイルを表示している行に移動してdと打ちます。 削除フラグは、行頭に表示される`D'という文字でわかります。 このコマンドはポイントをつぎの行に進めますから、 dコマンドを繰り返し実行すれば後続のファイルにもフラグを 付けることができます。 数引数は反復回数になります。

即座にファイルを削除するかわりに削除フラグを付けるので、 誤ってファイルを消してしまう危険性は低くなります。 フラグを付けたファイルを抹消するようにdiredに指示するまでは、 uDELを使って削除フラグを消せます。 udired-unmark)は、dと同じように動作しますが、 フラグを付けるのではなくフラグを消します。 DELdired-unmark-backward)は上に移動してフラグを消します。 これは、数引数-1を指定したuと同じです。

削除フラグが付いたファイルを(本当に)削除するには、 xdired-expunge)と打ちます。 このコマンドは、削除フラグが付いたファイルの一覧を表示し、 yesでの確認応答を求めます。 確認するとdiredはフラグが付いたファイルを削除し、 diredバッファからそれらに対応する行を削除します。 小さくなったdiredバッファは選択されたままです。

確認にnoと答えたり、C-gで中断すると、 ただちにdiredに戻りますが、削除フラグは付いたままで、 ファイルを実際に削除しません。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.4 一度に多数のファイルにフラグを付ける

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Flagging%20Many%20Files"
"emacs/一度に多数のファイルにフラグを付ける"へのコメント(無し)
検索全文Elisp

#
(名前が`#'で始まり`#'で終る) すべての自動保存ファイルに削除フラグを付ける。 (see 節 12.5 自動保存、不慮の事故に対する備え)。

~
(名前が`~'で終る)すべてのバックアップファイルに削除フラグを付ける。 (see 節 12.3.1 バックアップファイル)。

&
簡単に作成し直せるような名前のすべてのファイルに削除フラグを付ける。

. (ピリオド)
余分な番号付きバックアップファイルに削除フラグを付ける。 新しいバックアップファイル数個と古いのもの数個を除いて、 そのあいだのものにフラグを付ける。

% d regexp RET
名前が正規表現regexpに一致するすべてのファイルに削除フラグを付ける。

#~&.のコマンドは、 ファイル名に基づいて数多くのファイルに削除フラグを付けます。 これらのコマンドは本当に便利です。 というのは、ファイルを実際には削除しないからです。 残しておきたいファイルの削除フラグは消せばいいのです。

&dired-flag-garbage-files)は、 変数dired-garbage-files-regexpで指定される 正規表現に一致する名前のファイルに削除フラグを付けます。 デフォルトは、TeXが生成するある種のファイルと patchプログラム (43) が生成する`.orig'と `.rej'のファイルです。

#dired-flag-auto-save-files)は、 自動保存ファイルと思われる名前のファイル、 すなわち、名前が`#'で始まり`#'で終るもの すべてに削除フラグを付けます。 ~dired-flag-backup-files)は、 バックアップファイルと思われる名前のファイル、 すなわち、名前が`~'で終るものすべてに削除フラグを付けます。

.(ピリオド、dired-clean-directory)は、 バックアップファイルのいくつか、つまり、 古いもの数個と新しいもの数個を除くすべてに削除フラグを付けます。 通常、変数dired-kept-versions (保存するときに適用される変数kept-new-versionsではない) には新しい版を何個残すかを指定し、 変数kept-old-versionsには古い版を何個残すかを指定します。

C-u 3 .のように正の数引数をピリオドに指定すると、 変数dired-kept-versionsを無視して新しい版を何個残すか指定します。 負の数引数は変数kept-old-versionsを無視して 数引数の絶対値で古い版を何個残すか指定します。

% dコマンドは、指定した正規表現(dired-flag-files-regexp)に 一致する名前のファイルに削除フラグを付けます。 ファイル名のうちディレクトリに無関係な部分についてだけ一致を調べます。 `^'(先頭)や`$'(末尾)で、一致箇所を固定できます。 サブディレクトリを隠蔽すれば、サブディレクトリを一致検査から除外できます (see 節 26.13 サブディレクトリの隠蔽)。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.5 diredでのファイルの訪問

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Dired%20Visiting"
"emacs/diredでのファイルの訪問"へのコメント(無し)
検索全文Elisp

diredには、diredバッファに表示したファイルを訪問したり調べたりするための コマンドがあります。 これらは現在行のファイルに作用します。 そのファイルが実際にはディレクトリであると、 これらのコマンドはそのサブディレクトリに対して (別のdiredバッファを作って)diredを起動します。

f
C-x C-fと打鍵したのと同様に、 現在行が表すファイルを訪問する(dired-find-file) see 節 12.2 ファイルを訪問する

RET
fと等価。

o
fと同様だが、ファイルのバッファを別のウィンドウに表示する (dired-find-file-other-window)。 diredバッファは最初のウィンドウに表示されたまま残る。 これはC-x 4 C-fでファイルを訪問するのに似ている。 see 節 14. 複数のウィンドウ

C-o
現在行が表すファイルを訪問して別のウィンドウに表示するが、 そのウィンドウを選択しない(dired-display-file)。

Mouse-2
クリックした行が表すファイルを訪問する (dired-mouse-find-file-other-window)。 oコマンドのように、 ファイルの表示には別のウィンドウを使う。

v
M-x view-fileを用いて現在行が表すファイルを閲覧する (dired-view-file)。

ファイルを閲覧することはファイルを訪問することに似ているが、 ファイルの中で移動できることに重きを置き、 ファイルの変更は許されない。 see 節 View File



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.6 diredの印とフラグ

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Marks%20vs%20Flags"
"emacs/diredの印とフラグ"へのコメント(無し)
検索全文Elisp

ファイルに`D'で示される削除フラグを付けるかわりに 他の文字(通常`*')で示されるを付けることもできます。 『抹消』(x)以外のほとんどのdiredコマンドは、 `*'で印付けしたファイルを扱えます。

以下のコマンドは、`*'で印付けするコマンド、 印を消すコマンド、印に作用するコマンドです。 (フラグを付けたり消したりするコマンドについてはsee 節 26.3 diredでのファイル削除。)

m
* m
カレントファイルに`*'で印を付ける(dired-makr)。 数引数nを指定すると、カレントファイルから始めて後続の n個のファイルに印を付ける。 (nが負の場合は、上の-n個のファイルに印を付ける。)

* *
実行ファイルすべてに`*'で印を付ける (dired-mark-executables)。 数引数を指定すると、これらのファイルすべての印を消す。

* @
シンボリックリンクすべてに`*'で印を付ける (dired-mark-symlinks)。 数引数を指定すると、これらのファイルすべての印を消す。

* /
`.'と`..'を除くすべてのディレクトリに`*'で印を付ける (dired-mark-directories)。 数引数を指定すると、これらのディレクトリすべての印を消す。

* s
現在のサブディレクトリ内の`.'と`..'を除くすべてのファイルに 印を付ける(dired-mark-subdir-files)。

u
* u
この行の印を消す(dired-unmark)。

DEL
* DEL
ポイントをまえの行へ動かし、その行の印を消す (dired-unmark-backward)。

* !
diredバッファのすべてのファイルの印を消す (dired-unmark-all-files-no-query)。

* ? markchar
指定した文字markcharの印すべてを消す (dired-unmark-all-files)。 引数は1文字。 RETで入力を終えてはならない。

数引数を指定すると、このコマンドは印の付いたファイルごとに 印を消すかどうか聞いてくる。 yは消すの意味、nは消さないの意味。 !で答えると残りのファイルすべてについて問い合わせずに印を消す。

* C-n
印が付いているつぎのファイルへ進む (dired-next-marked-file)。 ファイルに『印』が付いているとは、なんらかの印があること。

* C-p
印が付いているまえのファイルへ戻る (dired-prev-marked-file

* t
すべての印を切り替える(dired-do-toggle)。 つまり、`*'で印が付いているファイルの印を消し、 印が付いていなかったファイルすべてに`*'で印を付ける。 `*'以外で印が付いたファイル群は影響されない。

* c old new
文字oldの印を文字newの印に置き換える (dired-change-marks)。 このコマンドは、`*'や`D'以外の文字で印を付けるための主要な手段。 引数はそれぞれ1文字。 RETで入力を終えてはならない。

このコマンドではほとんどどんな文字でも印として使えるため、 ファイルをいろいろに分類できる。 oldが空白(` ')であると、 コマンドは印が付いていないすべてのファイルに作用する。 newが空白であると、コマンドは作用するファイルの印を消す。

下の例はこのコマンドの能力を例示するものであり、 印のないファイルすべてに`D'フラグを付け、 `D'フラグが付いているものすべてからはフラグを消します。

 
* c D t  * c SPC D  * c t SPC

ここでは、`t'で印を付けたファイルはないものと仮定します。

% m regexp RET
* % regexp RET
正規表現regexpに一致する名前のファイルすべてに (`*'で)印を付ける(dired-mark-files-regexp)。 このコマンドは% dに似ているが、 削除フラグ`D'のかわりに`*'でファイルに印を付ける。 see 節 26.4 一度に多数のファイルにフラグを付ける

ファイル名のうちディレクトリに無関係な部分だけで一致を検査する。 `^'(先頭)や`$'(末尾)で、一致箇所を固定できる。 サブディレクトリを一致検査から除外するには、 サブディレクトリを隠蔽する。

% g regexp RET
ファイルの内容が正規表現regexpに一致するすべてのファイルに (`*'で)印を付ける(dired-mark-files-containing-regexp)。 このコマンドは% mに似ているが、 ファイル名ではなくその内容で探す。

C-_
印の追加や削除などのdiredバッファに対する変更をアンドゥする (dired-undo



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.7 ファイルの操作

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Operating%20on%20Files"
"emacs/ファイルの操作"へのコメント(無し)
検索全文Elisp

本節では、ファイルを操作する基本的なdiredコマンドについて説明します。 コマンドはすべて大文字であり、実行前に、引数を読み取ったり確認を求めるために ミニバッファを使います。 これらすべてのコマンドには、 操作対象となるファイルを指定する方法がいくつかあります。

以下は、上のように操作対象を選ぶファイル操作コマンドの一覧です。 (!%などの他のdiredコマンドも、 操作対象とするファイルを決定するのに上の方法を用いる。)

C new RET
指定したファイルをコピーする(dired-do-copy)。 引数newはコピー先のディレクトリか、 (1つのファイルをコピーする場合は)新しい名前。

変数dired-copy-preserve-timenil以外の場合には、 このコマンドでコピーしたファイルの更新時間はもとのファイルと同じになる。

D
指定したファイルを削除する(dired-do-delete)。 本節の他のコマンドと同様に、このコマンドは印付けされたファイル、 あるいは、後続のn個のファイルに作用する。 対照的に、xdired-expunge)は、 フラグが付いたファイルを削除する。

R new RET
指定したファイルの名前を変更する(dired-do-rename)。 引数newは移動先のディレクトリか、 (1つのファイルの名前を変える場合には)新しい名前。

diredは、名前を変更したファイルに対応するバッファの訪問先の ファイル名を自動的に変更するので、新しい名前が反映される。

H new RET
指定したファイルにハードリンクを張る(dired-do-hardlink)。 引数newはリンクを置くディレクトリか、 (1つのリンクを張る場合には)リンクに与える名前。

S new RET
指定したファイルにシンボリックリンクを張る(dired-do-symlink)。 引数newはリンクを置くディレクトリか、 (1つのリンクを張る場合には)リンクに与える名前。

M modespec RET
指定したファイルのモード(いわゆるパーミッションビット)を変更する (dired-do-chmod)。 このコマンドはchmodプログラムを使うので、 modspecにはchmodが扱える任意の引数を指定できる。

G newgroup RET
指定したファイルのグループをnewgroupに変更する (dired-do-chgrp)。

O newowner RET
指定したファイルの所有者をnewownerに変更する (dired-do-chown)。 (ほとんどのシステムでは、スーパーユーザーだけがこれを実行できる。)

変数dired-chown-programで、 実際の操作を行うために使用するプログラムの名前を指定する。 (システムによっては、chownを置く場所が異なる。)

P command RET
指定したファイルを印刷する(dired-do-print)。 ファイルを印刷するコマンドを指定する必要があるが、 (lpr-bufferが使うのと同じ) 変数lpr-commandlpr-switchesとから推定した 適切なものがミニバッファに示される。

Z
指定したファイルを圧縮する(dired-do-compress)。 ファイルがすでに圧縮済みと思われるときは展開する。

L
指定したEmacs Lispのファイルをロードする(dired-do-load)。 see 節 21.7 Emacs用のLispコードのライブラリ

B
指定したEmacs Lispのファイルをバイトコンパイルする (dired-do-byte-compile)。 see 節 `バイトコンパイル' in
Emacs Lisp リファレンスマニュアル

A regexp RET
指定したファイル群に対して正規表現regexpに一致するものを探す (dired-do-search)。

このコマンドはtags-searchの変形。 最初にみつかったところで探索は終る。 探索を再開してつぎに一致するものを探すには、M-,を使う。 see 節 20.13.5 タグテーブルを用いた探索と置換

Q from RET to RET
指定したファイル群のそれぞれについて、 query-replace-regexp(問い合わせながら正規表現を置換する)を実行し、 from(正規表現)に一致する部分をtoに置換する (dired-do-query-replace)。

このコマンドはtags-searchの変形。 置換のループを抜けたあとに、 探索を再開してさらに置換を行うには、M-,を使う。 see 節 20.13.5 タグテーブルを用いた探索と置換

+は特別なファイル操作コマンドです(dired-create-directory)。 このコマンドは、ディレクトリ名を読み取り、 それが既存でなければ新たに作成します。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.8 diredでのシェルコマンド

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Shell%20Commands%20in%20Dired"
"emacs/diredでのシェルコマンド"へのコメント(無し)
検索全文Elisp

diredコマンドの!dired-do-shell-command)は、 ミニバッファからシェルコマンドを読み取り、 指定したファイルすべてについてそのシェルコマンドを実行します。 diredコマンドの普通の方法で操作対象のファイルを指定できます (see 節 26.7 ファイルの操作)。 複数ファイルにシェルコマンドを適用する方法は2通りあります。

各ファイルごとにコマンドを1回実行したいが、 コマンドの最後ではなく途中にファイル名を指定したい場合にはどうするのでしょう? あるいは、もっと複雑にファイル名を指定したい場合にはどうするのでしょう? それにはシェルのループを使います。 下の例では、指定した各ファイルに対してuuencodeを実行しますが、 その出力は対応する`.uu'というファイルに格納します。

 
for file in *; do uuencode $file $file >$file.uu; done

シェルコマンドの作業ディレクトリは、 diredバッファのトップディレクトリです。

!コマンドは、実行後に新たにできたファイルや変更された ファイルを表示するためにdiredバッファを更新することはしません。 これはシェルコマンドを実際には理解しておらず、 シェルコマンドがどのファイルを変更するのかわからないからです。 diredバッファを更新するにはgコマンドを使います (see 節 26.14 diredバッファの更新)。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.9 diredでのファイル名の変換

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Transforming%20File%20Names"
"emacs/diredでのファイル名の変換"へのコメント(無し)
検索全文Elisp

ここにあげるコマンドはファイル名を組織的に変更します。

% u
選択したファイルの名前を大文字に変える (dired-upcase)。 古いファイル名が`Foo'と`bar'だった場合、 新しいファイル名は`FOO'と`BAR'になる。

% l
選択したファイルの名前を小文字に変える (dired-downcase)。 古いファイル名が`Foo'と`bar'だった場合、 新しいファイル名は`foo'と`bar'になる。

% R from RET to RET
% C from RET to RET
% H from RET to RET
% S from RET to RET
これらの4つのコマンドは、それぞれ、 ファイル名を変更する、コピーする、ハードリンクを張る、 シンボリックリンクを張る。 これらのコマンドは、いずれも、 古いファイル名から正規表現の置換で新しいファイル名を決定する。

正規表現の置換を用いる4つのコマンドは、実質的には、 diredバッファにおいて一連の選択したファイルの名前を 探索して置換を行います。 これらは引数を2つ読み取ります。 正規表現fromと置換パターンtoです。

これらのコマンドは、正規表現fromに一致する各『古い』ファイル名の 一致した部分をtoで置換します。 replace-regexp(see 節 10.7.2 正規表現による置換)のように、 toの中では`\&'や`\digit'を用いて 古いファイル名に一致したパターン全体やその一部を参照できます。 ファイル名の2箇所以上の部分に正規表現が一致する場合には、 最初の一致部分が置換されます。

たとえば、% R ^.*$ RET x-\& RETは、 選択されたファイルの名前の先頭にx-を付け加える形で 名前を変えます。 逆に、各ファイルの名前の先頭の`x-'を取り去ることもできて、 1つの方法は、% R ^x-\(.*\)$ RET \1 RETです。 あるいは、% R ^x- RET RETでもできます。 (ファイル名全体に一致するようにするには`^'と`$'を使う。)

通常、置換処理ではファイル名のディレクトリ部分は考慮しません。 ディレクトリ内のファイルの名前だけを操作します。 数引数0を指定すると、置換はディレクトリ名を含んだ絶対ファイル名に作用します。

一連のファイルを操作対象に選ぶときに、 それらを操作するときに使うのと同じregexp(正規表現)を使いたい場合が あるでしょう。 これを行うには、% m regexp RETでまず一連のファイルに 印を付けてから、それらを操作するコマンドにも同じ正規表現を使います。 これを簡単に行えるように、 %の付いたコマンドは、%付きコマンドいずれかに最近指定した 正規表現をデフォルトで使います。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.10 diredでのファイルの比較

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Comparison%20in%20Dired"
"emacs/diredでのファイルの比較"へのコメント(無し)
検索全文Elisp

diredには、指定したファイルをdiffで比較するコマンドが2つあります。

=
diffプログラム(dired-diff)を用いて、 (ポイントがある箇所の)カレントファイルを (マークがある箇所の)他のファイルと比較する。 マークがある箇所のファイルがdiffの第1引数で、 ポイントがある箇所のファイルが第2引数になる。

M-=
カレントファイルとその最新のバックアップファイルとを比較する (dired-backup-diff)。 カレントファイルがバックアップファイルそのものであるときは、 バックアップファイルのバックアップファイルとの比較を行う。 このようにして、任意の版のバックアップファイルとの比較を行える。

バックアップファイルはdiffの第1引数になる。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.11 diredのサブディレクトリ

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Subdirectories%20in%20Dired"
"emacs/diredのサブディレクトリ"へのコメント(無し)
検索全文Elisp

通常、diredバッファは1つのディレクトリだけを表示します。 しかし、そのサブディレクトリ群を一緒に表示させることもできます。

1つのdiredバッファ内に複数のディレクトリを表示させるもっとも簡単な方法は、 lsを実行するときにオプション`-lR'を指定することです。 (diredを実行するときに数引数を指定すると、 これらのオプションをミニバッファで指定できる。) これにより、すべてのレベルのすべてのサブディレクトリを表示した 再帰的なディレクトリ一覧を作れます。

しかし、一般には、すべてのサブディレクトリでは多すぎます。 普通は、特定のサブディレクトリだけを含めたいでしょう。 それには、iコマンドを使います。

i
指定したサブディレクトリの内容をバッファの終りに追加する。

ディレクトリであるファイルを表す行で、 idired-maybe-insert-subdir)コマンドを使います。 指定したサブディレクトリの内容を同じdiredバッファに挿入し、 その箇所へ移動します。 挿入されたサブディレクトリの内容は、 `ls -lR'の出力と同様に、 diredバッファのトップレベルのディレクトリのあとに続きます。

すでにサブディレクトリの内容がバッファにある場合には、 iコマンドはその表示箇所に移動するだけです。

どちらの場合においても、iは移動するまえにEmacsのマークを設定するので、 C-u C-SPCでバッファ内のもとの箇所 (そのサブディレクトリを表す行)へ戻れます。

サブディレクトリの内容を更新するには、 ldired-do-redisplay)コマンドを使います。 サブディレクトリを削除するにはkを使います。 See 節 26.14 diredバッファの更新



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.12 サブディレクトリへの移動

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Subdirectory%20Motion"
"emacs/サブディレクトリへの移動"へのコメント(無し)
検索全文Elisp

diredバッファにサブディレクトリが表示されている場合、 コマンドC-x [C-x ]でディレクトリ単位に移動できます。

以下のコマンドは、1つのdiredバッファ内で ディレクトリ木構造を上下に移動するコマンドです。 これらはすべてディレクトリのヘッダ行 (directory header lines)、 つまり、ディレクトリの内容を表示する部分の先頭にある ディレクトリ名を示す行に移動します。

C-M-n
レベルに関係なくつぎのサブディレクトリのヘッダ行へ進む (dired-next-subdir)。

C-M-p
レベルに関係なくまえのサブディレクトリのヘッダ行へ戻る (dired-prev-subdir)。

C-M-u
親ディレクトリのディレクトリヘッダ行へ移動する(dired-tree-up)。

C-M-d
ディレクトリ木構造を1つ降りて最初のサブディレクトリのヘッダ行へ移動する (dired-tree-down)。

<
まえのディレクトリファイルの表示行へ戻る(dired-prev-dirline)。 これらの行は、親ディレクトリにおいてファイルとしてディレクトリを表す行。

>
つぎのディレクトリファイルの表示行へ進む(dired-next-dirline)。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.13 サブディレクトリの隠蔽

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Hiding%20Subdirectories"
"emacs/サブディレクトリの隠蔽"へのコメント(無し)
検索全文Elisp

サブディレクトリの隠蔽(hide)とは、 選択的表示(see 節 9.4 選択的な表示)を用いて ヘッダ行以外を見えなくすることです。

$
ポイント位置にあるサブディレクトリを隠蔽、あるいは、再表示して、 ポイントをつぎのサブディレクトリへ移動する (dired-hide-subdir)。 数引数は反復回数。

M-$
diredバッファ中のすべてのサブディレクトリを隠蔽し、 サブディレクトリのヘッダ行だけを残す(dired-hide-all)。 あるいは、隠蔽されているサブディレクトリがある場合には、 すべてのサブディレクトリを再表示する。 このコマンドを使うと、 深いディレクトリ木構造の概形を調べたり、 遠く離れたサブディレクトリへ素早く移動できる。

通常のdiredコマンドは、 隠蔽されたサブディレクトリ内のファイルについてまったく考慮しません。 たとえば、印を付けたファイルに作用するコマンドは、 隠蔽されたディレクトリ内に印を付けたファイルが あったとしてもそれらを無視します。 したがって、サブディレクトリを一時的に隠蔽すれば、 印を消さなくてもサブディレクトリを操作対象から外せます。

サブディレクトリを隠蔽するコマンドはトグルとして働きます。 つまり、表示されていれば隠蔽し、隠蔽されていれば表示します。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.14 diredバッファの更新

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Dired%20Updating"
"emacs/diredバッファの更新"へのコメント(無し)
検索全文Elisp

本節では、(diredとは無関係に)外部でのディレクトリやファイルの変更を diredバッファに反映させるコマンド、および、 diredバッファの一部を削除するコマンドを説明します。

g
diredバッファの全内容を更新する(revert-buffer)。

l
指定したファイルを更新する(dired-do-redisplay)。

k
指定したファイルの表示行を削除する。 ファイルではなく、単に表示行だけを消す(dired-do-kill-lines)。

s
アルファベット順の表示と日付/時間順の表示を切り替える (dired-sort-toggle-or-edit)。

C-u s switches RET
オプションswitchesdired-listing-switchesとして用いて diredバッファを更新する。

grevert-buffer)コマンドを実行すると、 表示されているファイルやディレクトリの変更に基づいてdiredバッファを 更新します。 このコマンドは消されたファイルに対するものを除いて すべての印やフラグを保存します。 隠蔽されたサブディレクトリも更新されますが、隠蔽されたままです。

いくつかのファイルだけを更新する場合には、 ldired-do-redisplay)と打ちます。 このコマンドは、後続のn個のファイル、 印を付けたファイルがあればそれらのファイル、 カレントファイルのいずれかに作用します。 それらを更新するとは、それらのファイルの現状をファイルシステムから取得し、 それを正しく反映するようにバッファを更新します。

lをサブディレクトリのヘッダ行で実行すると、 対応するサブディレクトリの内容を更新します。

指定したファイルの表示行を削除する、 つまり、ファイルそのものではなく行だけを削除するには kdired-do-kill-lines)と打ちます。 数引数nを指定すると、 このコマンドは、後続のn個のファイルに作用します。 さもなければ、印を付けたファイルに作用します。

削除するファイルの表示行がディレクトリだった場合には、 そのディレクトリの内容もバッファから削除されます。 サブディレクトリのヘッダ行でC-u kと打っても、 diredバッファからサブディレクトリの内容を削除できます。

gコマンドは、このようにして削除した表示行を画面に呼び戻すことが できますが、サブディレクトリに関してはできません。 各サブディレクトリを再度挿入するにはiを使う必要があります。

diredバッファ内のファイルは、通常、 ファイル名のアルファベット順に並んでいます。 diredは日付/時間順に並べ替えることもできます。 diredコマンドsdired-sort-toggle-or-edit)は、 これら2つのソート方法を切り替えます。 diredバッファのモード行には、アルファベット順と日付/時間順の どちらで現在表示しているかが示されます。

C-u s switches RETで、 変数dired-listing-switchesに新しい値を設定できます。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

26.15 diredとfindプログラム

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Dired%20and%20Find"
"emacs/diredとfindプログラム"へのコメント(無し)
検索全文Elisp

findプログラムを使ってファイルを選べば、 diredバッファ上に表示する一連のファイルをもっと柔軟に選択できます。

ワイルドカードに一致する名前のファイルを探索するには M-x find-name-diredを使います。 このコマンドは、2つの引数directorypatternを読み取り、 directoryにあるすべてのファイル、 あるいは、そのサブディレクトリ下にあるpatternに一致する名前のファイルを 選択します。

このようにして選択されたファイルはdiredバッファに表示され、 このバッファではもとのdiredコマンドを使えます。

ファイル名ではなくファイルの内容で調べたい場合には、 M-x find-grep-diredを使います。 このコマンドはミニバッファから2つの引数directoryregexpを 読み取ります。 directoryにあるすべてのファイル、 あるいは、regexpに一致するものを含む一連のサブディレクトリを選択します。 このコマンドは、プログラムfindgrepを実行して動作します。 21.1 Emacs下でのコンパイラの実行M-x grep-findも参照してください。 Emacsの正規表現ではなくgrepの正規表現を書くことを忘れないでください。

このような一連のコマンドの中でもっとも一般的なコマンドはM-x find-diredで、 findが検査に用いる任意の条件を指定できます。 このコマンドはミニバッファから2つの引数directoryfind-argsを 読み取ります。 検査すべき条件を指示するfind-argsを渡して、 directoryにおいてfindを実行します。 このコマンドを使うには、findの使い方を知っている必要があります。

これらのコマンドが出力する表示形式は変数find-ls-optionで 制御されます。 デフォルトは、lsに使うオプションとして`-ld'を指定します。 出力形式が壊れて見える場合には、 この変数の値を変更する必要があるかもしれません。


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]