You are on page 1of 58

Being Productive With Emacs

Part 1

Phil Sung
sipb­iap­emacs@mit.edu
http://stuff.mit.edu/iap/emacs
Special thanks to Piaw Na and Arthur Gleckler
“Emacs is the extensible, customizable, 
self­documenting real­time display editor.”
The many faces of Emacs

Emacs edits source code
The many faces of Emacs

Emacs is a hex editor
M­x hexl­find­file
The many faces of Emacs

Emacs does diffs
M­x ediff­buffers
The many faces of Emacs

Emacs is a file manager
M­x dired
The many faces of Emacs

Emacs is a shell
M­x shell
The many faces of Emacs

Emacs is a mail/news client
M­x gnus
The many faces of Emacs

Emacs plays tetris
M­x tetris
Why Emacs?
 Provides an integrated environment

Same editing commands available everywhere

Large set of tools available at all times

Move text between tasks easily
Why Emacs?
 Easy to extend

Elisp for customizing or adding new features

Extension code has the full power of Emacs

Dynamic environment: no restarting or recompiling
 Portable
 Today's goal: get the flavor of Emacs

Getting started with Emacs

Editing tips Examples based on
GNU Emacs 22

Demos of useful features

Common Emacs concepts
 Later...

Advanced customization

Programming and extending Emacs with Elisp
Prerequisites (sort of)
 Emacs basic concepts Take the tutorial
to brush up:

Files, buffers, windows, frames
C­h t
 Keyboard commands

Key commands, prefix keys, M­x, the minibuffer

"C­x" means Ctrl+x
"M­x" means Meta+x or Alt+x
 Basic tasks

Opening and saving files, exiting Emacs
It's all about text manipulation
 Text in files

grocery lists, HTML, code, ...
 Text outside of files

shell, debugger, ...
 Text as a metaphor

dired, gnus, ...
Text as a metaphor: dired
M-x wdired-change-to-wdired-mode
after opening any directory

After editing names 
in this buffer, C­x 
C­s renames the 
modified files
Moving around in buffers
 By character or line

C­p

C­b C­f

C­n
Moving around in buffers
 Beginning, end of line  By screen

C­a, C­e ●
C­v, M­v
 By word  Beginning, end of 

M­f, M­b buffer

By sentence M­<, M­>


M­a, M­e
 Go to line #
● M­g g
Moving around in buffers
 Move multiple lines forward, backward

Example: C­u 10 C­p (back 10 lines)

C­u prefix generalizes to other commands
 Search for text

C­s, C­r
 Exchange point (cursor) and mark
● C­x C­x
Killing ("cutting") text
 Kill line
● C­k
 Kill many lines

C­u 10 C­k (10 lines)

C­u C­k (4 lines)

C­u C­u C­k (16 lines)
Killing ("cutting") text
 Kill region  Kill sentence
● C­w ● M­k
 Save without killing  Kill ("zap") to next 
● M­w occurrence of 
character
● M­z CHAR
Yanking ("pasting") text
 Yank
● C­y
 Yank earlier killed text

M­y (once or more after C­y)
 The kill ring

Almost all commands which delete text save it for 
possible later retrieval
The mark
 Remembers a previous cursor position

C­x C­x to swap point (cursor) and mark

 When you...  the mark is set to...
● C­spc ●
where you are

M­< or M­> ●
where you were

Search for text ●
where you started

Yank text ●
start of inserted text

Insert a buffer ●
start of inserted text
The mark
 The mark ring

Move to a previous mark: C­u C­SPC
 Mark and point are also used to delineate 'the 
region'

Many commands operate on the text in the region

Set region by setting mark, then moving point
Undo
 Undo previous actions

C­/ or C­_ or C­x u
 Undo within current region
● C­u C­/
The undo model, illustrated

A B C D
The undo model, illustrated

A B C D

These states are


accessible with 'undo'
The undo model, illustrated
Undo some of your actions...

This is how most editors other than emacs work:

A B C D

These states are These states are


accessible with 'undo' accessible with 'redo'
The undo model, illustrated
Now do something else...

This is how most editors other than emacs work:

A B C D

These states are no


These states are longer accessible!
accessible with 'undo' C'
The undo model, illustrated

How emacs handles this situation

A B C D

C'

The list of states is 'folded' so


that all previous actions,
including undos, are undoable
Incremental search
 Search for text (like Firefox's "find as you type")
● C­s text

C­s again to find next occurrence

RET to stop at found occurrence

C­g to cancel and go back to start of search

C­r for reverse search

Many options available inside search;
C­h k C­s to learn more
Search history
 Search for previously searched string
● C­s C­s
 Browse and edit previous queries

C­s then M­p, M­n
Incremental search
 Search for regular expressions
● C­M­s regexp

Regexp describes the form of what to look for

Syntax may be slightly different from other REs you 
may have used

Emacs REs are a superset of Perl REs

M­x re­builder can help you test complex 
regexps
Searching and replacing
 Search and replace, asking for confirmation

M­% or M­x query­replace
 Display all lines matching RE
● M­x occur
RE search and replacement
 M­x replace­regexp
 Replacement text can depend on found text!
 Replacement text gets these substitutions:

\& (the matched string)

\1, \2, etc. (references to parts of matched string)

\# (number of matched lines so far)

\? (prompt user for what to enter)
● \,(lisp­expression ...)
RE replacement example

Bill Gates
Steve Jobs
Eric Schmidt M­x replace­regexp
Larry Ellison \(\w+\) \(\w+\)
with
GATES, Bill \,(upcase \2), \1
JOBS, Steve
SCHMIDT, Eric
ELLISON, Larry

More tips at http://steve-yegge.blogspot.com/2006/06/shiny-and-new-emacs-22.html


Integration with useful tools
 Shell
● M­x shell
 Compile (invoke make)
● M­x compile
 Debug
● M­x gdb
Integration with useful tools
 Grep

M­x grep, M­x rgrep
 Man page reader
● M­x woman
 Invoke shell commands

M­x shell­command,
M­x shell­command­on­region
...and then some
 Calculator
● M­x calc
 Calendar
● M­x calendar
 Moon calendar
● M­x phases­of­moon
More helpful features
 TRAMP: open remote files over SSH
● C­x C­f /user@host:~/remote/file
 VC: automatically deal with CVS, SVN, etc.

M­x vc­next­action to commit modified file

M­x vc­diff to view changes to current file
 etags: name search/completion for source code
Emacs server
 Use a single Emacs session for all editing
 Do this once: M­x server­start

or put (server­start) in your .emacs file
 To edit a file:
● prompt% emacsclient file

File opens in existing Emacs frame

C­x # when done editing
Macros
 Remembers a fixed sequence of keys for later 
repetition
 Start recording macro: C­x (
 Stop recording macro: C­x )
 Replay macro: C­x e
Macro example
Define macro:
M­d C­d M­u , [SPC] 
C­y C­n C­a
"Remove first word and space,
Bill Gates uppercase next word, insert comma
and space afterward, reinsert first
Steve Jobs word, move to beginning of next line"
Eric Schmidt
Larry Ellison
Run macro repeatedly:
C­x e e ...
GATES, Bill
JOBS, Steve
SCHMIDT, Eric
ELLISON, Larry
Narrowing
 Restricts view/editing in a buffer to a certain 
region

C­x n n or M­x narrow­to­region to 
narrow to region

C­x n w or M­x widen to restore ('widen')
Registers
 Store current window configuration
● C­x r w REGISTER
REGISTER may be
any letter or number
 Restore window configuration
● C­x r j REGISTER
 Registers can also store positions, text, 
numbers, file names...
Prefix arguments
 Sometimes used to indicate repetition

C­u 10 C­f (forward 10 characters)

C­u C­o (make 4 new lines)
 Sometimes modify following command

C­/ (undo) vs. C­u C­/ (undo within region)

M­x shell vs. C­u M­x shell
 A command's documentation (C­h f or C­h k) 
describes the effect of the prefix argument, if any
Major modes
 Alters behavior, key bindings, and text display
 Switch mode in existing buffer:
● M­x java­mode
● M­x python­mode
● M­x fundamental­mode
 Or, use another command to create buffer:
● M­x shell
● M­x dired
Language major mode features
 Language­specific indentation, syntax coloring
 Language­specific features:

Lisp: commands for manipulating s­expressions

Python: commands for (un)indenting blocks

HTML: insert/close tags; preview in web browser

Modes can define or redefine keys
Minor modes
 Extra functionality you can turn on or off

Any number of minor modes may be active at once

Independent of major mode functionality
 M­x auto­fill­mode
 M­x flyspell­mode
 M­x follow­mode
Global minor modes
 Offer completions for buffers, commands, etc.
● M­x icomplete­mode
 Show all buffer names on C­x b:
● M­x iswitchb­mode
Minibuffer input
 Common features whenever Emacs prompts 
you to enter something

Most buffer editing, movement commands work

Browse previous inputs with M­n, M­p

Tab­completion is often available
 M­x eval­expression, M­x find­
file, M­x switch­to­buffer, ...
Getting help with Emacs
 Help with key  Help with mode
● C­h k ● C­h m
 Help with function  Show key bindings
● C­h f ● C­h b
 Help about help
● C­h C­h
Getting help with Emacs
 Apropos (search for command)
● C­h a
 Help with prefix key

C­h (after prefix key)
 Manuals

M­x info, then select emacs or efaq
“In the event of an emergency”
 Cancel command
● C­g
 Undo!

C­/ or C­_
 What did I just do?
● M­x view­lossage
Common problems
 Delete not deleting?
● M­x normal­erase­is­backspace­mode
 Keys with M­ not working?

Use ESC instead

ESC x instead of M­x

ESC C­t instead of C­M­t
Migrating to Emacs
 From Windows applications

M­x cua­mode: recovers C­z, C­x, C­c, C­v 
for their usual purposes
 From vi/vim
● M­x viper­mode
Resources
 Emacs on Athena

http://web.mit.edu/olh/Emacs/
 Emacs reference card

http://web.mit.edu/olh/Emacs/Refcard.pdf
Invoking or installing Emacs
 emacs21 on Athena: athena% emacs
 emacs22 on Ubuntu/Debian:
apt­get install emacs­snapshot­gtk
 emacs22 on Gentoo: emerge emacs­cvs
 emacs on Windows:
● http://ourcomments.org/Emacs/
                   EmacsW32Util.html
 Bonus: Being Unproductive With Emacs

M­x tetris, M­x hanoi, M­x doctor, ...
 Next time: Emacs lisp

Customizing how Emacs works

Writing new functions, commands, and modes

Manipulating text programmatically

Altering behavior of existing commands

You might also like