While starting up a new job, I've been pretty pre-occupied and have
neglected my weekly learning more about the tools I use everyday.
However, I was this morning, I was re-impressed with how well Emacs'
eshell-mode works with Zshell, and thought I'd explain a bit more
After you've started Emacs, just hit
M-x and type
you'll start up what appears like a shell process in an Emacs
buffer. Most of the keystrokes you expect from a shell and from Emacs
are available, with a few exceptions:
C-n move the cursor up instead of replaying the
history. Use the up and down arrow keys or
M-n to get
C-c twice in order to break out things.
!! history works just as you expect.
Typing the name of an executable runs it, and colors are accepted,
ls works as you expect.
If the command you type isn't a program available to the shell, it
assumes that it is an Emacs command, so instead of typing
find-file to load the file up in an Emacs buffer.
Tab completion is done by Eshell, and isn't as powerful as Zshell.
Does anyone know how we can call Zshell for that feature? Seems
like a difficult problem.
Keep in mind that it isn't an actual Z shell. Type
echo $0 to prove
that nothing is actually running. Eshell just looks like a
shell. When you type in a command, it then spawns off your current
shell for execution, like
Since Eshell doesn't have an actual shell executable hanging around,
it is a bit more efficient, however, this is why your hot cool Zshell
prompt doesn't display, nor are your aliases available.
I know, I know. I have a lot of functions and aliases that I depend
on, however, you can add something like the following to
to get back some of what you've lost:
(defalias 'e 'find-file)
However, this becomes a global command, not just what is available in
Eshell. To localize it, use this instead:
(defun eshell/e (file)
(defun eshell/ee (file)
Definitely create a
eshell/emacs command just in case you make a mistake.
More on Aliases
You can have more traditional aliases if you drop the
alias ll 'ls -l $*'
Note: Unlike a normal shell alias, the arguments aren't automatically
appended, so you need to place the
The aliases that you define in this way are automatically
saved. Restart Emacs and an Eshell, and type
alias and you'll see
all your aliases.
Tell others about this article: