Преимущества и недостатки между оболочкой zsh и emacs (e)
В настоящее время я переключился на emacs (aquamacs), и я в процессе миграции всего своего рабочего процесса в него шаг за шагом (org-mode, dired и т.д., от pathfinder, скорость записи и т.д.).
Единственное, что мне еще предстоит попробовать (и, кажется, это самое большое препятствие) - встроенная оболочка emacs (оболочка и/или eshell, здесь называемая "eshell" ), из-за наличия zsh для меня идеально подходит. неуверенный, если есть способ существенно зеркально отобразить/свести к минимуму необходимые шаги преобразования/адаптации.....
мои вопросы:
-
может быть рассмотрен как супермножество zsh (т.е. eshell может делать все, что может zsh, плюс больше)? я полагаю, что у eshell недостает немного по сравнению со стандартными оболочками (bash, zsh, ksh, tcsh и т.д.), в противном случае это была бы одна из стандартных оболочек (исправьте меня, если я ошибаюсь, чтобы об этом думать).
-
Каковы ограничения main при использовании eshell над zsh? любые люди переключаются с zsh на eshell и чувствуют, что есть аспекты zsh, которые вы критически пропустите?
-
Кто-нибудь знает какие-либо ссылки/ресурсы, выполняющие сравнение функций zsh/eshell?
-
далее, какие-либо ресурсы для внесения изменений из одной обычной оболочки в eshell? советы по миграции рабочего процесса?
-
Если eshell не является "мощным", как zsh, то какое преимущество имеет eshell над zsh? любые советы и рекомендации по использованию eshell в emacs, которые иллюстрируют время, потраченное на изучение этого?
-
нужно ли просто отказаться от eshell и продолжать использовать zsh, если он делает все, что мне кажется нужным? или это несколько "силовых рабочих процессов", которые стоят того (о которых я не знаю)?
thnx заранее.
Ответы
Ответ 1
Относительно M-x eshell
:
-
Eshell не является отдельной оболочкой; он реализован в чистом elisp, поэтому не может быть запущен за пределами emacs, поэтому он не является одной из стандартных оболочек. У него нет собственного языка сценариев, например bash/zsh/etc. иметь; у него есть elisp и некоторые команды для интерпретации команд, чтобы сделать вызов elisp немного чище.
-
Я не могу говорить с zsh vs eshell, но я в основном переключился с bash на eshell. 95% времени, eshell делает все, что я хочу или нуждаюсь без проблем. Я не использую его для ssh. Кроме того, вы не можете выполнить фоновый процесс после его запуска (но вы можете запустить его в фоновом режиме).
-
Это будет очень сложно, потому что zsh имеет полный язык сценариев, в то время как eshell - это в основном интерфейс к elisp-интерпретатору. Что вы ищете в интерактивной оболочке? Эшелл, вероятно, может сделать большую часть этого. Условные операторы и циклы в командной строке? Конечно. Псевдонимы, функции, подстановочные знаки, программируемое завершение? Конечно.
-
То, как я мигрировал, состояло в том, чтобы начать с нуля. Каждый раз, когда я сталкивался с чем-то, что мне не нравилось, или я хотел, чтобы это произошло, я понял, как заставить его делать то, что я хочу. Например, eshell использует pcomplete.el для программируемого завершения, поэтому добавление функций завершения довольно просто.
-
Интеграция с emacs - большая победа для меня. Вы можете использовать elisp-функции для команд оболочки. Для глупых примеров попробуйте:
message "hello world" | cut -f 1 -d ' '
Некоторые команды (особенно grep) получают помещать в буферы emacs, так, например, вы можете быстро перейти к результатам.
-
Зависит от того, сколько времени вы действительно потратили на emacs. Если вы делаете все в emacs, это полезно, потому что иногда проще объединить команды elisp с другими командами через eshell. Если вы не слишком часто копируете и вставляете между emacs и вашей оболочкой, это, вероятно, не будет победой, и вам придется тратить время на настройку до того уровня, в котором вам будет удобно.
Как альтернатива eshell, M-x shell
запускает вашу обычную оболочку под ней, которая интерпретирует все команды (поэтому не имеет доступа к elisp-функциям), в то время как редактирование командной строки (и, следовательно, программируемое завершение, история и т.д.), выполняется emacs. Я использую его для ssh.
Другой альтернативой является M-x term
, который является эмулятором терминала внутри emacs и обычно запускает оболочку под ней, а оболочка выполняет все свои обычные действия. Тогда не требуется никаких шагов преобразования/адаптации.
Ответ 2
Синтаксис
Так как eshell
позволяет смешивать код elisp
с командами оболочки, у него есть довольно необычный синтаксис, который вам нужно соблюдать.
Остерегайтесь синтаксиса расширения команды: zsh
использует синтаксис
file $(which foo)
но в eshell
это означает, что это то же самое, что и
file (which foo)
что означает запуск команды file
в результате оценки выражения elisp (which foo)
, что обычно приводит к ошибке, подобной этой:
Symbol function definition is void: which
Оказывается, способ написать это в eshell на самом деле
file ${which foo}
Портативность
Так как eshell
написан в нейтральном платформе Emacs Lisp, он работает, по сути, таким же образом в Windows-native Emacsen, как и на * nix, прямо из коробки (хотя, конечно, вы будете вероятно, хочет coreutils
и тому подобное); получение shell-mode
для работы с оболочкой * nix, возможно, по крайней мере несколько сложнее.
Я думаю, что я видел некоторое недоумение с завершением абсолютных путей, хотя из-за двоеточия после буквы диска, но это не совсем шоу-стоппер...
Ответ 3
Я думаю, что все ваши 6 вопросов можно перевести только на один вопрос:
Все может быть сделано в zsh, что можно сделать в Emacs?
Ответ ДА, и есть больше. Я бы не сказал shell, eshell или другой режим Emacs, но я просто говорю Emacs.
shell, eshell только режим Emacs, если я могу найти способ или режим, по крайней мере, в котором можно делать все, что может сделать zsh, поэтому он отвечает на ваш вопрос. Способом является режим ansi-term
в Emacs, он может отлично запускать zsh внутри Emacs, если вы не можете выполнять свою работу в оболочке или в eshell, вы можете переключиться в режим ansi-term
в Emacs, так что ваш вопрос пропал.
eshell
только что исчезли shell
, и это не очень удобно для интерактивных/прокручивающих команд, таких как top
, less
и т.д.