next up previous contents
Next: What's Really Going Up: Editing files with Previous: CuttingPasting, Killing

Searching and Replacing

There are several ways to search for text in Emacs. Many of them are rather complex, and not worth going into here. The easiest and most entertaining way is to use isearch  . ``Isearch'' stands for ``incremental search''. Suppose you want to search for the string ``gadfly'' in the following buffer:

I was growing afraid that we would run out of gasoline, when my passenger exclaimed ``Gadzooks! There's a gadfly in here!''.

You would move to the beginning of the buffer, or at least to some point that you know is before the first occurrence of the goal word, ``gadfly'', and type C-s. That puts you in isearch mode. Now start typing the word you are searching for, ``gadfly''. But as soon as you type the ``g'', you see that Emacs has jumped you to the first occurrence of ``g'' in the buffer. If the above quote is the entire contents of the buffer, then that would be the first ``g'' of the word ``growing''. Now type the ``a'' of ``gadfly'', and Emacs leaps over to ``gasoline'', which contains the first occurrence of a ``ga''. The ``d'' gets you to gadzooks, and finally, ``f'' gets you to ``gadfly'', without your having had to type the entire word.

What you are doing in an isearch is defining a string to search for. Each time you add a character to the end of the string, the number of matches is reduced, until eventually you have entered enough to define the string uniquely. Once you have found the match you are looking for, you can exit the search with [Return] or any of the normal movement commands. If you think the string you're looking for is behind you in the buffer, then you should use C-r, which does an isearch backwards.

If you encounter a match, but it's not the one you were looking for, then hit C-s again while still in the search. This will move you forward to the next complete match, each time you hit it. If there is no next match, it will say that the search failed, but if you press C-s again at that point, the search will wrap around from the beginning of the buffer. The reverse holds true for C-r --- it wraps around the end of the buffer.

Try bringing up a buffer of plain English text and doing an isearch for the string `` the''. First you'd type in as much as you wanted, then use repeated C-s's to go to all instances of it. Notice that it will match words like `` them'' as well, since that also contains the substring `` the''. To search only for `` the'', you'd have to do add a space to the end of your search string. You can add new characters to the string at any point in the search, even after you've hit C-s repeatedly to find the next matches. You can also use [Backspace] or [Delete] to remove characters from the search string at any point in the search, and hitting [Return] exits the search, leaving you at the last match.

Emacs also allows you to replace all instances of a string with some new string---this is known as query-replace. To invoke it, type query-replace and hit [Return]. Completion is done on the command name, so once you have typed ``query-re'', you can just hit [Tab] to finish it. Say you wish to replace all instances of ``gadfly'' with ``housefly''. At the `` Query replace: '' prompt, type ``gadfly'', and hit [Return]. Then you will be prompted again, and you should enter ``housefly''. Emacs will then step through the buffer, stopping at every instance of the word ``gadfly'', and asking if you want to replace it. Just hit `` y'' or `` n'' at each instance, for ``Yes'' or ``No'', until it finishes. If this doesn't make sense as you read it, then try it out.  



next up previous contents
Next: What's Really Going Up: Editing files with Previous: CuttingPasting, Killing



Ross Biro
Thu May 25 10:45:54 PDT 1995