Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Branch: master
Fetching contributors…

Cannot retrieve contributors at this time

139 lines (114 sloc) 10.934 kB
Welcome to the Emacs Shell
Eshellは,すべてEmacs Lispで実装されたコマンドシェルです。ユーザーがリクエスト
したもの以外の外部プロセスを立ち上げることはありません。これは,bash, zsh, rc,
4dosのようなコマンドシェルの機能を置き換えることを意図しています。というのは,
Emacs自体が,それらのシェルによって達成されるタスクの多くを取り扱うことができる
からです。
Emacs shellを動かすことが楽しみであるという事実のほか,Eshellによって提供される
ユニークな特徴がいくつかあります。より詳しい説明は,EshellFeaturesにあります。
# Emacs Lispプログラミング環境との統合
Emacsが移植されたすべてのシステムで同じシェルを使うことができること。Emacsの外
側に何も必要としないため,Eshellは,かなりの程度,オペレーティングシステムから
独立しています。より首尾一貫した作業環境を提供するために,ls, mv, rm, lnなどの
一般的なUNIXコマンドのいくつかは,Lispで実装されています。
Eshellの古いバージョンを使っている人に対していうと,ヴァージョン2.1は,完全に新
しい,モジュール化された構造を持ったものです。それは,現代的なシェルによって提
供される特徴のほとんどをサポートしています。
- コマンド引数の補完 (tcsh, zsh)
- 入力履歴管理 (bash)
- 出力の賢いスクロール
- 疑似デバイス (クリップボードにコピーするための``/dev/clip''のようなもの)
- 拡張されたグロビング (zsh)
- 引数やグロビングの予測 (zsh)
- バッファ,ファイル,シンボル,プロセスなどへの入出力リダイレクト
- 4DOSのみに見られるような,多くの素晴らしい機能
- LispおよびEshell両方の構文にもとづくエイリアス機能
- パイプ,連続したコマンド,バックグラウンドジョブなど...。
Eshellは,Emacs 20.4以降か,XEmacs 21.1以降で,動作するようにデザインされました。
それは,GNU/Linux, Windows NT 4.0, およびWindows 2000でテストされています。
その他のバージョンのEmacsで,Eshellを動作させようとするとき,生じるかもしれない
一般的な問題とそれに対処する方法を述べます。
Emacs 20.3では,Pcompleteのバイトコンパイルは,失敗します。Pcompleteディレクト
リで,``make install''と入力するかわりに,``make pcmpl-auto.el install_el''と入
力してください。そして,``pcmpl-auto.el''をpcompleteがインストールされたディレ
クトリにコピーしてください。なぜ,この問題が生じるのかは,私にはわかりません。
動作中のEmacsで,pcompleteをバイトコンパイルするのは,うまくいくようです。
Eshellを使うためには,次の設定を.emacsファイルに追加してください。
(load "eshell-auto")
これは,必要な自動読み込みファイルを定義します。
次に,`M-x eshell`と入力してください。インストールの完全な説明は,INSTALLファイ
ルにあります。
比喩的にいって,シェルというのは,カーネルというオペレーティングシステムの心臓
部を包み込む部分だといえます。カーネルは,サービスを提供するよう待機している,
純粋な機能を提供するエンジンだとみなすことができ,一方,ユーザープログラムは,
その目的を達成するため,その機能を利用するものといえます。
シェルの役割は,そういった機能を,まだ形成されていない状態にあるユーザープログ
ラムにとってアクセス可能な状態にすることです。非常に大雑把にいって,シェルとは,
カーネルの機能をテキスト形式のコマンドに結びつけるものであり,それは,ユーザー
が言語的な構成物を通じて,オペレーティングシステムと対話できるようににしてくれ
ます。プロセスを立ち上げることは,おそらく,シェルが行なうもっとも重要なことしょ
う。それは,カーネルのフォークと実行の機能を使います。
ほかのプログラムも,カーネルの機能を使いますが,そういったユーザーアプリケーショ
ンは,典型的には,特定の範囲の機能だけを提供するので,「シェル」に分類するのは
適当ではありません。(本質をぼかしていいのなら,厳密になります。)
Emacsもユーザーアプリケーションですが,それは,Lispというインタプリタ型言語を通
じて,カーネルの機能をアクセス可能な状態にしてくれます。このため,現代的なシェ
ルと同じ機能をEmacsに持たせるのに,ほとんど障碍はありません。Emacsは,システム
を変化させるよう,あらかじめ決められていない方法で,カーネルを操作することもで
きます。欠けているのは,シェルに関する言語的なモデルだけなのです。
Eshellを開いてください。Eshellは,典型的なシステムシェルと同じ方法でシェルを実
行するために,「シェルによく似た」構文を,Lispに翻訳します。しかしながら,ここ
に基本的なちがいがあります。それは最初は微妙なものに見えるかもしれませんが...。
cshやBourne shellのようなシェルは,何十年も前のもっと制約の厳しかった時代に書か
れたものです。この制約されたものの見方は,以来,ほとんどすべてのコマンドライン
シェルが採用するパラダイムに見られます。それらは,概念上,直線的であり,バイト
ストリームにもとづき,連続的で,その移動可能範囲を一つのホストマシンに制約して
います。
これに対して,Emacsは,サブプロセスを立ち上げたり,ファイルハンドルをリダイレク
トしたりすることができる単なる限定的なトランスレーター以上のものです。Emacsは,
文字バッファや,ウィンドウフレーム,ネットワーク接続,レジスタ,ブックマーク,
およびプロセスの管理もします。いいかえると,Emacsは,非常に多面的な環境であり,
Eshellはその中で,高度に直線的な方法でエミュレートするのです。
しばらくのあいだ,このような広範な環境で開発されるシェルの将来に,その環境がど
ういう影響を与えるか考えてみましょう。
ディレクトリの移動が直線的で,単一のファイルシステムに制限されなければならない
理由はありません。w3やange-ftpを通じて,Emacsは,ウェブ全体にアクセスすることが
できます。たとえば,ユーザーが複数のディレクトリに同時にcdできるというのはどう
でしょうか。たとえば,非常に長いパス名によって分けられたファイルのdiffをとるこ
とのように,このことによって,簡単になるタスクがあるかもしれません。データは,
Emacsが情報を読み込めるところなら,どこからでも読み込むことができます。たんに,
ファイルや他のプロセスの出力に限定されるわけではありません。複数のシェルを立ち
上げたとき,同じ環境を共有することができます。同じプロセスリストすら共有できま
す! 一つのバッファで標準出力を見ながら,別のバッファで標準エラーを見,また別の
バッファでは,正規表現を通じてgrepされた標準出力の結果を見るといった「プロセス
ビュー」を持つことも可能でしょう。すべての入出力履歴,環境変数,ディレクトリス
タックなどを失ってまで,シェルを「閉じる」必要はありません。Emacsでは,あなたの
Eshell環境の内容を保存できますし,そのすべてを(少なくとも可能であるかぎりは)シェ
ルを立ち上げるたびに,復元することが可能でしょう。これは,複雑な初期化スクリプ
トなしで,自動的に処理することができるはずです。タイプミスはいつでも起こります。
その多くは,dirのかわりにdriを打ってしまうというように,同じまちがいを繰り返す
ものです。ユーザーが存在しないプログラムを実行しようすることは稀なので,eshell
が代わりの文字列を提示したり,既知のミススペルをデータベースに記録したりもでき
るでしょう。(注:このパラグラフのはじめにあったタイプミスは,私がそれを書いてか
ら二ヶ月も発見されませんでした。それは意図的なものではありません。) Emacsのレジ
スタとブックマーク機能は,どのディレクトリにいたか,どういう出力があったかを記
録するために使うことができますし,それがどれくらい保持されるかを変更することも
できます。おそらく,それらは,eshellが実行されているあいだの特定の「瞬間」にセッ
トすることすら可能でしょう。その瞬間の環境や,そのほかの変数を保持することも可
能なはずです。このためには,Emacs自身のブックマーク機能とは,独立した機能が必要
ですが,使用されるインターフェイスの操作性は非常に似たものにできます。以上は,
より多機能なEmacs shellが提供できることの簡単なアイデアです。それは,たんに,ど
ういう風に使用されるかを決めるシェルの仕様であるだけでなく,デザインの基礎とな
る考え方でもあります。その考え方は,一番小さな特徴の背後にすら感じられるでしょ
う。上位環境としてEmacsを使うことで得られる自由度に関して,ほかの方の豊かなアイ
デアを希望します。ほかの人のアイデアによって,私が今までしてきたことが,いわば,
人のペースに合わせて走るよう,馬を縛ることであったかのように感じられることはま
ちがいありません。
Eshellの作者は,長いあいだ,次のシェルを使ってきました。これらすべてがEshellの
デザインに役立っています。
- rc
- bash
- zsh
- sh
- 4nt
- csh
Jump to Line
Something went wrong with that request. Please try again.