Introduction to Emacs Shell
source link: http://www.howardism.org/Technical/Emacs/eshell.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Introduction to Emacs Shell
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
about it.
After you’ve started Emacs, just hit M-x
and type eshell
and 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-p
/C-n
move the cursor up instead of replaying the history. Use the up and down arrow keys orM-p
/M-n
to get the history.- Hit
C-c
twice in order to break out things. - The
!!
history works just as you expect. - Typing the name of an executable runs it, and colors are accepted, so
typing
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
cat
, typefind-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 zsh
.
No Aliases!?
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 .emacs
file 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) (find-file file)) (defun eshell/ee (file) (find-file-other-window 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 equals sign, as in:
alias ll 'ls -l $*'
Note: Unlike a normal shell alias, the arguments aren’t automatically
appended, so you need to place the $*
appropriately.
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.
Want to dive in a bit deeper?
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK