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
+ x
、f
、Ctrl
+ 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
にアドレスを提供する必要はありませんでした。
4. Emacsでファジー検索をする
Emacsのデフォルトの検索機能は比較的不格好です。Ctrl+
S で前方検索、
Ctrl+
R` で後方検索ができます。しかし、この検索方法は、特定の文字列にマッチするように厳密に制限されています。
(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
を押すことで簡単にアクセスすることができます。
- まず、編集したいファイルを選択し、
M
を押してマークする必要があります。 まず、編集したいファイルを選択し、M
を押してマークします。 * それから、Shift
+R
を押して、名前の変更を切り替え、ファイルの新しい名前を指定します。
基本的な使い方であれば、この方法でファイル名を変更すれば十分ですが、複数のファイルを修正するためにこの方法を行うのは大変です。
それに対処するために、EmacsにはDiredバッファを直接テキストとして編集する機能も付いています。これにより、複数のファイルの名前を変更するだけでなく、パーミッションビットを変更することもできます。これを行うには、Ctrl
+ x
と Ctrl
+ q
を押します。そうすると、“Editable Dired “モードが有効になります。ここから、Dired バッファを編集することができ、保存すると、その変更がファイルに適用されます。
例えば、複数のファイルの名前を変更したい場合は、現在のファイル名の上に新しいファイル名を入力すればよいのです。それが終わったら、Ctrl
+ C
、Ctrl
+ 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 はあなたが行った全ての変更を書き込みます。それまでに、それらを元に戻すには、もう一度手動でファイルを編集するしかありません。