Place the cursor on the word Diet and type dw: 9.1.4 Changing Text You can replace text using the R command, which overwrites the text beginning at the cursor.. For example, placing t
Trang 1Text that is deleted may be reinserted using the p command (for "put") Pressing p now will return the deleted line to the buffer after the current line Using P (uppercase) instead will insert the text before the current line By default, p and P insert text from the "undo buffer";
you can also yank and replace text from other buffers, as we'll see later
The u command undoes the latest change (in this case, pressing u after dd is equivalent to p)
If you inserted a large amount of text using the i command, pressing u immediately after
returning to command mode would undo it
To delete the word beneath the cursor, use the dw command Place the cursor on the word
Diet and type dw:
9.1.4 Changing Text
You can replace text using the R command, which overwrites the text beginning at the cursor
Place the cursor on the first letter in pizza, press R, and type:
The r command replaces the single character under the cursor r does not place you in insert
mode per se, so there is no reason to use Escape to return to command mode
The ~ command changes the case of the letter under the cursor from upper- to lowercase, and
vice versa If you place the cursor on the o in Now in the previous example, and repeatedly
press ~, you end up with the following:
Another useful command for changing words is the cw command, which lets you simply type
in the new word and — after pressing Escape — removes anything that might be left over from the original word If the new text is longer than the one being changed, the space is automatically expanded as needed
Trang 29.1.5 Moving Commands
You already know how to use the arrow keys to move around the document In addition, the w
command moves the cursor to the beginning of the next word, and b moves it to the beginning
of the current word The 0 (that's a zero) command moves the cursor to the beginning of the current line, and the $ command moves it to the end of the line
When editing large files, you'll want to move forward or backward through the file one screen
at a time Pressing Ctrl-F moves the cursor one screen forward, and Ctrl-B moves it one screen backward
In order to move the cursor to the end of the file, type G You can also move to an arbitrary line: the command 10G would move the cursor to line 10 in the file To move to the beginning of the file, use 1G
Typing / followed by a pattern and the Enter key causes you to jump to the first occurrence of that pattern in the text following the cursor For example, placing the cursor on the first line of text in our example and typing /burg moves the cursor to the beginning of the word
"burgers." Using ? instead of / searches backward through the file
The pattern following a / or ? command is actually a regular expression Regular expressions
are a powerful way to specify patterns for search and replace operations and are used by many Unix utilities You can find more information about regular expressions in the upcoming section, Section 9.2.9 Using regular expressions, you could, for example, search for the next uppercase letter, using the command:
9.1.6 Saving Files and Quitting vi
Most of the commands dealing with files within vi are invoked from ex mode You enter ex
mode when you press the : key from command mode This places the cursor on the last line of the display, allowing you to enter various extended commands
For example, to write the file being edited, use the command :w Typing : causes you to
enter ex mode, and typing w followed by the Enter key completes the command The command :wq writes the file and exits vi (The command ZZ — from command mode, without the ":" — is similar to :wq, but checks first if the file has been changed, and writes it only in this case.)
Trang 3To quit vi without saving changes to the file, use the command :q! Using :q alone will quit
vi, but only if modifications to the file have been saved The ! in :q! means to quit vi — and
that you really mean it
9.1.7 Editing Another File
To edit another file, use the :e command For example, to stop editing test, and edit the file foo instead, use the command shown at the bottom of the following box:
If you use :e without writing the file first, you'll get the error message:
No write since last change (:edit! overrides)
At this point, you can use :w to save the original file, and then use :e, or you can use the command :e! foo, which tells vi to edit the new file without saving changes to the original
This can be useful if you edit a file and realize that you have screwed up You can then use the :e! command; if you don't specify a filename, vi discards the changes and re-edits the
current file
9.1.8 Including Other Files
If you use the :r command, you can include the contents of another file in the vi buffer For
example, the command:
:r foo.txt
inserts the contents of the file foo.txt after the current line
9.1.9 Running Shell Commands
The :! command allows you to enter the name of a command, which is executed within vi
For example, the command:
:!ls -F
executes the ls command and displays the results on your screen
The :r! command is similar to :!, but includes the standard output of the command in the buffer The command:
:r!ls -F
produces the following:
Trang 4If you need to execute a series of shell commands, it's often easier to use the suspend key
(usually Ctrl-Z), provided you're using a shell that supports job control, such as tcsh or bash
9.1.10 Global Searching and Replacing
There are many more features of vi than are documented here; most of these features are
implemented through combinations of the simple features we've seen Here are one or two
other tidbits most vi users find useful
The command:
:[x,y]s/pattern/replacement/flags
searches for pattern between lines x and y in the buffer, and replaces instances of
pattern with the replacement text pattern is a regular expression; replacement is literal text but can contain several special characters to refer to elements in the original
pattern The following command replaces the first occurrence of weeble with wobble on lines 1 through 10, inclusive:
:1,10s/weeble/wobble
Instead of giving line-number specification, you can use the % symbol to refer to the entire file Other special symbols can be used in place of x and y $ refers to the last line of the file Leave x or y blank to refer to the current line
Among the flags you can use are g to replace all instances of pattern on each line, and c to ask for confirmation for each replacement In most instances, you will want to use the g flag, unless you want to replace only the first occurrence of pattern on each line
You can also use marks to refer to lines Marks are just single-letter names that are given to
cursor locations within the document Moving the cursor to a location in the file and typing
ma will set the mark a at that point (Marks may be named any of the letters a-z or A-Z.) You can move the cursor directly to the mark a with the command `a (with a backquote) Using a regular single quote (as in 'a) will move the cursor to the beginning of the line that the mark a
is on
Marks allow you to "remember" cursor locations that denote a region of text For example, if you want to search and replace a block of text, you can move the cursor to the beginning of the text, set a mark, move the cursor to the end of the text, and use the command:
:'a,.s/weeble/wobble/
Trang 59.1.11 Moving Text and Using Registers
One way to copy and move text is to delete it (using the d or dd commands) and then replace
it with the P command, as described earlier For example, if you want to delete 10 lines, starting with the line that contains your cursor, and paste them somewhere else, just use the command 10dd (to delete 10 lines), move the cursor to the new location for the text, and type
p You can copy text in this way as well: typing 10dd followed by P (at the same cursor location) deletes the text and immediately replaces it You can then paste the text elsewhere
by moving the cursor and using p multiple times
Similar to dd is the yy command, which "yanks" text without deleting it You use p to paste the yanked text as with dd But note that each yank operation will delete the previously yanked text from the "clipboard."
The deletion and yank commands can be used on more general regions than lines Recall that the d command deletes text through a move command; for example, d$ deletes text from the cursor to the end of the line Similarly, y$ yanks text from the cursor to the end of the line Let's say you want to yank (or delete) a region of text This can be done with marks as well Move the cursor to the beginning of the text to be yanked and set a mark, as in ma Move the cursor to the end of the text to be yanked and use the command y'a This yanks text from the cursor position to the mark a (Remember that the command 'a moves the cursor to the mark
a.) Using d instead of y deletes the text from the cursor to the mark
The most convenient way to cut, copy, and paste portions of text within vi is to use registers
A register is just a named temporary storage space for text you wish to copy between locations, cut and paste within the document, and so forth
Registers are given single letter names; any of the characters a-z or A-Z are valid The "
command (a quotation mark) specifies a register; it is followed by the name of the register, as
in "a for register a The lowercase letters and their uppercase counterparts refer to the same registers: using the lowercase letter overwrites the previous contents of the register and using the uppercase letter appends to it
For instance, if we move the cursor to the first line in our example:
and use the command "ayy, the current line is yanked into the register a We can then move the cursor to the second line, and use the command "ap to paste the text from register a after the current line:
Trang 6Similarly, the command "ay'a yanks text from the cursor to mark a into register a Note that there is no correspondence between mark and register names!
Using registers allows you to copy text between files Just copy the text to a register, use the
:e command to edit a new file, and paste the text from the register
9.1.12 Extending vi
vi is extensible in many ways Most of the commands we've introduced can be generalized to
arbitrary regions of text As we've already seen, commands such as d and y operate on the text from the cursor to a move operation, such as $ or G (dG deletes text from the cursor to the end of the file.) Many other commands operate on text through a move command in the same way Using marks you can operate on any region of text
As we mentioned before, vi is just a text editor; it doesn't have facilities for spell checking text, compiling programs, and other such features However, vi executes other programs that
you can use to extend the editor The command:
:x,y!command
executes the named command with the text on lines x through y as standard input, and replaces the lines with the standard output of the command As with the s (search and replace) command, other specifications, such as % and $, can be used for the line numbers
For example, let's say you want to prepend a quote character (>) to all the lines in a region of text One way to do this is to write a short shell or Perl script (see Section 1.5.4) that reads
lines of input and outputs those same lines with the quote character prepended (Or use a sed
command; there are many alternatives.) You can then send lines of text through this filter,
which replaces them with the quoted text within vi If the script is called quote, just use a
command, such as:
:`a,.!quote
which quotes the region of text between the cursor location and the mark a
Be familiar with the various ex commands that are available The :set command allows you
to set various options; for example, :set ai turns on auto indentation of text (:set noai
turns it off.)
You can specify ex commands (such as :set) to execute when starting up vi in the file exrc
in your home directory (The name of this file can be changed with the EXINIT environment
Trang 7set ai
to turn on autoindentation You don't need the : before ex commands in this file
A number of good tutorials and references for vi are available — both online as well as in print Learning the vi Editor is a good place to look for more information If you have Internet access, the comp.editors archives for vi contain a number of reference and tutorial documents,
as well as interesting vi hacks ftp://alf.uib.no:/pub/vi is the archive home site; it is mirrored at cs.uwp.edu and elsewhere The home of vim on the Web is http://www.vim.org
9.2 The Emacs Editor
Text editors are among the most important applications in the Unix world They are used so often that many people spend more time within an editor than anywhere else on their Unix system The same holds true for Linux
The choice of an editor can be a religious one Many editors exist, but the Unix community
has arranged itself into two major groups: the Emacs camp and the vi camp Because of vi's
somewhat nonintuitive user interface, many people (newcomers and seasoned users alike)
prefer Emacs over vi However, long-time users of vi (and single-finger typists) use it more
efficiently than a more complex editor such as Emacs
If vi is one end of the text-editor spectrum, Emacs is the other; they are widely different in
their design and philosophy Emacs is partly the brainchild of Richard Stallman, founder of the Free Software Foundation and author of much of the GNU software
Emacs is a very large system with more features than any single Unix application to date (some people would even go so far as not to call it an editor but an "integrated environment")
It contains its own LISP language engine that you can use to write extensions for the editor (Many of the functions within Emacs are written in Emacs LISP.) Emacs includes extensions for everything from compiling and debugging programs to reading and sending electronic mail to X Window System support and more Emacs also includes its own online tutorial and
documentation The book Learning GNU Emacs by Debra Cameron, Bill Rosenblatt, and Eric
Raymond (O'Reilly) is a popular guide to the editor
Most Linux distributions include two variants of Emacs GNU Emacs is the original version, which is still being developed, but development seems to have slowed down XEmacs is larger, but much more user-friendly and better integrated with the X Window System (even though you can also use it from the command line, despite its name) If you are not tight on memory and have a reasonably fast computer, we suggest using XEmacs Another advantage
of XEmacs is that many useful packages that you would need to download and install separately with GNU Emacs are already shipped with XEmacs We will not cover the differences here, though; the discussion in this section applies to both Whenever we talk
about Emacs in this section, we mean either version
9.2.1 Firing It Up
GNU Emacs is simply invoked as:
$ emacs options
Trang 8Likewise, XEmacs is invoked as:
file; let's call the file wibble.txt We now see the following:
The mode line at the bottom indicates the name of the file as well as the type of buffer you're
in (which here is Fundamental) Emacs supports many kinds of editing modes;
Fundamental is the default for plain-text files, but other modes exist for editing C and TEX source, modifying directories, and so on Each mode has certain key bindings and commands associated with it, as we'll see soon Emacs typically determines the mode of the buffer based
on the filename extension
To the right of the buffer type is the word All, which means that you are currently looking at the entire file (which is empty) Typically, you will see a percentage, which represents how far into the file you are
If you're running Emacs under the X Window System, a new window will be created for the editor with a menu bar at the top, scrollbars, and other goodies In Section 11.6.2 in Chapter
11, we discuss Emacs's special features when used within X
9.2.2 Simple Editing Commands
Emacs is more straightforward than vi when it comes to basic text editing The arrow keys
should move the cursor around the buffer; if they don't (in case Emacs is not configured for your terminal), use the keys C-p (previous line), C-n (next line), C-f (forward character), and C-b (backward character)
Trang 9If you find using the Alt key uncomfortable, press Escape and then p Pressing and releasing Escape is equivalent to holding down Alt
Already we must take the first aside on our tour of Emacs Literally every command and key within Emacs is customizable That is, with a "default" Emacs configuration, C-p maps to the
internal function previous-line, which moves the cursor (also called "point") to the previous
line However, you can easily rebind different keys to these functions, or write new functions and bind keys to them, and so forth Unless otherwise stated, the keys we introduce here work for the default Emacs configuration Later we'll show you how to customize the keys for your own use
Back to editing: using the arrow keys or one of the equivalents moves the cursor around the current buffer Just start typing text, and it is inserted at the current cursor location Pressing the Backspace or Delete key should delete text at the cursor If it doesn't, we'll show how to fix it in Section 9.2.8 later in this chapter Now begin to type:
The keys C-a and C-e move the cursor to the beginning and end of the current line, respectively C-v moves forward a page; M-v moves back a page There are many more basic editing commands, but we'll allow the Emacs online documentation (discussed shortly) to fill those in
In order to get out of Emacs, use the command C-x C-c This is the first of the extended commands we've seen; many Emacs commands require several keys C-x alone is a "prefix"
to other keys In this case, pressing C-x followed by C-c quits Emacs, first asking for confirmation if you want to quit without saving changes to the buffer
You can use C-xC-s to save the current file, and C-xC-f to "find" another file to edit For example, typing C-xC-f presents you with a prompt, such as:
Find file: /home/loomer/mdw/
where the current directory is displayed After this, type the name of the file to find Pressing
the Tab key will do filename completion similar to that used in bash and tcsh For example,
entering:
Find file: /home/loomer/mdw/.bash
and pressing Tab opens another buffer, showing all possible completions, as so:
Trang 10After you complete the filename, the *Completions* buffer goes away and the new file is displayed for editing This is one example of how Emacs uses temporary buffers to present information
Emacs allows you to use multiple buffers when editing text; each buffer may contain a different file you're editing When you load a file with C-x C-f, a new buffer is created to edit the file, but the original buffer isn't deleted
You can switch to another buffer using the C-xb command, which asks you for the name of the buffer (usually the name of the file within the buffer) For example, pressing C-x b
presents the prompt:
Switch to buffer: (default wibble.txt)
The default buffer is the previous one visited Press Enter to switch to the default buffer, or type another buffer name Using C-xC-b will present a buffer list (in a buffer of its own), as so:
Popping up the buffer menu splits the Emacs screen into two "windows," which you can switch between using C-x o More than two concurrent windows are possible as well In order to view just one window at a time, switch to the appropriate one and press C-x1 This hides all the other windows, but you can switch to them later using the C-xb command just described Using C-xk actually deletes a buffer from Emacs's memory
Trang 119.2.3 Tutorial and Online Help
Already Emacs looks a bit complex; that is simply because it's such a flexible system Before
we go any further, it is instructive to introduce Emacs's built-in online help and tutorial This
documentation has also been published in book form as the GNU Emacs Manual, by Richard
M Stallman (GNU Press)
Using the C-h command gives you a list of help options on the last line of the display Pressing C-h again describes what they are In particular, C-h followed by t drops you into the Emacs tutorial It should be self-explanatory, and an interactive tutorial about Emacs tells you more about the system than we can hope to cover here
After going through the Emacs tutorial you should get accustomed to the Info system, where the rest of the Emacs documentation resides C-h followed by i enters the Info reader A mythical Info page might look like this:
File: intercal.info, Node: Top, Next: Instructions, Up: (dir)
This file documents the Intercal interpreter for Linux
* Menu:
* Instructions:: How to read this manual
* Overview:: Preliminary information
* Examples:: Example Intercal programs and bugs
* Concept Index:: Index of concepts
As you see, text is presented along with a menu to other "nodes." Pressing m and then entering
a node name from the menu will allow you to read that node You can read nodes sequentially
by pressing the spacebar, which jumps to the next node in the document (indicated by the information line at the top of the buffer) Here, the next node is Instructions, which is the first node in the menu
Each node also has a link to the parent node (Up), which here is (dir), meaning the Info page directory Pressing u takes you to the parent node In addition, each node has a link to the previous node, if it exists (in this case, it does not) The p command moves to the previous node The l command returns you to the node most recently visited
Within the Info reader, pressing ? gives you a list of commands and pressing h presents you with a short tutorial on using the system Since you're running Info within Emacs, you can use Emacs commands as well (such as C-x b to switch to another buffer)
If you think that the Info system is arcane and obsolete, please keep in my mind that it was designed to work on all kinds of systems, including those lacking graphics or powerful processing capabilities
Other online help is available within Emacs Pressing C-h C-h gives you a list of help options One of these is C-h k, after which you press a key, and documentation about the function that is bound to that key appears
Trang 129.2.4 Deleting, Copying, and Moving Text
There are various ways to move and duplicate blocks of text within Emacs These methods
involve use of the mark, which is simply a "remembered" cursor location you can set using various commands The block of text between the current cursor location (point) and the mark
is called the region
You can set the mark using the key C-@ (or C-Space on most systems) Moving the cursor
to a location and pressing C-@ sets the mark at that position You can now move the cursor to another location within the document, and the region is defined as the text between mark and point
Many Emacs commands operate on the region The most important of these commands deal with deleting and yanking text The command C-w deletes the current region and saves it in
the kill ring The kill ring is a list of text blocks that have been deleted You can then paste (yank) the text at another location, using the C-y command (Note that the semantics of the
term yank differ between vi and Emacs In vi, "yanking" text is equivalent to adding it to the
undo register without deleting it, while in Emacs, "yank" means to paste text.) Using the kill ring, you can paste not only the most recently deleted block of text, but also blocks of text that were deleted previously
For example, type the following text into an Emacs buffer:
Now, move the cursor to the beginning of the second line ("Here is a line "), and set the mark with C-@ Move to the end of the line (with C-e), and delete the region using C-w The buffer should now look like the following:
Trang 13In order to yank the text just deleted, move the cursor to the end of the buffer and press C-y The line should be pasted at the new location:
Pressing C-y repeatedly will insert the text multiple times
You can copy text in a similar fashion Using M-w instead of C-w will copy the region into the kill ring without deleting it (Remember that M- means holding down the Alt key or pressing Escape before the w.)
Text that is deleted using other kill commands, such as C-k, is also added to the kill ring This means that you don't need to set the mark and use C-w to move a block of text; any command that deletes more than one character will do
In order to recover previously deleted blocks of text (which are saved on the kill ring), use the command M-y after yanking with C-y M-y replaces the yanked text with the previous block from the kill ring Pressing M-y repeatedly cycles through the contents of the kill ring This feature is useful if you wish to move or copy multiple blocks of text
Emacs also provides a more general register mechanism, similar to that found in vi Among
other things, you can use this feature to save text you want to paste in later A register has a one-character name; let's use a for this example:
1 At the beginning of the text you want to save, set the mark by pressing the Control key and spacebar together (or if that doesn't work, press C-@)
2 Move point (the cursor) to the end of the region you want to save
3 Press C-x x followed by the name of the register (a in this case)
4 When you want to paste the text somewhere, press C-x g followed by the name of the register, a
9.2.5 Searching and Replacing
The most common way to search for a string within Emacs is to press C-s This starts what is
called an incremental search You then start entering the characters you are looking for Each
time you press a character, Emacs searches forward for a string matching everything you've typed so far If you make a mistake, just press the Delete key and continue typing the right characters If the string cannot be found, Emacs beeps If you find an occurrence but you want
to keep searching for another one, press C-s again
Trang 14You can also search backward this way using the C-r key Several other types of searches exist, including a regular expression search that you can invoke by pressing M-C-s This lets you search for something like jo.*n, which matches names like John, Joan, and Johann (By default, searches are not case-sensitive.)
To replace a string, enter M-% You are prompted for the string that is currently in the buffer, and then the one with which you want to replace it Emacs displays each place in the buffer where the string is and asks you if you want to replace this occurrence Press the spacebar to replace the string, the Delete key to skip this string, or a period to stop the search
If you know you want to replace all occurrences of a string that follow your current place in the buffer, without being queried for each one, enter M-x replace-string (The M-x key allows you to enter the name of an Emacs function and execute it, without use of a key binding Many Emacs functions are available only via M-x, unless you bind them to keys yourself.) A regular expression can be replaced by entering M-xreplace-regexp
9.2.6 Macros
The name Emacs comes partly from the word "macros." A macro is a simple but powerful feature that makes Emacs a pleasure to use If you plan on doing anything frequently and repetitively, just press C-x (, perform the operation once, and then press C-x ) The two
C-x commands with the opening and closing parentheses remember all the keys you pressed Then you can execute the commands over and over again by pressing C-x e
Here's a example you can try on any text file; it capitalizes the first word of each line
1 Press C-x ( to begin the macro
2 Press C-a to put point at the beginning of the current line It's important to know where you are each time a macro executes By pressing C-a you are making sure the macro will always go to the beginning of the line, which is where you want to be
3 Press M-c to make the first letter of the first word a capital letter
4 Press C-a again to return to the beginning of the line and C-n or the down arrow to go
to the beginning of the following line This ensures that the macro will start execution
at the right place next time
5 Press C-x ) to end the macro
6 Press C-x e repeatedly to capitalize the following lines Or press C-u several times, followed by C-x e The repeated uses of C-u are prefix keys, causing the following command to execute many times If you get to the end of the document while the macro is still executing, no harm is done; Emacs just beeps and stops executing the macro
9.2.7 Running Commands and Programming within Emacs
Emacs provides interfaces for many programs, which you can run within an Emacs buffer For example, Emacs modes exist for reading and sending electronic mail, reading Usenet news, compiling programs, and interacting with the shell In this section, we'll introduce some
of these features
Trang 15To send electronic mail from within Emacs, press C-x m This opens up a buffer that allows you to compose and send an email message:
Simply enter your message within this buffer and use C-c C-s to send it You can also insert text from other buffers, extend the interface with your own Emacs LISP functions, and so on Furthermore, an Emacs mode called RMAIL lets you read your electronic mail right within Emacs, but we won't discuss it here because most people prefer standalone mailers (Usually, these mailers let you choose Emacs as your editor for email messages.)
Similar to the RMAIL mail interface is GNUS, the Emacs-based newsreader, which you can start with the M-x gnus command After startup (and a bit of chewing on your newsrc file),
a list of newsgroups will be presented, along with a count of unread articles for each:
GNUS is an example of the power of using Emacs interfaces to other tools You get all the convenience of Emacs's navigation, search, and macro capabilities, along with specific key sequences appropriate for the tool you're using
Using the arrow keys, you can select a newsgroup to read Press the spacebar to begin reading articles from that group Two buffers will be displayed, one containing a list of articles and the other displaying the current article
Using n and p move to the next and previous articles, respectively Then use f and F to post a follow-up to the current article (either including or excluding the current article), and r and R
to reply to the article via electronic mail There are many other GNUS commands; use C-h m
to get a list of them If you're used to a newsreader, such as rn, GNUS will be somewhat
familiar
Emacs provides a number of modes for editing various types of files For example, there is C mode for editing C source code, and TEX mode for editing (surprise) TEX source Each mode boasts features that make editing the appropriate type of file easier
Trang 16For example, within C mode, you can use the command M-x compile, which, by default,
runs make -k in the current directory and redirects errors to another buffer For example, the
compilation buffer may contain:
cd /home/loomer/mdw/pgmseq/
make -k
gcc -O -O2 -I -I /include -c stream_load.c -o stream_load.o
stream_load.c:217: syntax error before `struct'
stream_load.c:217: parse error before `struct'
You can move the cursor to a line containing an error message and press C-c C-c to make the cursor jump to that line in the corresponding source buffer Emacs opens a buffer for the appropriate source file if one does not already exist Now you can edit and compile programs entirely within Emacs
Emacs also provides a complete interface to the gdb debugger, which is described in Section
14.1.6.3 in Chapter 14
Usually, Emacs selects the appropriate mode for the buffer based on the filename extension
For example, editing a file with the extension c in the filename automatically selects C mode
for that buffer
Shell mode is one of the most popular Emacs extensions Shell mode allows you to interact with the shell in an Emacs buffer, using the command M-x shell You can edit, cut, and paste command lines with standard Emacs commands You can also run single shell commands from Emacs using M-! If you use M-| instead, the contents of the current region are piped to the given shell command as standard input This is a general interface for running subprograms from within Emacs
The Emacs personal customization file is emacs, which should reside in your home directory
This file should contain code, written in Emacs LISP, which runs or defines functions to customize your Emacs environment (If you've never written LISP before, don't worry; most customizations using it are quite simple.)
One of the most common things users customize are key bindings For instance, if you use Emacs to edit SGML documents, you can bind the key C-c s to switch to SGML mode Put
this in your emacs file:
; C-c followed by s will put buffer into SGML mode."
(global-set-key "\C-cs" 'sgml-mode)
Comments in Emacs LISP start with a semicolon The command that follows runs the
command global-set-key Now you don't have to type in the long sequence
Trang 17Emacs — no matter what mode your buffer is in — because it is global (Of course, Emacs may also recognize an SGML or XML file by its suffix and put it in SGML mode for you automatically.)
A customization that you might want to use is making the text mode the default mode and turning on the "auto-fill" minor mode (which makes text automatically wrap if it is too long for one line) like this:
; Make text mode the default, with auto-fill
(setq default-major-mode 'text-mode)
(add-hook 'text-mode-hook 'turn-on-auto-fill)
You don't always want your key mappings to be global As you use TEX mode, C mode, and other modes defined by Emacs, you'll find useful things you'd like to do only in a single mode Here, we define a simple LISP function to insert some characters into C code, and then bind the function to a key for our convenience:
We start the function by declaring it "interactive" so that we can invoke it (otherwise, it would
be used only internally by other functions) Then we use the insert function to put the
following characters into our C buffer:
Our whole goal was to make it easy to insert these characters, so now let's bind our function
to a key:
(define-key c-mode-map "\C-ci" 'start-if-block)
The define-key function binds a key to a function By specifying c-mode-map, we indicate that the key works only in C mode There is also a tex-mode-map for mode, a lisp-mode-map that you will want to know about if you play with your emacs file a lot
If you'd like to write your own Emacs LISP functions, you should read the Info pages for
elisp, which should be available on your system Two good books on writing Emacs LISP functions are An Introduction to Programming in Emacs Lisp, by Robert J Chassell (GNU Press) and Writing GNU Emacs Extensions, by Bob Glickstein (O'Reilly)