В Emacs я могу запустить оболочку, используя следующие команды:
M-x term
M-x shell
M-x eshell
В чем разница между этими тремя?
shell
самый старый из этих 3 вариантов. Он использует Emacs comint-mode
для запуска подоболочки (например bash
). В этом режиме вы используете Emacs для редактирования командной строки. Подпроцесс не видит ввод, пока вы не нажмете Enter. Emacs действует как тупой терминал. Он поддерживает цветовые коды, но не такие вещи, как перемещение курсора, поэтому вы не можете запускать приложения, основанные на curses.
term
эмулятор терминала, написанный на Emacs Lisp В этом режиме нажимаемые клавиши отправляются непосредственно в подпроцесс; вы используете любые возможности редактирования строк, которые предоставляет оболочка, а не Emacs. Он также позволяет запускать программы, которые используют расширенные возможности терминала, такие как перемещение курсора (например, вы можете запускать nano
или less
внутри Emacs).
eshell
это оболочка, реализованная непосредственно в Emacs Lisp Вы не используете bash
какую-либо другую оболочку как подпроцесс. В результате синтаксис не совсем совпадает с bash
или sh
. Это позволяет такие вещи, как перенаправление вывода процесса непосредственно в буфер Emacs (try echo hello >#<buffer results>
).
Согласно странице Xahlee :
shell
является стандартным интерфейсом emacs для интерфейса командной строки операционной системы.
term
(ansi-term довольно похож на термин сегодня. Это были разные пакеты, но теперь оба определены в term.el) - эмулятор терминала. Он ведет себя как специальное терминальное приложение, такое как {xterm, gnome-terminal, puTTY}. Он совместим с большим количеством приложений оболочки, чем интерфейс оболочки emacs, но стандартные ключи emacs, такие как движущийся курсор, здесь не работают (потому что он эмулирует терминал).
eshell
это оболочка, написанная полностью на emacs lisp Примечание: это не эмулятор bash. Eshell сам по себе является оболочкой, но похож на bash или другие оболочки.
Что вы должны использовать?
Это зависит от ваших предпочтений.
shell
подходит для общего использования классических / стандартных команд оболочки Unix, таких как {grep, du, ls, sort, cat, head, tail, uname,…}.
term & ansi-term
хороши, если вы хотите запускать такие вещи, как ssh или другой интерактивный интерфейс командной строки (например, оболочка {python, ruby, lisp}), или текстовое приложение с графическим интерфейсом, такое как {vim, synaptic,…}.
eshell
особенно хорошо в Microsoft Windows, где bash не установлен, или, если вы являетесь программистом emacs lisp, потому что eshell имеет прямой доступ к emacs lisp.
eshell
будет иметь их тоже, если у вас установлены эти программы.which grep
в eshll говорит, что «eshell / grep - это» скомпилированная функция Lisp в `em- unix.el ', потому что grep в вашей системе может быть выполнен в eshell, как я уже говорил, eshell очень полезен в MS, где не установлено множество небольших инструментов, таких как grep.