Подтвердить что ты не робот

Преимущества и недостатки между оболочкой 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 заранее.

4b9b3361

Ответ 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 и т.д.