Emacs は素晴らしいツールで、適切なサードパーティパッケージを使えば、その中であなた自身の環境を作ることができます。ウィンドウの生成や端末のエミュレーションといった機能は、カジュアルなユーザには隠されている Emacsの部分のほんの一部に過ぎません。この記事では、Emacs を最大限に活用するために、これらの機能のいくつかに光を当てることを目的としています。

1. 新しいウィンドウを開く

Emacs の最も便利な機能の一つはウィンドウを分割する機能です。Ctrl+x, 2またはCtrl+x, 3` を使用すると、現在のバッファを水平または垂直方向に簡単に複製することができま す。これは、同じファイルの異なる部分を作業している場合に特に便利です。

このことを知った上で、この Ctrl + x パラダイムを使って、新しいファイル用にウィンドウを分割することもできます。デフォルトでは、通常のEmacsコマンドは、現在いるウィンドウを引き継ぎます。例えば、Ctrl + x, f を押してファイルを開くと、そのファイルが画面全体に表示されます。

しかし、Ctrl + x, 4 の後に f を押せば、そのファイルが画面全体に表示されます。Emacsにそのファイルを別のバッファに開くように指示することができます。これは、新しいファイルをチェックしたいが、現在作業しているバッファを保持したい場合に、非常に便利です。

さらに、Emacsのセッションで、現在開いているバッファに切り替えることもできます。そのためには、Ctrl + x, 4, そして b を押して、Emacs にコマンドバッファを開くように指示します。すると、セッションで現在開いているバッファの一覧が表示されます。

2. 端末エミュレータ

デフォルトでは、Emacs には 2 つのシェルが内蔵されています。1 つは “eshell” と呼ばれる Emacs Lisp で書かれたネイティブなコマンドインタプリタです。これはテキストのみのシェルで、Emacsから直接UNIXコマンドを実行することができます。

テキストのみなので、Emacsのテキストバッファと同じように、eshellのコマンド出力を変更することもできます。これは、デバッグ中にコンパイルエラーの間にメモを取りたい場合などに便利です。

eshellはその性質上、複雑なターミナルUI(TUI)プログラムを実行することができません。そのため、EmacsにはVT100端末エミュレータであるtermが同梱されています。

通常のLinux端末と同様に、termはエスケープシーケンスを含むVT100の全機能をエミュレートします。つまり、Emacsで任意のTUIアプリケーションを実行することができます。例えば、私は現在termを通してEmacsの中でvimを動かしています。

これで、Alt + x を押すと、eshell と term の両方を実行することができます。これでEmacsのコマンドバッファが表示されます。そこから eshell とタイプしてテキストターミナルをロードするか、term とタイプして VT100 エミュレータをロードします。

注意点として、term には限定された「テキストのみ」のモードがあり、 Control + c, j を押すことでアクセスすることができます。

これで現在の端末セッションが「ラインモード」になり、コマンドプロンプトとの間で簡単にコマンドのコピー&ペーストができるようになります。ここから、Ctrl + c, k を押すと、通常のターミナルモードに戻ることができます。

3. Emacsでリモートファイルにアクセスする

Emacsに組み込まれているもう一つの素晴らしいプログラムはTransparent Remote File Access, Multiple Protocol (TRAMP)です。これは,Emacsの中で任意のプロトコルを介して任意のファイルにシームレスにアクセスすることを可能にするシンプルなプログラムです.

TRAMPは、ssh、rlogin、suなどのヘルパープログラムを使って、ユーザをリモートコンピュータに接続することで動作します。そこから、TRAMPはリモートコンピュータのファイルをユーザーのローカルマシンにマウントします。これにより、これらのファイルがあたかもローカルにあるかのように見えるのです。

このことを知った上で、Ctrl + xfCtrl + Backspaceを押して、ファイルプロンプトをクリアすると、TRAMPを使うことができます。そこから、EmacsにTRAMPを使うように伝えるために、特定のパス形式を入力する必要があります。

/プロトコル:アドレス:/path/to/your/file

例えば、SSHでファイルサーバに接続するために、以下のようなTRAMPのパスを入力しました。

/sshx:myfileserver.net:/home/ramces/documents/myfile.txtを入力します。

TRAMPはEmacsの中で特権ファイルを編集することもできます。これは、システムファイルを素早く編集する必要があり、特権エディタを起動したくない場合に非常に有効です。また、TRAMPは特権ファイルに対してサンドボックスを作成するため、セキュリティ上の問題のリスクも軽減されます。

TRAMPを使って特権ファイルにアクセスするには、プロトコルとしてsuを使用する必要があります。

/su::/etc/yggdrasil.conf

この例では、TRAMPを通してYggdrasilの設定ファイルを編集しています。ローカルでファイルにアクセスするだけなので、suにアドレスを提供する必要はありませんでした。

Enter`を押すと、TRAMPは私のユーザパスワードを尋ねてきました。その後、まるで非特権ファイルのようにEmacsのバッファにファイルが読み込まれました。

4. Emacsでファジー検索をする

Emacsのデフォルトの検索機能は比較的不格好です。Ctrl+S で前方検索、Ctrl+R` で後方検索ができます。しかし、この検索方法は、特定の文字列にマッチするように厳密に制限されています。

つまり、検索ボックスに入力した文字列は、スペースを含めてすべて正確にマッチします。ほとんどの場合、テキスト検索は単一の単語や短いフレーズで構成されているので、これは問題ではありません。

それでも、Emacsにファジー検索をさせたい場合があるかもしれません。これは、複数の文字列の中の小さな部分だけにマッチするテキスト検索の一種です。

例えば、Emacsのデフォルトの検索では、検索ボックスに “hello world “と入力しても検索することはできません。

これを可能にするためには、init.elファイルに以下のLispコードを追加する必要があります。

(setq search-whitespace-regexp ".\*")
(setq isearch-lax-whitespace t)
(setq isearch-regexp-lax-whitespace nil)
  • 最初の関数 search-whitespace-regexp はテキスト検索時に任意の文字 (.*) を空白文字に置き換えます.
  • 2つ目の関数 isearch-lax-whitespace は一つの空白文字を検索するときに複数の空白文字にマッチするようにします。2つ目の関数 isearch-lax-whitespace は、1つの空白文字を検索する際に複数の空白文字にマッチさせることができます。
  • 最後に、3番目の関数である isearch-regexp-lax-whitespace は、あいまい検索を行うために単一の空白文字だけを使用する必要があることを確認します。

これで、Emacsクライアントをリロードして、あいまい検索が機能するかどうかテストすることができます。私の場合、“hello world “というフレーズを “he ld “と入力するだけで検索することができました。

5. Dired バッファーの編集

Dired は Emacs のデフォルトのファイルマネージャーです。その中核は、あなたのコンピュータのファイルシステムを簡単に調べ、どんなファイルでもそのまま Emacs バッファに開くことができるようにすることです。Dired には、Ctrl + x, d または Ctrl + x, f を押すことで簡単にアクセスすることができます。

しかし、Dired の主な問題のひとつは、そのバッファ内の任意のファイルを変更するのが厄介なことです。例えば、Dired でファイル名を変更する場合、2 つのことを行う必要があります。

  • まず、編集したいファイルを選択し、Mを押してマークする必要があります。 まず、編集したいファイルを選択し、M を押してマークします。 * それから、Shift + R を押して、名前の変更を切り替え、ファイルの新しい名前を指定します。

基本的な使い方であれば、この方法でファイル名を変更すれば十分ですが、複数のファイルを修正するためにこの方法を行うのは大変です。

それに対処するために、EmacsにはDiredバッファを直接テキストとして編集する機能も付いています。これにより、複数のファイルの名前を変更するだけでなく、パーミッションビットを変更することもできます。

これを行うには、Ctrl + xCtrl + q を押します。そうすると、“Editable Dired “モードが有効になります。ここから、Dired バッファを編集することができ、保存すると、その変更がファイルに適用されます。

例えば、複数のファイルの名前を変更したい場合は、現在のファイル名の上に新しいファイル名を入力すればよいのです。それが終わったら、Ctrl + CCtrl + Cを押して変更を保存すれば、それらのファイルの名前が変更されます。

Dired を使ってファイルのパーミッションを変更する

上述したように、Editable Diredでできるもう一つのことは、ファイルのパーミッション設定を更新することです。これを行うには、init.el ファイルに以下の行を追加する必要があります。

(setq wdired-allow-to-change-permissions t)

これで、Editable Dired から直接ファイルのパーミッションのビットを編集できるようになりました。例えば、次のようなファイルを考えてみましょう。

-rw-r--r-- 1 ramces ramces 8316 Mar 11 10:53 test.txt

最初の列のテキストは、このファイルが私に対して読み取りと書き込みの両方のパーミッション(rw-)を持っていることを表しています。さらに、他の人には読み取り権限しかありません(r-r-)。

これを変更するために、このテキストの列の上を選択し、他のビットに W を押して、他の人がこのファイルを編集できるようにしました。

-rw-rw-rw- 1 ramces ラムセス 8316 Mar 11 10:53 test.txt

一方、これを元に戻すには、任意のパーミッションビットに - を押すと、そのフィールドのパーミッションをクリアすることができます。

-r--r--r-- 1 ramces ramces 8316 Mar 11 10:53 test.txt

これで、デフォルトのEmacsにある5つの隠された機能を知ることができました。

よくある質問

1. 他のEmacsパッケージのために新しいウィンドウを作ることは可能ですか?

悲しいことにありません。Ctrl+x, 4コマンドはCtrl+x, fのように新しいファイルを開くときと、Ctrl+x, b` のようにバッファを開くときにしか使えません。

この制限を回避する一つの方法は、Alt + x を使って普通にパッケージを開くことです。そこから、Ctrl + x, 4, b を押すことで、以前のバッファを戻すことができます。

2. 2. VT100 エミュレータに別のシェルを使うことはできますか。

はい! はい! Alt+x` で term コマンドを実行すると、Emacs は使用するシェルを尋ねるプロンプトを表示します。デフォルトでは、あなたのシステムのデフォルトシェルが追加されます。つまり、あなたのデフォルトのシェルがbashであれば、Emacsはこのプロンプトで”/bin/bash “を提供します。

別のシェルを使用するには、この値を使用したいシェルのパスに置き換える必要があります。例えば、term で ksh を使いたい場合は、term が使用する端末を尋ねてくるので、 /bin/ksh と記述する必要があります。

3. Dired バッファへの変更を取り消すことはできますか。

はい、できません。Ctrl+c, ESC` を押すと、Editable Dired で行ったすべての変更を元に戻すことができます。しかし、これはまだ変更をディスクに保存していない場合にのみ有効です。

一旦 Ctrl + C, Ctrl + C を押すと、Emacs はあなたが行った全ての変更を書き込みます。それまでに、それらを元に戻すには、もう一度手動でファイルを編集するしかありません。

画像クレジット:Unsplash

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。