Colorado State University

Basic Emacs Editor Commands

What is Emacs?

Emacs is another editor available in UNIX. Like vi, emacs is a screen editor. Unlike vi, emacs is not an insertion mode editor, meaning that any character typed in emacs is automatically inserted into the file, unless it includes a command prefix.

Commands in emacs are either control characters (hold down the <Ctrl> key while typing another character) or are prefixed by one of a set of reserved characters: <Esc> or <Ctrl>-X. The <Esc> key can be typed by itself (because it really is a character) and then followed by another character; the <Ctrl> key must be held down while the next character is being typed. The conventions for describing these characters (since it takes too long to type out the whole thing) are ESC means <Esc> and C- means <Ctrl>.

One other distinction between emacs and vi is that emacs allows you to edit several files at once. The window for emacs can be divided into several windows, each of which contains a view into a buffer. Each buffer typically corresponds to a different file. Many of the commands listed below are for reading files into new buffers and moving between buffers.

To use emacs on a file, type
        emacs filename
If the file named filename exists, then the first screen's worth of the file is displayed; if it doesn't exist, a help message is displayed.

The easiest way to learn emacs is to start it up and go through the on-line tutorial. To access the on-line tutorial, type
        ESC help-with-tutorial
immediately after you have started emacs. The tutorial directs you further in learning the basic commands. One notational point you should know is that the tutorial uses M- to mean ESC.

To give you a head start, the following table lists the basic commands you need to know to use emacs to edit a file. An asterisk (* or star) to the left of a command indicate it is one to learn immediately.

Help Commands

* C-h help-command: first character in lots of useful help commands
* C-h t help-with-tutorial: command to run the tutorial
  C-h i information: describes most of the emacs commands in man style pages
  C-h k describe-key: tells you what a particular key stroke does
* C-h a command-apropos: prompts for a string and
  then searches for all emacs commands that contains that string
  ESC ? also does command-apropos
* C-h ? help-for-help: describes how to use the help facilities

File Reading and Writing Commands

* C-x C-f find-file: first prompts for a filename and
  then loads that file into a editor buffer of the same name
* C-x C-s save-buffer: saves the buffer into the associated filename
  C-x C-w write-named-file: prompts for a new filename and writes the buffer into it

Cursor/Screen Movement Commands

Depending on the terminal, some of the cursor movement can be handled by the arrow keys.

* C-a move cursor to (at) beginning-of-line
  C-e move cursor to end-of-line
* C-f move cursor forward one character
* C-b move cursor backward one character
* C-n move cursor to next line
* C-p move cursor to previous line
  C-v scroll file forward by one screenful
  ESC v scroll file backward by one screenful
* ESC < go to beginning-of-buffer
* ESC > go to end-of-buffer
  ESC f move cursor forward one word
  ESC b move cursor backward one word

Copy and Delete Commands

  C-d delete-char: delete character under cursor
  ESC d delete-word: delete from cursor to end of word immediately ahead of the cursor
* C-k kill-line: delete the rest of the current line
* C-@ set-mark-command: mark is used to indicate the beginning of an area of text to be yanked
* C-w kill-region: delete the area of text between the mark and the current cursor position
* C-y yank: insert at current cursor location whatever was most recently deleted
  ESC w copy-region-as-kill: copy area between mark and cursor into kill-buffer
  so that it can be yanked into someplace else

Search Commands

* C-s isearch-forward: prompts for text string and
  then searches from the current cursor position forwards in the buffer
  C-r isearch-backward: like isearch-forward,
  but searches from the current cursor position to end of buffer for text string
  ESC % query-replace: prompts for a search string and
  a string with which to replace the search string

Window and Buffer Commands

  C-x 0 zero-window: deletes current window
  C-x 2 double-window: splits current window into two parts,
  allowing you to edit at two different locations in the same file
  or permitting you to view two different files at the same time
  C-x b switch-to-buffer: display a different buffer on the screen
  C-x o other-window: move the cursor to the other window
  (assuming that you have two windows/buffers open at once
* C-x C-b list-buffers: lists those buffers currently loaded into emacs

Exiting Emacs, Fixing Mistakes and Other Important Stuff

* C-x C-c save-buffers-kill-emacs: when you are finished editing,
  to save the edited but unsaved buffers
  and to return you to the UNIX prompt
* C-g keyboard-quit: if while typing a command you make a mistake and want to stop,
  this aborts a command in progress
  C-u universal-argument: if you want to do a command several times,
  type this command
      followed by a number (for the number of times)
      followed by the command you wish repeated
* C-x u undo: undoes the last command typed, in case you made a mistake
* ESC x execute-extended-command: prompts for the name of an emacs command;
  allows you to execute a command
      if you know roughly what it is called
      but cannot remember the key strokes for it

Other Emacs Bindings

Emacs has many other useful commands. As you get more proficient at it, try listing the key bindings (ESC-x for describe-bindings) to find other commands. Also note that emacs has what is called escape-completion: as you type in commands or filenames, you can type a space at any time and emacs will either fill out the rest (if there is only one possible completion) or it will list the possible completions in a new window.

A Web page with a complete list of emacs bindings is also available.