在 Emacs 中,我可以使用以下命令运行 shell -
M-x term
M-x shell
M-x eshell
Run Code Online (Sandbox Code Playgroud)
这三者有什么区别?
cjm*_*cjm 75
shell是这 3 个选择中最古老的。它使用 Emacscomint-mode来运行子 shell(例如bash)。在这种模式下,您使用 Emacs 来编辑命令行。在您按 Enter 之前,子流程看不到任何输入。Emacs 就像一个哑终端。它确实支持颜色代码,但不支持移动光标之类的功能,因此您无法运行基于curses 的应用程序。
term是一个用 Emacs Lisp 编写的终端模拟器。在这种模式下,你按下的键会直接发送到子进程;您正在使用 shell 提供的任何行编辑功能,而不是 Emacs。它还允许您运行使用高级终端功能的程序,例如光标移动(例如,您可以运行nano或less在 Emacs 中运行)。
eshell是一个直接在 Emacs Lisp 中实现的 shell。您没有bash作为子进程运行或任何其他 shell。因此,语法与bashor不太相同sh。它允许将进程的输出直接重定向到 Emacs 缓冲区( try echo hello >#<buffer results>)。
Cod*_*han 21
根据Xahlee 页面:
shell 是操作系统命令行界面的标准 emacs 界面。
term(ansi-term 与今天的 term 几乎相同。它们是不同的包,但现在都在 term.el 中定义)是一个终端模拟器。它的行为就像一个专用的终端应用程序,例如 {xterm, gnome-terminal, puTTY}。与 emacs shell 界面相比,它与更多 shell 应用程序兼容,但是标准的 emacs 键(例如移动光标)在此处不起作用(因为它正在模拟终端。)
eshell是一个完全用 emacs lisp 编写的 shell。注意:它不是 bash 模拟器。Eshell 本身就是一个 shell,但类似于 bash 或其他 shell。
你应该使用哪个?
这取决于您的偏好。
shell 适用于经典/标准 unix shell 命令的一般使用,例如 {grep, du, ls, sort, cat, head, tail, uname, ...}。
term ? ansi-term 如果您想运行诸如 ssh 或其他命令行交互界面(例如 {python、ruby、lisp} shell)或基于文本的 GUI 应用程序(例如 {vim、synaptic、...})之类的东西,这是很好的。
eshell 尤其是在没有安装 bash 的 Microsoft Windows 上,或者,如果您是 emacs lisp 程序员,因为 eshell 可以直接访问 emacs lisp。
| 归档时间: |
|
| 查看次数: |
22652 次 |
| 最近记录: |