shell emacs zsh eshell

Ventajas y desventajas entre zsh y emacs ''(e) shell



eshell (3)

actualmente me he cambiado a emacs (aquamacs) y estoy en el proceso de migrar todo mi flujo de trabajo en él paso a paso (org-mode, dired, etc., desde pathfinder, velocidad de notación, etc.).

la única cosa que aún tengo que probar (y parece ser el mayor obstáculo hasta ahora) es el shell incorporado de emacs (shell y / o eshell, aquí referido como "eshell"), debido a que tiene la configuración de zsh perfecta para yo. no está seguro si hay una manera de esencialmente duplicar / minimizar los pasos de conversión / adaptación requeridos .....

Mis preguntas:

  1. ¿Puede eshell ser tratado como un superconjunto de zsh (es decir, eshell puede hacer todo lo que puede hacer zsh, y más)? supongo que a eshell le falta un poco en comparación con las conchas estándar (bash, zsh, ksh, tcsh, etc.), de lo contrario sería una de las conchas estándar (corrígeme si me equivoco al pensarlo de esa manera).

  2. ¿Cuáles son las principales limitaciones en el uso de eshell sobre zsh? ¿Alguna gente cambia de zsh a eshell y siente que hay aspectos de zsh que se te pasan por alto críticamente ?

  3. Alguien sabe de enlaces / recursos haciendo una comparación de características zsh / eshell?

  4. Además, ¿hay algún recurso para hacer el cambio de un caparazón habitual a eshell? consejos sobre la migración del flujo de trabajo?

  5. Si eshell no es tan "potente" como zsh, ¿qué ventaja tiene eshell sobre zsh? ¿Alguna sugerencia y trucos sobre el uso de eshell dentro de emacs que ilustrarían el tiempo dedicado a aprenderlo?

  6. ¿Debería renunciar a eshell y continuar usando zsh si hace todo lo que creo que necesito? o son los pocos "flujos de trabajo de poder" que valen la pena (de los que no tengo conocimiento)?

thnx de antemano.


En cuanto a Mx eshell :

  1. Eshell no es un shell independiente; está implementado en elisp puro, por lo que no se puede ejecutar fuera de emacs, por lo que no es uno de los shells estándar. No tiene su propio lenguaje de scripting como bash / zsh / etc. tener; tiene elisp, y algunos comandos de interpretación para hacer que llamar a elisp sea un poco más limpio.

  2. No puedo hablar con zsh vs eshell, pero he cambiado principalmente de bash a eshell. 95% del tiempo, eshell hace todo lo que quiero o necesito sin ningún problema. No lo uso para ssh. Además, no puede crear un fondo de un proceso una vez que se ha iniciado (pero puede iniciarlo en segundo plano).

  3. Va a ser muy difícil, porque zsh tiene un lenguaje de scripting completo, mientras que eshell es básicamente una interfaz para el intérprete de elisp. ¿Qué estás buscando en un caparazón interactivo? Eshell probablemente pueda hacer la mayor parte. Declaraciones condicionales y bucles en la línea de comandos? Por supuesto. Alias, funciones, comodines, finalización programable? Por supuesto.

  4. La forma en que migré fue, básicamente, comenzar desde cero. Cada vez que me encontré con algo que no me gustó o deseé que lo hiciera, averiguaría cómo lograr que haga lo que quiero. Por ejemplo, eshell utiliza pcomplete.el para la finalización programable, por lo que agregar funciones de finalización es bastante fácil.

  5. La integración con emacs es la gran victoria para mí. Puede tener funciones elisp canalizadas a comandos de shell. Para un ejemplo tonto, intente:

    message "hello world" | cut -f 1 -d '' '' Algunos comandos (especialmente grep) se ponen en los búferes de emacs, por lo que puede pasar rápidamente a los resultados.

  6. Depende de cuánto tiempo realmente gastas en emacs. Si haces todo en emacs, es útil, porque a veces es más fácil conectar juntos comandos elisp con otros comandos a través de eshell. Si no te encuentras copiando y pegando entre emacs y tu caparazón con demasiada frecuencia, probablemente no sea una victoria, y tendrás que dedicarle tiempo para personalizarlo hasta el punto en que te sientas cómodo con él.

Como una alternativa a eshell, Mx shell ejecuta su shell normal debajo del cual interpreta todos los comandos (por lo que no tiene acceso a funciones elisp), mientras que la edición de línea de comandos (y por lo tanto, finalización programable, historial, etc.) la realiza emacs . Lo uso para ssh.

Otra alternativa es el Mx term , que es un emulador de terminal dentro de emacs, y generalmente ejecuta un shell debajo, y el shell hace todas sus funciones normales. Entonces no hay absolutamente ningún paso de conversión / adaptación requerido.


Sintaxis diferente

Dado que eshell permite mezclar código elisp con comandos de shell, tiene una sintaxis bastante inusual, de la que deberá tener cuidado.

Una cosa a tener en cuenta es la sintaxis para la expansión del comando: zsh usa la sintaxis

file $(which foo)

pero en eshell esto significa básicamente lo mismo que

file (which foo)

lo que significa ejecutar el comando de file en el resultado de evaluar la expresión elisp (which foo) , que normalmente da como resultado un error como este:

Symbol''s function definition is void: which

Resulta que la forma de escribir esto en eshell es en realidad

file ${which foo}

Portabilidad

Como eshell está escrito en un código Emacs Lisp de plataforma neutra, funciona esencialmente de la misma manera en Emacsen nativo de Windows que en * nix, directamente (aunque probablemente querrás coreutils y cosas por el estilo); hacer que shell-mode funcione con un shell * nix es presumiblemente al menos algo más complicado.

Creo que he visto algunas ganas con la realización de caminos absolutos, sin embargo, debido a los dos puntos después de la letra de la unidad, pero eso no es exactamente un show-stopper ...


Creo que todas sus 6 preguntas se pueden traducir a una sola pregunta: ¿se pueden hacer todas las cosas en zsh que se pueden hacer en Emacs ? La respuesta es y hay más. No diría shell, eshell u otro modo de Emacs, pero solo digo Emacs .

shell, eshell solo el modo de Emacs, si puedo encontrar una forma o modo al menos en el que pueda hacer cualquier cosa que zsh pueda hacer, entonces responde su pregunta. El camino es el modo ansi-term en Emacs, puede ejecutar zsh dentro de Emacs perfectamente, si no puedes hacer tu trabajo en shell o eshell puedes cambiar al modo ansi-term en Emacs, entonces tu pregunta se ha ido.

eshell acaba de eludir shell y esos no son buenos en los comandos interactivos / de desplazamiento como top , less , etc.