6

Introduction to Emacs Shell

 3 years ago
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.
neoserver,ios ssh client

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 or M-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, type 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 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?


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK