プログラミング
私のEmacs設定 (Dired)
My Emacs Configuration (Dired) (eugene-andrienko.com)
要約
この記事は、Emacsのファイルブラウザ機能であるDiredの設定と日常的な使い方について解説しています。コマンドラインツールやMidnight Commanderからの移行、Diredの起動方法、ファイル操作(マーク、フラグ、リネーム)、外部プログラム連携、テスト方法などが詳細に説明されています。
全文翻訳
私のEmacs設定 (Dired)
カレンダーアイコン 2026年7月5日
タグアイコン emacs it
このブログ記事は、私のEmacs設定に関する一連の記事の一部です。以前の記事:私のEmacs設定(共通部分) なぜuse-packageをやめたのか?
ここでは、Diredの使用に関する設定と、私の習慣、通常の操作に特化します。設定を説明するだけでなく、Diredを日常的にどのように使用しているかを説明したいと思います。
Diredについて、まだ使用したことのない読者のために簡単な説明をします。これはEmacsのプログラムで、強力なファイルブラウザとして機能し、あなたの貴重なファイルやディレクトリを(ほぼ)通常のEmacsバッファとして扱います。つまり、同じ「Emacs習慣」を使ってカタログ間をナビゲートしたり、操作したりできます。
図1:Emacsで開かれた2つのDiredウィンドウ。
前置き
私は、コンピューティングのためにある種のミニマリスト環境を使用する傾向があります。まず、ファイルやカタログの操作のほとんどにCLI(bash、次にzsh)を使用していました。これはうまく機能しましたが、インタラクティブな操作が必要でした。複数のcpコマンドを発行せずに、あるカタログから別のカタログへファイルをコピー/移動する¹、他のカタログを閲覧しながら1つのディレクトリの内容を表示する、Midnight Commanderのように、などです。
しばらくの間、上記のmcを使用し、それはうまく機能しました。しかし、私はもっと多くのことを望んでいました。画像のプレビューなどです。そして、Midnight Commanderは、Farのようなプラグインがないため、これを行うことができませんでした。はい、それは良いメニュー(F2キーにバインド)を持ち、さまざまなファイルタイプに対してさまざまなコマンドを表示できます。しかし、それは私には十分ではありませんでした。
そこで、ふと、Diredを試してみることにしました。ほとんどすべてのEmacsディストリビューションにすでにインストールされているからです。そして、物事は非常にうまくいったので、私は今もDiredを使用しています。
Diredの呼び出し
通常、Diredは2つの方法で呼び出します。
まず、あるプロジェクト¹で作業している場合、C-x p d ホットキーを押して、プロジェクト内の目的のカタログにジャンプするためのいくつかの文字を入力します。例えば、私のドットファイルで作業していて、ディレクトリconfigを開きたい場合、次のように入力します。
C-x p d configs <RET>
そして、目的のカタログに入ります。
プロジェクトのルートカタログを単に開きたい場合は、代わりにC-x p D キーバインディングを使用します。
第二に、私の愛する、方法 — C-x C-j キーバインディング³。これは現在の作業ディレクトリでDiredバッファを開きます。例えば、ブログ記事のファイルを編集しながら、その記事のファイルを扱いたい場合、C-x C-jを押すだけで、記事のOrgファイルと画像のバッファが開きます。
図2:article.orgファイルを編集中にC-x C-jを押した後。
もちろん、私が使用するDiredを呼び出す他の方法もいくつかあります。例えば、デフォルトのC-x d キーバインディングですが、これは便宜上C-x C-dにリバインドしました。
(keymap-global-set "C-x C-d" 'dired)
このキーバインディングは、ローカルまたはリモート(TRAMPの助けを借りて)のいずれかのディレクトリを開きたい場合に、ほとんどの時間使用します。例えば、これはリモートではないサーバーserver.example.comのbinカタログをユーザーアカウントuserで開く方法です。
C-x d /ssh:username@server.example.com:~/bin
このコロンを入力した後、GnuGPは、server.example.comのユーザーのパスワードで~/.authinfo.gpgを解読するための秘密鍵のパスワードを尋ねてきます。
また、私のシステムでは、Diredバッファを持つEmacsフレームは、ファイルマネージャーを開くことができる任意のプログラムから開くことができます。例えば、Librewolfでファイルをダウンロードした後、「ダウンロード」ドロップダウンメニューのフォルダアイコンをクリックすると、ダウンロードしたファイルのあるディレクトリのDiredバッファを持つEmacsフレームが開きます。
Emacsをデフォルトのファイルマネージャーとして設定する方法については、すでにここで説明しました:Emacs Diredをデフォルトのファイルマネージャーとして。
ファイル操作
コピー、移動、またはファイルのセットの削除といった通常のファイル操作は非常に簡単です。
単にmキーバインディングでいくつかのファイルをマークし、それらをコピー/移動します(Emacsマニュアルの32.7 ファイルの操作を参照)。
「単に」と引用符で囲んだのは、ファイルをマークするためのmキーバインディングだけではないからです。マークする方法はたくさんあります。Emacsマニュアルの32.6 Diredマーク対フラグセクションを参照してください。
ほとんどの場合、次の方法でいくつかのファイルをマークします。
キーバインディング 説明
* s すべてのファイルとカタログをマーク
. 指定した拡張子のファイルをマーク
% m 正規表現に一致する名前のファイルをマーク
U すべてのマークを削除
t マークを切り替える
例えば、拡張子で不要なファイルをマークして削除するために* .を使用します。例えば、すべてのwebp画像を削除するには:* . webp RET D y RET。
便利な点:カーソルがすでにWEBP画像の行にある場合、* . RET D y RETだけで十分です。webpの部分はデフォルトで事前選択されています。
ちなみに、これらの長い「キーバインディング」は実際にはそうではありません。これは2つの別々のキーバインディング(*と.、そしてD)であり、ファイル拡張子を選択するためのプロンプトへの私の応答、およびファイル削除確認への応答です。
あるいは別の例:すべてのWEBP画像をJPGに変換したい場合(正直なところ、WEBPは企業イメージフォーマットとして好きではありません)、次のように行います。
WEBP画像の行で* .を押し、RETを押します。この時点で、ディレクトリ内のすべてのWEBPファイルが選択されます。次に!を押し、M-nを数回押して画像用の私の(以前に保存した)特別なコマンドにスクロールします。gm convert ? `?`.jpg コマンドが選択されたら、Enterを押します。
そして、しばらく待つと、すべてのWEBPファイルがGraphicsMagickでJPEGに変換されます。不要なWEBPファイルは上記のように削除できます。
画像ファイルに対してgm convertコマンドをどのように定義するか不思議に思うかもしれませんか?答えは外部プログラムセクションにあります。
もう一つの好きなキーバインディングは% mです。正規表現の力により、CLIやmcでファイル操作を行っていた頃に欠けていた、あるカタログ内の任意のファイルを非常に巧妙な方法で選択できるようになりました。私が覚えている限り、mcは正規表現でファイルを選択できますが、Diredではこの機能ははるかに豊富です。
これは合成例で、e6fサブ文字列で始まり.webpまたは.webp.SOME_3_LETTER_EXTENで終わる画像ファイルを選択しています。正規表現^e6f.+\.webp\.?\([a-z]\{3\}\}?を使用しています。
説明したマークとは別に、ファイルは削除のためにフラグを付けることもできます。マークとフラグはDired内で異なるため、いくつかのファイルをマークして別の場所にコピーすることができます。同時に別のファイルをフラグ付けして削除することができます。これらのフラグ付けされたファイルは、マークされたファイルとは異なるフェイスを持ちます。例えば、マークされたファイルが紫色のフェイス(上記のスクリーンショットを参照)を持っている場合、フラグ付けされたファイルは赤色になります。
手動でフラグを付けるにはdホットキーがあります。フラグ付けされたファイルを削除するにはxホットキーを使用できます。
そしてもちろん、ファイルを削除するためにフラグ付けするために私が使用するキーバインディングはもっとたくさんあります。
キーバインディング 説明
% & ゴミファイルをフラグ付け
% d 正規表現でファイルをフラグ付け
「ゴミファイル」はdired-garbage-files-regexp変数によって定義されます。例えば、私の設定では、LaTeXビルドのアーティファクトが「ゴミ」と見なされます。
;; ゴミファイルの正規表現。
;; これらのファイルは
;; "% &" でフラグ付けできます
;; (setopt dired-garbage-files-regexp "\(?:\.\(?:aux\|bak\|dvi\|log\|o\|orig\|rej\|toc\)\)\'")
そのため、% &を押すと、現在のディレクトリ内のすべてのLaTeXビルドアーティファクトが削除のために選択されます。
% dは% mキーバインディングのように機能しますが、マークする代わりにファイルをフラグ付けします。
強力なリネーム
Diredの最も強力な機能の1つを見てみましょう。
ディレクトリリストは単なるEmacsのバッファなので、通常のテキストとして編集できますか?もちろん!WDiredモードはこれを行います。Diredバッファを書き込み可能にします。そのため、ファイル名を通常のテキストとして編集できます。isearch-query-replace-regexp、マクロ、その他のクールなEmacs機能を使用して。
WDiredモードに入るには、C-x C-qキーバインディングを使用できます。そして、C-c C-cキーバインディングは、すべての変更を適用して通常のDiredモードに戻ります。C-c C-kキーバインディングで、すべての変更を破棄して通常のDiredモードに戻ります。
WDiredモードをよく使用して、ファイル名から不要なテキストを削除します。例えば、次のような多くのファイル名から.fb2部分を削除したいとします。
some-interesting-book.fb2.epub
この状況