Emacsでは、次のコマンドを使用してシェルを実行できます-
M-x term
M-x shell
M-x eshell
これら3つの違いは何ですか?
Emacsでは、次のコマンドを使用してシェルを実行できます-
M-x term
M-x shell
M-x eshell
これら3つの違いは何ですか?
回答:
shell
これら3つの選択肢の中で最も古いものです。Emacsを使用しcomint-mode
てサブシェルを実行します(例bash
)。このモードでは、Emacsを使用してコマンドラインを編集しています。Enterキーを押すまで、サブプロセスには入力が表示されません。Emacsはダム端末のように動作しています。カラーコードはサポートしていますが、カーソルを移動するようなものはサポートしていないため、cursesベースのアプリケーションを実行できません。
term
Emacs Lispで書かれたターミナルエミュレーターです。このモードでは、押したキーはサブプロセスに直接送信されます。Emacsではなく、シェルが提供する行編集機能を使用しています。また、カーソル移動などの高度な端末機能を使用するプログラムを実行することもできます(たとえば、実行中nano
またはless
Emacs内で実行できます)。
eshell
Emacs Lispに直接実装されたシェルです。bash
サブプロセスとして実行している、または他のシェルはありません。その結果、構文はbash
or とまったく同じではありませんsh
。プロセスの出力を直接Emacsバッファーにリダイレクトする(try echo hello >#<buffer results>
)などのことができます。
Xahleeページによると:
shell
オペレーティングシステムのコマンドラインインターフェイスへの標準emacsインターフェイスです。
term
(ansi-termは今日のtermとほぼ同じです。異なるパッケージでしたが、現在は両方ともterm.elで定義されています)はターミナルエミュレータです。{xterm、gnome-terminal、puTTY}などの専用端末アプリのように動作します。emacsシェルインターフェイスよりも多くのシェルアプリと互換性がありますが、カーソルの移動などの標準のemacsキーはここでは機能しません(端末をエミュレートしているため)。
eshell
完全にemacs lispで書かれたシェルです。注:bashエミュレーターではありません。Eshellはそれ自体がシェルですが、bashまたは他のシェルに似ています。
どちらを使うべきですか?
それはあなたの好みに依存します。
shell
{grep、du、ls、sort、cat、head、tail、uname、…}などのクラシック/標準のUNIXシェルコマンドの一般的な使用に適しています。
term & ansi-term
sshや他のコマンドラインインタラクティブインターフェイス({python、ruby、lisp}シェルなど)や{vim、synaptic、…}などのテキストベースのGUIアプリを実行する場合に適しています。
eshell
特に、bashがインストールされていないMicrosoft Windowsで、または、eshellがemacs lispに直接アクセスするため、emacs lispプログラマーである場合に適しています。
which grep
eshllに`EM-でコンパイルされたLisp関数「ESHELL / grepのです」と言いますunix.el 'は、システム内のgrepをeshellで実行できるため、eshellはgrepなどの小さなツールがインストールされていないMSで非常に便利だと言ったように。
eshell
これらのプログラムがインストールされている場合も、それらがあります。