|
|
1.1 ! root 1: This is Info file ../info/emacs, produced by Makeinfo-1.49 from the ! 2: input file emacs.texi. ! 3: ! 4: This file documents the GNU Emacs editor. ! 5: ! 6: Copyright (C) 1985, 1986, 1988, 1992 Richard M. Stallman. ! 7: ! 8: Permission is granted to make and distribute verbatim copies of this ! 9: manual provided the copyright notice and this permission notice are ! 10: preserved on all copies. ! 11: ! 12: Permission is granted to copy and distribute modified versions of ! 13: this manual under the conditions for verbatim copying, provided also ! 14: that the sections entitled "The GNU Manifesto", "Distribution" and "GNU ! 15: General Public License" are included exactly as in the original, and ! 16: provided that the entire resulting derived work is distributed under the ! 17: terms of a permission notice identical to this one. ! 18: ! 19: Permission is granted to copy and distribute translations of this ! 20: manual into another language, under the above conditions for modified ! 21: versions, except that the sections entitled "The GNU Manifesto", ! 22: "Distribution" and "GNU General Public License" may be included in a ! 23: translation approved by the author instead of in the original English. ! 24: ! 25: ! 26: File: emacs, Node: Horizontal Scrolling, Prev: Scrolling, Up: Display ! 27: ! 28: Horizontal Scrolling ! 29: ==================== ! 30: ! 31: `C-x <' ! 32: Scroll text in current window to the left (`scroll-left'). ! 33: ! 34: `C-x >' ! 35: Scroll to the right (`scroll-right'). ! 36: ! 37: The text in a window can also be scrolled horizontally. This means ! 38: that each line of text is shifted sideways in the window, and one or ! 39: more characters at the beginning of each line are not displayed at all. ! 40: When a window has been scrolled horizontally in this way, text lines ! 41: are truncated rather than continued (*note Continuation Lines::.), with ! 42: a `$' appearing in the first column when there is text truncated to the ! 43: left, and in the last column when there is text truncated to the right. ! 44: ! 45: The command `C-x <' (`scroll-left') scrolls the selected window to ! 46: the left by N columns with argument N. With no argument, it scrolls by ! 47: almost the full width of the window (two columns less, to be precise). ! 48: `C-x >' (`scroll-right') scrolls similarly to the right. The window ! 49: cannot be scrolled any farther to the right once it is displaying ! 50: normally (with each line starting at the window's left margin); ! 51: attempting to do so has no effect. ! 52: ! 53: ! 54: File: emacs, Node: Selective Display, Next: Display Vars, Prev: Display, Up: Display ! 55: ! 56: Selective Display ! 57: ================= ! 58: ! 59: Emacs has the ability to hide lines indented more than a certain ! 60: number of columns (you specify how many columns). You can use this to ! 61: get an overview of a part of a program. ! 62: ! 63: To hide lines, type `C-x $' (`set-selective-display') with a numeric ! 64: argument N. (*Note Arguments::, for how to give the argument.) Then ! 65: lines with at least N columns of indentation disappear from the screen. ! 66: The only indication of their presence is that three dots (`...') ! 67: appear at the end of each visible line that is followed by one or more ! 68: invisible ones. ! 69: ! 70: The invisible lines are still present in the buffer, and most editing ! 71: commands see them as usual, so it is very easy to put point in the ! 72: middle of invisible text. When this happens, the cursor appears at the ! 73: end of the previous line, after the three dots. If point is at the end ! 74: of the visible line, before the newline that ends it, the cursor ! 75: appears before the three dots. ! 76: ! 77: The commands `C-n' and `C-p' move across the invisible lines as if ! 78: they were not there. ! 79: ! 80: To make everything visible again, type `C-x $' with no argument. ! 81: ! 82: ! 83: File: emacs, Node: Display Vars, Prev: Selective Display, Up: Display ! 84: ! 85: Variables Controlling Display ! 86: ============================= ! 87: ! 88: This section contains information for customization only. Beginning ! 89: users should skip it. ! 90: ! 91: The variable `mode-line-inverse-video' controls whether the mode ! 92: line is displayed in inverse video (assuming the terminal supports it); ! 93: `nil' means don't do so. *Note Mode Line::. ! 94: ! 95: If the variable `inverse-video' is non-`nil', Emacs attempts to ! 96: invert all the lines of the display from what they normally are. ! 97: ! 98: If the variable `visible-bell' is non-`nil', Emacs attempts to make ! 99: the whole screen blink when it would normally make an audible bell ! 100: sound. This variable has no effect if your terminal does not have a way ! 101: to make the screen blink. ! 102: ! 103: When you reenter Emacs after suspending, Emacs normally clears the ! 104: screen and redraws the entire display. On some terminals with more ! 105: than one page of memory, it is possible to arrange the termcap entry so ! 106: that the `ti' and `te' strings (output to the terminal when Emacs is ! 107: entered and exited, respectively) switch between pages of memory so as ! 108: to use one page for Emacs and another page for other output. Then you ! 109: might want to set the variable `no-redraw-on-reenter' non-`nil' so that ! 110: Emacs will assume, when resumed, that the screen page it is using still ! 111: contains what Emacs last wrote there. ! 112: ! 113: The variable `echo-keystrokes' controls the echoing of ! 114: multi-character keys; its value is the number of seconds of pause ! 115: required to cause echoing to start, or zero meaning don't echo at all. ! 116: *Note Echo Area::. ! 117: ! 118: If the variable `ctl-arrow' is `nil', control characters in the ! 119: buffer are displayed with octal escape sequences, all except newline and ! 120: tab. Altering the value of `ctl-arrow' makes it local to the current ! 121: buffer; until that time, the default value is in effect. The default is ! 122: initially `t'. *Note Locals::. ! 123: ! 124: Normally, a tab character in the buffer is displayed as whitespace ! 125: which extends to the next display tab stop position, and display tab ! 126: stops come at intervals equal to eight spaces. The number of spaces ! 127: per tab is controlled by the variable `tab-width', which is made local ! 128: by changing it, just like `ctl-arrow'. Note that how the tab character ! 129: in the buffer is displayed has nothing to do with the definition of TAB ! 130: as a command. ! 131: ! 132: If you set the variable `selective-display-ellipses' to `nil', the ! 133: three dots do not appear at the end of a line that precedes invisible ! 134: lines. Then there is no visible indication of the invisible lines. ! 135: This variable too becomes local automatically when set. ! 136: ! 137: ! 138: File: emacs, Node: Search, Next: Fixit, Prev: Display, Up: Top ! 139: ! 140: Searching and Replacement ! 141: ************************* ! 142: ! 143: Like other editors, Emacs has commands for searching for occurrences ! 144: of a string. The principal search command is unusual in that it is ! 145: "incremental"; it begins to search before you have finished typing the ! 146: search string. There are also nonincremental search commands more like ! 147: those of other editors. ! 148: ! 149: Besides the usual `replace-string' command that finds all ! 150: occurrences of one string and replaces them with another, Emacs has a ! 151: fancy replacement command called `query-replace' which asks ! 152: interactively which occurrences to replace. ! 153: ! 154: * Menu: ! 155: ! 156: * Incremental Search:: Search happens as you type the string. ! 157: * Nonincremental Search:: Specify entire string and then search. ! 158: * Word Search:: Search for sequence of words. ! 159: * Regexp Search:: Search for match for a regexp. ! 160: * Regexps:: Syntax of regular expressions. ! 161: * Search Case:: To ignore case while searching, or not. ! 162: * Replace:: Search, and replace some or all matches. ! 163: * Other Repeating Search:: Operating on all matches for some regexp. ! 164: ! 165: ! 166: File: emacs, Node: Incremental Search, Next: Nonincremental Search, Prev: Search, Up: Search ! 167: ! 168: Incremental Search ! 169: ================== ! 170: ! 171: An incremental search begins searching as soon as you type the first ! 172: character of the search string. As you type in the search string, Emacs ! 173: shows you where the string (as you have typed it so far) would be found. ! 174: When you have typed enough characters to identify the place you want, ! 175: you can stop. Depending on what you will do next, you may or may not ! 176: need to terminate the search explicitly with an ESC first. ! 177: ! 178: `C-s' ! 179: Incremental search forward (`isearch-forward'). ! 180: ! 181: `C-r' ! 182: Incremental search backward (`isearch-backward'). ! 183: ! 184: `C-s' starts an incremental search. `C-s' reads characters from the ! 185: keyboard and positions the cursor at the first occurrence of the ! 186: characters that you have typed. If you type `C-s' and then `F', the ! 187: cursor moves right after the first `F'. Type an `O', and see the ! 188: cursor move to after the first `FO'. After another `O', the cursor is ! 189: after the first `FOO' after the place where you started the search. ! 190: Meanwhile, the search string `FOO' has been echoed in the echo area. ! 191: ! 192: The echo area display ends with three dots when actual searching is ! 193: going on. When search is waiting for more input, the three dots are ! 194: removed. (On slow terminals, the three dots are not displayed.) ! 195: ! 196: If you make a mistake in typing the search string, you can erase ! 197: characters with DEL. Each DEL cancels the last character of search ! 198: string. This does not happen until Emacs is ready to read another ! 199: input character; first it must either find, or fail to find, the ! 200: character you want to erase. If you do not want to wait for this to ! 201: happen, use `C-g' as described below. ! 202: ! 203: When you are satisfied with the place you have reached, you can type ! 204: ESC, which stops searching, leaving the cursor where the search brought ! 205: it. Also, any command not specially meaningful in searches stops the ! 206: searching and is then executed. Thus, typing `C-a' would exit the ! 207: search and then move to the beginning of the line. ESC is necessary ! 208: only if the next command you want to type is a printing character, DEL, ! 209: ESC, or another control character that is special within searches ! 210: (`C-q', `C-w', `C-r', `C-s' or `C-y'). ! 211: ! 212: Sometimes you search for `FOO' and find it, but not the one you ! 213: expected to find. There was a second `FOO' that you forgot about, ! 214: before the one you were looking for. In this event, type another `C-s' ! 215: to move to the next occurrence of the search string. This can be done ! 216: any number of times. If you overshoot, you can cancel some `C-s' ! 217: characters with DEL. ! 218: ! 219: After you exit a search, you can search for the same string again by ! 220: typing just `C-s C-s': the first `C-s' is the key that invokes ! 221: incremental search, and the second `C-s' means "search again". ! 222: ! 223: If your string is not found at all, the echo area says `Failing ! 224: I-Search'. The cursor is after the place where Emacs found as much of ! 225: your string as it could. Thus, if you search for `FOOT', and there is ! 226: no `FOOT', you might see the cursor after the `FOO' in `FOOL'. At this ! 227: point there are several things you can do. If your string was ! 228: mistyped, you can rub some of it out and correct it. If you like the ! 229: place you have found, you can type ESC or some other Emacs command to ! 230: "accept what the search offered". Or you can type `C-g', which removes ! 231: from the search string the characters that could not be found (the `T' ! 232: in `FOOT'), leaving those that were found (the `FOO' in `FOOT'). A ! 233: second `C-g' at that point cancels the search entirely, returning point ! 234: to where it was when the search started. ! 235: ! 236: If a search is failing and you ask to repeat it by typing another ! 237: `C-s', it starts again from the beginning of the buffer. Repeating a ! 238: failing reverse search with `C-r' starts again from the end. This is ! 239: called "wrapping around". `Wrapped' appears in the search prompt once ! 240: this has happened. ! 241: ! 242: The `C-g' "quit" character does special things during searches; just ! 243: what it does depends on the status of the search. If the search has ! 244: found what you specified and is waiting for input, `C-g' cancels the ! 245: entire search. The cursor moves back to where you started the search. ! 246: If `C-g' is typed when there are characters in the search string that ! 247: have not been found--because Emacs is still searching for them, or ! 248: because it has failed to find them--then the search string characters ! 249: which have not been found are discarded from the search string. With ! 250: them gone, the search is now successful and waiting for more input, so ! 251: a second `C-g' will cancel the entire search. ! 252: ! 253: To search for a control character such as `C-s' or DEL or ESC, you ! 254: must quote it by typing `C-q' first. This function of `C-q' is ! 255: analogous to its meaning as an Emacs command: it causes the following ! 256: character to be treated the way a graphic character would normally be ! 257: treated in the same context. You can also specify a quoted character ! 258: in octal while searching, just as you can for insertion. *Note Basic::. ! 259: ! 260: You can change to searching backwards with `C-r'. If a search fails ! 261: because the place you started was too late in the file, you should do ! 262: this. Repeated `C-r' keeps looking for more occurrences backwards. A ! 263: `C-s' starts going forwards again. `C-r' in a search can be cancelled ! 264: with DEL. ! 265: ! 266: If you know initially that you want to search backwards, you can use ! 267: `C-r' instead of `C-s' to start the search, because `C-r' is also a key ! 268: running a command (`isearch-backward') to search backward. ! 269: ! 270: The characters `C-y' and `C-w' can be used in incremental search to ! 271: grab text from the buffer into the search string. This makes it ! 272: convenient to search for another occurrence of text at point. `C-w' ! 273: copies the word after point as part of the search string, advancing ! 274: point over that word. Another `C-s' to repeat the search will then ! 275: search for a string including that word. `C-y' is similar to `C-w' but ! 276: copies all the rest of the current line into the search string. ! 277: ! 278: All the characters special in incremental search can be changed by ! 279: setting the following variables: ! 280: ! 281: `search-delete-char' ! 282: Character to delete from incremental search string (normally DEL). ! 283: ! 284: `search-exit-char' ! 285: Character to exit incremental search (normally ESC). ! 286: ! 287: `search-quote-char' ! 288: Character to quote special characters for incremental search ! 289: (normally `C-q'). ! 290: ! 291: `search-repeat-char' ! 292: Character to repeat incremental search forwards (normally `C-s'). ! 293: ! 294: `search-reverse-char' ! 295: Character to repeat incremental search backwards (normally `C-r'). ! 296: ! 297: `search-yank-line-char' ! 298: Character to pull rest of line from buffer into search string ! 299: (normally `C-y'). ! 300: ! 301: `search-yank-word-char' ! 302: Character to pull next word from buffer into search string ! 303: (normally `C-w'). ! 304: ! 305: Slow Terminal Incremental Search ! 306: -------------------------------- ! 307: ! 308: Incremental search on a slow terminal uses a modified style of ! 309: display that is designed to take less time. Instead of redisplaying ! 310: the buffer at each place the search gets to, it creates a new ! 311: single-line window and uses that to display the line that the search ! 312: has found. The single-line window comes into play as soon as point ! 313: gets outside of the text that is already on the screen. ! 314: ! 315: When the search is terminated, the single-line window is removed. ! 316: Only at this time is the window in which the search was done ! 317: redisplayed to show its new value of point. ! 318: ! 319: The three dots at the end of the search string, normally used to ! 320: indicate that searching is going on, are not displayed in slow style ! 321: display. ! 322: ! 323: The slow terminal style of display is used when the terminal baud ! 324: rate is less than or equal to the value of the variable ! 325: `search-slow-speed', initially 1200. ! 326: ! 327: The number of lines to use in slow terminal search display is ! 328: controlled by the variable `search-slow-window-lines'. 1 is its normal ! 329: value. ! 330: ! 331: ! 332: File: emacs, Node: Nonincremental Search, Next: Word Search, Prev: Incremental Search, Up: Search ! 333: ! 334: Nonincremental Search ! 335: ===================== ! 336: ! 337: Emacs also has conventional nonincremental search commands, which ! 338: require you to type the entire search string before searching begins. ! 339: ! 340: `C-s ESC STRING RET' ! 341: Search for STRING. ! 342: ! 343: `C-r ESC STRING RET' ! 344: Search backward for STRING. ! 345: ! 346: To do a nonincremental search, first type `C-s ESC'. This enters ! 347: the minibuffer to read the search string; terminate the string with ! 348: RET, and then the search is done. If the string is not found the ! 349: search command gets an error. ! 350: ! 351: The way `C-s ESC' works is that the `C-s' invokes incremental ! 352: search, which is specially programmed to invoke nonincremental search ! 353: if the argument you give it is empty. (Such an empty argument would ! 354: otherwise be useless.) `C-r ESC' also works this way. ! 355: ! 356: Forward and backward nonincremental searches are implemented by the ! 357: commands `search-forward' and `search-backward'. These commands may be ! 358: bound to keys in the usual manner. The reason that incremental search ! 359: is programmed to invoke them as well is that `C-s ESC' is the ! 360: traditional sequence of characters used in Emacs to invoke ! 361: nonincremental search. ! 362: ! 363: However, nonincremental searches performed using `C-s ESC' do not ! 364: call `search-forward' right away. The first thing done is to see if ! 365: the next character is `C-w', which requests a word search. *Note Word ! 366: Search::. ! 367: ! 368: ! 369: File: emacs, Node: Word Search, Next: Regexp Search, Prev: Nonincremental Search, Up: Search ! 370: ! 371: Word Search ! 372: =========== ! 373: ! 374: Word search searches for a sequence of words without regard to how ! 375: the words are separated. More precisely, you type a string of many ! 376: words, using single spaces to separate them, and the string can be ! 377: found even if there are multiple spaces, newlines or other punctuation ! 378: between the words. ! 379: ! 380: Word search is useful in editing documents formatted by text ! 381: formatters. If you edit while looking at the printed, formatted ! 382: version, you can't tell where the line breaks are in the source file. ! 383: With word search, you can search without having to know them. ! 384: ! 385: `C-s ESC C-w WORDS RET' ! 386: Search for WORDS, ignoring differences in punctuation. ! 387: ! 388: `C-r ESC C-w WORDS RET' ! 389: Search backward for WORDS, ignoring differences in punctuation. ! 390: ! 391: Word search is a special case of nonincremental search and is invoked ! 392: with `C-s ESC C-w'. This is followed by the search string, which must ! 393: always be terminated with RET. Being nonincremental, this search does ! 394: not start until the argument is terminated. It works by constructing a ! 395: regular expression and searching for that. *Note Regexp Search::. ! 396: ! 397: A backward word search can be done by `C-r ESC C-w'. ! 398: ! 399: Forward and backward word searches are implemented by the commands ! 400: `word-search-forward' and `word-search-backward'. These commands may ! 401: be bound to keys in the usual manner. The reason that incremental ! 402: search is programmed to invoke them as well is that `C-s ESC C-w' is ! 403: the traditional Emacs sequence of keys for word search. ! 404: ! 405: ! 406: File: emacs, Node: Regexp Search, Next: Regexps, Prev: Word Search, Up: Search ! 407: ! 408: Regular Expression Search ! 409: ========================= ! 410: ! 411: A "regular expression" ("regexp", for short) is a pattern that ! 412: denotes a set of strings, possibly an infinite set. Searching for ! 413: matches for a regexp is a very powerful operation that editors on Unix ! 414: systems have traditionally offered. In GNU Emacs, you can search for ! 415: the next match for a regexp either incrementally or not. ! 416: ! 417: Incremental search for a regexp is done by typing `C-M-s' ! 418: (`isearch-forward-regexp'). This command reads a search string ! 419: incrementally just like `C-s', but it treats the search string as a ! 420: regexp rather than looking for an exact match against the text in the ! 421: buffer. Each time you add text to the search string, you make the ! 422: regexp longer, and the new regexp is searched for. A reverse regexp ! 423: search command, `isearch-backward-regexp', also exists but no key runs ! 424: it. ! 425: ! 426: All of the control characters that do special things within an ! 427: ordinary incremental search have the same function in incremental ! 428: regexp search. Typing `C-s' or `C-r' immediately after starting the ! 429: search retrieves the last incremental search regexp used; that is to ! 430: say, incremental regexp and non-regexp searches have independent ! 431: defaults. ! 432: ! 433: Note that adding characters to the regexp in an incremental regexp ! 434: search does not make the cursor move back and start again. Perhaps it ! 435: ought to; I am not sure. As it stands, if you have searched for `foo' ! 436: and you add `\|bar', the search will not check for a `bar' in the ! 437: buffer before the `foo'. ! 438: ! 439: Nonincremental search for a regexp is done by the functions ! 440: `re-search-forward' and `re-search-backward'. You can invoke these ! 441: with `M-x', or bind them to keys. Also, you can call ! 442: `re-search-forward' by way of incremental regexp search with `C-M-s ! 443: ESC'. ! 444: ! 445: ! 446: File: emacs, Node: Regexps, Next: Search Case, Prev: Regexp Search, Up: Search ! 447: ! 448: Syntax of Regular Expressions ! 449: ============================= ! 450: ! 451: Regular expressions have a syntax in which a few characters are ! 452: special constructs and the rest are "ordinary". An ordinary character ! 453: is a simple regular expression which matches that character and nothing ! 454: else. The special characters are `$', `^', `.', `*', `+', `?', `[', `]' ! 455: and `\'; no new special characters will be defined. Any other ! 456: character appearing in a regular expression is ordinary, unless a `\' ! 457: precedes it. ! 458: ! 459: For example, `f' is not a special character, so it is ordinary, and ! 460: therefore `f' is a regular expression that matches the string `f' and ! 461: no other string. (It does not match the string `ff'.) Likewise, `o' ! 462: is a regular expression that matches only `o'. ! 463: ! 464: Any two regular expressions A and B can be concatenated. The result ! 465: is a regular expression which matches a string if A matches some amount ! 466: of the beginning of that string and B matches the rest of the string. ! 467: ! 468: As a simple example, we can concatenate the regular expressions `f' ! 469: and `o' to get the regular expression `fo', which matches only the ! 470: string `fo'. Still trivial. To do something nontrivial, you need to ! 471: use one of the special characters. Here is a list of them. ! 472: ! 473: `. (Period)' ! 474: is a special character that matches any single character except a ! 475: newline. Using concatenation, we can make regular expressions like ! 476: `a.b' which matches any three-character string which begins with ! 477: `a' and ends with `b'. ! 478: ! 479: `*' ! 480: is not a construct by itself; it is a suffix, which means the ! 481: preceding regular expression is to be repeated as many times as ! 482: possible. In `fo*', the `*' applies to the `o', so `fo*' matches ! 483: one `f' followed by any number of `o's. The case of zero `o's is ! 484: allowed: `fo*' does match `f'. ! 485: ! 486: `*' always applies to the smallest possible preceding expression. ! 487: Thus, `fo*' has a repeating `o', not a repeating `fo'. ! 488: ! 489: The matcher processes a `*' construct by matching, immediately, as ! 490: many repetitions as can be found. Then it continues with the rest ! 491: of the pattern. If that fails, backtracking occurs, discarding ! 492: some of the matches of the `*'-modified construct in case that ! 493: makes it possible to match the rest of the pattern. For example, ! 494: matching `ca*ar' against the string `caaar', the `a*' first tries ! 495: to match all three `a's; but the rest of the pattern is `ar' and ! 496: there is only `r' left to match, so this try fails. The next ! 497: alternative is for `a*' to match only two `a's. With this choice, ! 498: the rest of the regexp matches successfully. ! 499: ! 500: `+' ! 501: Is a suffix character similar to `*' except that it requires that ! 502: the preceding expression be matched at least once. So, for ! 503: example, `ca+r' will match the strings `car' and `caaaar' but not ! 504: the string `cr', whereas `ca*r' would match all three strings. ! 505: ! 506: `?' ! 507: Is a suffix character similar to `*' except that it can match the ! 508: preceding expression either once or not at all. For example, ! 509: `ca?r' will match `car' or `cr'; nothing else. ! 510: ! 511: `[ ... ]' ! 512: `[' begins a "character set", which is terminated by a `]'. In ! 513: the simplest case, the characters between the two form the set. ! 514: Thus, `[ad]' matches either one `a' or one `d', and `[ad]*' ! 515: matches any string composed of just `a's and `d's (including the ! 516: empty string), from which it follows that `c[ad]*r' matches `cr', ! 517: `car', `cdr', `caddaar', etc. ! 518: ! 519: Character ranges can also be included in a character set, by ! 520: writing two characters with a `-' between them. Thus, `[a-z]' ! 521: matches any lower-case letter. Ranges may be intermixed freely ! 522: with individual characters, as in `[a-z$%.]', which matches any ! 523: lower case letter or `$', `%' or period. ! 524: ! 525: Note that the usual special characters are not special any more ! 526: inside a character set. A completely different set of special ! 527: characters exists inside character sets: `]', `-' and `^'. ! 528: ! 529: To include a `]' in a character set, you must make it the first ! 530: character. For example, `[]a]' matches `]' or `a'. To include a ! 531: `-', write `---', which is a range containing only `-'. To ! 532: include `^', make it other than the first character in the set. ! 533: ! 534: `[^ ... ]' ! 535: `[^' begins a "complement character set", which matches any ! 536: character except the ones specified. Thus, `[^a-z0-9A-Z]' matches ! 537: all characters except letters and digits. ! 538: ! 539: `^' is not special in a character set unless it is the first ! 540: character. The character following the `^' is treated as if it ! 541: were first (`-' and `]' are not special there). ! 542: ! 543: Note that a complement character set can match a newline, unless ! 544: newline is mentioned as one of the characters not to match. ! 545: ! 546: `^' ! 547: is a special character that matches the empty string, but only if ! 548: at the beginning of a line in the text being matched. Otherwise ! 549: it fails to match anything. Thus, `^foo' matches a `foo' which ! 550: occurs at the beginning of a line. ! 551: ! 552: `$' ! 553: is similar to `^' but matches only at the end of a line. Thus, ! 554: `xx*$' matches a string of one `x' or more at the end of a line. ! 555: ! 556: `\' ! 557: has two functions: it quotes the special characters (including ! 558: `\'), and it introduces additional special constructs. ! 559: ! 560: Because `\' quotes special characters, `\$' is a regular ! 561: expression which matches only `$', and `\[' is a regular ! 562: expression which matches only `[', and so on. ! 563: ! 564: Note: for historical compatibility, special characters are treated as ! 565: ordinary ones if they are in contexts where their special meanings make ! 566: no sense. For example, `*foo' treats `*' as ordinary since there is no ! 567: preceding expression on which the `*' can act. It is poor practice to ! 568: depend on this behavior; better to quote the special character anyway, ! 569: regardless of where is appears. ! 570: ! 571: For the most part, `\' followed by any character matches only that ! 572: character. However, there are several exceptions: characters which, ! 573: when preceded by `\', are special constructs. Such characters are ! 574: always ordinary when encountered on their own. Here is a table of `\' ! 575: constructs. ! 576: ! 577: `\|' ! 578: specifies an alternative. Two regular expressions A and B with ! 579: `\|' in between form an expression that matches anything that ! 580: either A or B will match. ! 581: ! 582: Thus, `foo\|bar' matches either `foo' or `bar' but no other string. ! 583: ! 584: `\|' applies to the largest possible surrounding expressions. ! 585: Only a surrounding `\( ... \)' grouping can limit the grouping ! 586: power of `\|'. ! 587: ! 588: Full backtracking capability exists to handle multiple uses of ! 589: `\|'. ! 590: ! 591: `\( ... \)' ! 592: is a grouping construct that serves three purposes: ! 593: ! 594: 1. To enclose a set of `\|' alternatives for other operations. ! 595: Thus, `\(foo\|bar\)x' matches either `foox' or `barx'. ! 596: ! 597: 2. To enclose a complicated expression for the postfix `*' to ! 598: operate on. Thus, `ba\(na\)*' matches `bananana', etc., with ! 599: any (zero or more) number of `na' strings. ! 600: ! 601: 3. To mark a matched substring for future reference. ! 602: ! 603: ! 604: This last application is not a consequence of the idea of a ! 605: parenthetical grouping; it is a separate feature which happens to ! 606: be assigned as a second meaning to the same `\( ... \)' construct ! 607: because there is no conflict in practice between the two meanings. ! 608: Here is an explanation of this feature: ! 609: ! 610: `\DIGIT' ! 611: after the end of a `\( ... \)' construct, the matcher remembers the ! 612: beginning and end of the text matched by that construct. Then, ! 613: later on in the regular expression, you can use `\' followed by ! 614: DIGIT to mean "match the same text matched the DIGIT'th time by the ! 615: `\( ... \)' construct." ! 616: ! 617: The strings matching the first nine `\( ... \)' constructs ! 618: appearing in a regular expression are assigned numbers 1 through 9 ! 619: in order that the open-parentheses appear in the regular ! 620: expression. `\1' through `\9' may be used to refer to the text ! 621: matched by the corresponding `\( ... \)' construct. ! 622: ! 623: For example, `\(.*\)\1' matches any newline-free string that is ! 624: composed of two identical halves. The `\(.*\)' matches the first ! 625: half, which may be anything, but the `\1' that follows must match ! 626: the same exact text. ! 627: ! 628: `\`' ! 629: matches the empty string, provided it is at the beginning of the ! 630: buffer. ! 631: ! 632: `\'' ! 633: matches the empty string, provided it is at the end of the buffer. ! 634: ! 635: `\b' ! 636: matches the empty string, provided it is at the beginning or end ! 637: of a word. Thus, `\bfoo\b' matches any occurrence of `foo' as a ! 638: separate word. `\bballs?\b' matches `ball' or `balls' as a ! 639: separate word. ! 640: ! 641: `\B' ! 642: matches the empty string, provided it is not at the beginning or ! 643: end of a word. ! 644: ! 645: `\<' ! 646: matches the empty string, provided it is at the beginning of a ! 647: word. ! 648: ! 649: `\>' ! 650: matches the empty string, provided it is at the end of a word. ! 651: ! 652: `\w' ! 653: matches any word-constituent character. The editor syntax table ! 654: determines which characters these are. ! 655: ! 656: `\W' ! 657: matches any character that is not a word-constituent. ! 658: ! 659: `\sCODE' ! 660: matches any character whose syntax is CODE. CODE is a character ! 661: which represents a syntax code: thus, `w' for word constituent, ! 662: `-' for whitespace, `(' for open-parenthesis, etc. *Note Syntax::. ! 663: ! 664: `\SCODE' ! 665: matches any character whose syntax is not CODE. ! 666: ! 667: Here is a complicated regexp, used by Emacs to recognize the end of a ! 668: sentence together with any whitespace that follows. It is given in Lisp ! 669: syntax to enable you to distinguish the spaces from the tab characters. ! 670: In Lisp syntax, the string constant begins and ends with a ! 671: double-quote. `\"' stands for a double-quote as part of the regexp, ! 672: `\\' for a backslash as part of the regexp, `\t' for a tab and `\n' for ! 673: a newline. ! 674: ! 675: "[.?!][]\"')]*\\($\\|\t\\| \\)[ \t\n]*" ! 676: ! 677: This contains four parts in succession: a character set matching period, ! 678: `?' or `!'; a character set matching close-brackets, quotes or ! 679: parentheses, repeated any number of times; an alternative in ! 680: backslash-parentheses that matches end-of-line, a tab or two spaces; ! 681: and a character set matching whitespace characters, repeated any number ! 682: of times. ! 683: ! 684: Note that the above example shows how to write this regexp when ! 685: entering it as part of an Emacs Lisp program. To enter the same regexp ! 686: in an interactive command such as `re-search-forward' you must spell it ! 687: differently: ! 688: ! 689: [.?!][]"')]*\($\|^Q^I\| \)[ ^Q^I^Q^J]* ! 690: ! 691: ! 692: File: emacs, Node: Search Case, Next: Replace, Prev: Regexps, Up: Search ! 693: ! 694: Searching and Case ! 695: ================== ! 696: ! 697: All sorts of searches in Emacs normally ignore the case of the text ! 698: they are searching through; if you specify searching for `FOO', then ! 699: `Foo' and `foo' are also considered a match. Regexps, and in ! 700: particular character sets, are included: `[aB]' would match `a' or `A' ! 701: or `b' or `B'. ! 702: ! 703: If you do not want this feature, set the variable `case-fold-search' ! 704: to `nil'. Then all letters must match exactly, including case. This ! 705: is a per-buffer variable; altering the variable affects only the current ! 706: buffer, but there is a default value which you can change as well. ! 707: *Note Locals::. ! 708: ! 709: ! 710: File: emacs, Node: Replace, Next: Other Repeating Search, Prev: Search Case, Up: Search ! 711: ! 712: Replacement Commands ! 713: ==================== ! 714: ! 715: Global search-and-replace operations are not needed as often in ! 716: Emacs as they are in other editors, but they are available. In ! 717: addition to the simple `replace-string' command which is like that ! 718: found in most editors, there is a `query-replace' command which asks ! 719: you, for each occurrence of the pattern, whether to replace it. ! 720: ! 721: The replace commands all replace one string (or regexp) with one ! 722: replacement string. It is possible to perform several replacements in ! 723: parallel using the command `expand-region-abbrevs'. *Note Expanding ! 724: Abbrevs::. ! 725: ! 726: * Menu: ! 727: ! 728: * Unconditional Replace:: Replacing all matches for a string. ! 729: * Regexp Replace:: Replacing all matches for a regexp. ! 730: * Replacement and Case:: How replacements preserve case of letters. ! 731: * Query Replace:: How to use querying. ! 732: ! 733: ! 734: File: emacs, Node: Unconditional Replace, Next: Regexp Replace, Prev: Replace, Up: Replace ! 735: ! 736: Unconditional Replacement ! 737: ------------------------- ! 738: ! 739: `M-x replace-string RET STRING RET NEWSTRING RET' ! 740: Replace every occurrence of STRING with NEWSTRING. ! 741: ! 742: `M-x replace-regexp RET REGEXP RET NEWSTRING RET' ! 743: Replace every match for REGEXP with NEWSTRING. ! 744: ! 745: To replace every instance of `foo' after point with `bar', use the ! 746: command `M-x replace-string' with the two arguments `foo' and `bar'. ! 747: Replacement occurs only after point, so if you want to cover the whole ! 748: buffer you must go to the beginning first. All occurrences up to the ! 749: end of the buffer are replaced; to limit replacement to part of the ! 750: buffer, narrow to that part of the buffer before doing the replacement ! 751: (*note Narrowing::.). ! 752: ! 753: When `replace-string' exits, point is left at the last occurrence ! 754: replaced. The value of point when the `replace-string' command was ! 755: issued is remembered on the mark ring; `C-u C-SPC' moves back there. ! 756: ! 757: A numeric argument restricts replacement to matches that are ! 758: surrounded by word boundaries. ! 759: ! 760: ! 761: File: emacs, Node: Regexp Replace, Next: Replacement and Case, Prev: Unconditional Replace, Up: Replace ! 762: ! 763: Regexp Replacement ! 764: ------------------ ! 765: ! 766: `replace-string' replaces exact matches for a single string. The ! 767: similar command `replace-regexp' replaces any match for a specified ! 768: pattern. ! 769: ! 770: In `replace-regexp', the NEWSTRING need not be constant. It can ! 771: refer to all or part of what is matched by the REGEXP. `\&' in ! 772: NEWSTRING stands for the entire text being replaced. `\D' in NEWSTRING, ! 773: where D is a digit, stands for whatever matched the D'th parenthesized ! 774: grouping in REGEXP. For example, ! 775: ! 776: M-x replace-regexp RET c[ad]+r RET \&-safe RET ! 777: ! 778: would replace (for example) `cadr' with `cadr-safe' and `cddr' with ! 779: `cddr-safe'. ! 780: ! 781: M-x replace-regexp RET \(c[ad]+r\)-safe RET \1 RET ! 782: ! 783: would perform exactly the opposite replacements. To include a `\' in ! 784: the text to replace with, you must give `\\'. ! 785: ! 786: ! 787: File: emacs, Node: Replacement and Case, Next: Query Replace, Prev: Regexp Replace, Up: Replace ! 788: ! 789: Replace Commands and Case ! 790: ------------------------- ! 791: ! 792: If the arguments to a replace command are in lower case, it preserves ! 793: case when it makes a replacement. Thus, the command ! 794: ! 795: M-x replace-string RET foo RET bar RET ! 796: ! 797: replaces a lower case `foo' with a lower case `bar', `FOO' with `BAR', ! 798: and `Foo' with `Bar'. If upper case letters are used in the second ! 799: argument, they remain upper case every time that argument is inserted. ! 800: If upper case letters are used in the first argument, the second ! 801: argument is always substituted exactly as given, with no case ! 802: conversion. Likewise, if the variable `case-replace' is set to `nil', ! 803: replacement is done without case conversion. If `case-fold-search' is ! 804: set to `nil', case is significant in matching occurrences of `foo' to ! 805: replace; also, case conversion of the replacement string is not done. ! 806: ! 807: ! 808: File: emacs, Node: Query Replace, Prev: Replacement and Case, Up: Replace ! 809: ! 810: Query Replace ! 811: ------------- ! 812: ! 813: `M-% STRING RET NEWSTRING RET' ! 814: `M-x query-replace RET STRING RET NEWSTRING RET' ! 815: Replace some occurrences of STRING with NEWSTRING. ! 816: ! 817: `M-x query-replace-regexp RET REGEXP RET NEWSTRING RET' ! 818: Replace some matches for REGEXP with NEWSTRING. ! 819: ! 820: If you want to change only some of the occurrences of `foo' to ! 821: `bar', not all of them, then you cannot use an ordinary ! 822: `replace-string'. Instead, use `M-%' (`query-replace'). This command ! 823: finds occurrences of `foo' one by one, displays each occurrence and ! 824: asks you whether to replace it. A numeric argument to `query-replace' ! 825: tells it to consider only occurrences that are bounded by ! 826: word-delimiter characters. ! 827: ! 828: Aside from querying, `query-replace' works just like ! 829: `replace-string', and `query-replace-regexp' works just like ! 830: `replace-regexp'. ! 831: ! 832: The things you can type when you are shown an occurrence of STRING ! 833: or a match for REGEXP are: ! 834: ! 835: `SPC' ! 836: to replace the occurrence with NEWSTRING. This preserves case, ! 837: just like `replace-string', provided `case-replace' is non-`nil', ! 838: as it normally is. ! 839: ! 840: `DEL' ! 841: to skip to the next occurrence without replacing this one. ! 842: ! 843: `, (Comma)' ! 844: to replace this occurrence and display the result. You are then ! 845: asked for another input character, except that since the ! 846: replacement has already been made, DEL and SPC are equivalent. ! 847: You could type `C-r' at this point (see below) to alter the ! 848: replaced text. You could also type `C-x u' to undo the ! 849: replacement; this exits the `query-replace', so if you want to do ! 850: further replacement you must use `C-x ESC' to restart (*note ! 851: Repetition::.). ! 852: ! 853: `ESC' ! 854: to exit without doing any more replacements. ! 855: ! 856: `. (Period)' ! 857: to replace this occurrence and then exit. ! 858: ! 859: `!' ! 860: to replace all remaining occurrences without asking again. ! 861: ! 862: `^' ! 863: to go back to the location of the previous occurrence (or what ! 864: used to be an occurrence), in case you changed it by mistake. ! 865: This works by popping the mark ring. Only one `^' in a row is ! 866: allowed, because only one previous replacement location is kept ! 867: during `query-replace'. ! 868: ! 869: `C-r' ! 870: to enter a recursive editing level, in case the occurrence needs ! 871: to be edited rather than just replaced with NEWSTRING. When you ! 872: are done, exit the recursive editing level with `C-M-c' and the ! 873: next occurrence will be displayed. *Note Recursive Edit::. ! 874: ! 875: `C-w' ! 876: to delete the occurrence, and then enter a recursive editing level ! 877: as in `C-r'. Use the recursive edit to insert text to replace the ! 878: deleted occurrence of STRING. When done, exit the recursive ! 879: editing level with `C-M-c' and the next occurrence will be ! 880: displayed. ! 881: ! 882: `C-l' ! 883: to redisplay the screen and then give another answer. ! 884: ! 885: `C-h' ! 886: to display a message summarizing these options, then give another ! 887: answer. ! 888: ! 889: If you type any other character, the `query-replace' is exited, and ! 890: the character executed as a command. To restart the `query-replace', ! 891: use `C-x ESC', which repeats the `query-replace' because it used the ! 892: minibuffer to read its arguments. *Note C-x ESC: Repetition. ! 893: ! 894: To replace every occurrence, you can start `query-replace' at the ! 895: beginning of the buffer and type `!', or you can use the ! 896: `replace-string' command at the beginning of the buffer. To replace ! 897: every occurrence in a part of the buffer, narrow to that part and then ! 898: run `replace-string' or `query-replace' at the beginning of it. *Note ! 899: Narrowing::. ! 900: ! 901: ! 902: File: emacs, Node: Other Repeating Search, Prev: Replace, Up: Search ! 903: ! 904: Other Search-and-Loop Commands ! 905: ============================== ! 906: ! 907: Here are some other commands that find matches for a regular ! 908: expression. They all operate from point to the end of the buffer. ! 909: ! 910: `M-x occur' ! 911: Print each line that follows point and contains a match for the ! 912: specified regexp. A numeric argument specifies the number of ! 913: context lines to print before and after each matching line; the ! 914: default is none. ! 915: ! 916: The buffer `*Occur*' containing the output serves as a menu for ! 917: finding the occurrences in their original context. Find an ! 918: occurrence as listed in `*Occur*', position point there and type ! 919: `C-c C-c'; this switches to the buffer that was searched and moves ! 920: point to the original of the same occurrence. ! 921: ! 922: `M-x list-matching-lines' ! 923: Synonym for `M-x occur'. ! 924: ! 925: `M-x count-matches' ! 926: Print the number of matches following point for the specified ! 927: regexp. ! 928: ! 929: `M-x delete-non-matching-lines' ! 930: Delete each line that follows point and does not contain a match ! 931: for the specified regexp. ! 932: ! 933: `M-x delete-matching-lines' ! 934: Delete each line that follows point and contains a match for the ! 935: specified regexp. ! 936: ! 937: ! 938: File: emacs, Node: Fixit, Next: Files, Prev: Search, Up: Top ! 939: ! 940: Commands for Fixing Typos ! 941: ************************* ! 942: ! 943: In this chapter we describe the commands that are especially useful ! 944: for the times when you catch a mistake in your text just after you have ! 945: made it, or change your mind while composing text on line. ! 946: ! 947: * Menu: ! 948: ! 949: * Kill Errors:: Commands to kill a batch of recently entered text. ! 950: * Transpose:: Exchanging two characters, words, lines, lists... ! 951: * Fixing Case:: Correcting case of last word entered. ! 952: * Spelling:: Apply spelling checker to a word, or a whole file. ! 953: ! 954: ! 955: File: emacs, Node: Kill Errors, Next: Transpose, Prev: Fixit, Up: Fixit ! 956: ! 957: Killing Your Mistakes ! 958: ===================== ! 959: ! 960: `DEL' ! 961: Delete last character (`delete-backward-char'). ! 962: ! 963: `M-DEL' ! 964: Kill last word (`backward-kill-word'). ! 965: ! 966: `C-x DEL' ! 967: Kill to beginning of sentence (`backward-kill-sentence'). ! 968: ! 969: The DEL character (`delete-backward-char') is the most important ! 970: correction command. When used among graphic (self-inserting) ! 971: characters, it can be thought of as canceling the last character typed. ! 972: ! 973: When your mistake is longer than a couple of characters, it might be ! 974: more convenient to use `M-DEL' or `C-x DEL'. `M-DEL' kills back to the ! 975: start of the last word, and `C-x DEL' kills back to the start of the ! 976: last sentence. `C-x DEL' is particularly useful when you are thinking ! 977: of what to write as you type it, in case you change your mind about ! 978: phrasing. `M-DEL' and `C-x DEL' save the killed text for `C-y' and ! 979: `M-y' to retrieve. *Note Yanking::. ! 980: ! 981: `M-DEL' is often useful even when you have typed only a few ! 982: characters wrong, if you know you are confused in your typing and aren't ! 983: sure exactly what you typed. At such a time, you cannot correct with ! 984: DEL except by looking at the screen to see what you did. It requires ! 985: less thought to kill the whole word and start over again. ! 986: ! 987: ! 988: File: emacs, Node: Transpose, Next: Fixing Case, Prev: Kill Errors, Up: Fixit ! 989: ! 990: Transposing Text ! 991: ================ ! 992: ! 993: `C-t' ! 994: Transpose two characters (`transpose-chars'). ! 995: ! 996: `M-t' ! 997: Transpose two words (`transpose-words'). ! 998: ! 999: `C-M-t' ! 1000: Transpose two balanced expressions (`transpose-sexps'). ! 1001: ! 1002: `C-x C-t' ! 1003: Transpose two lines (`transpose-lines'). ! 1004: ! 1005: The common error of transposing two characters can be fixed, when ! 1006: they are adjacent, with the `C-t' command (`transpose-chars'). ! 1007: Normally, `C-t' transposes the two characters on either side of point. ! 1008: When given at the end of a line, rather than transposing the last ! 1009: character of the line with the newline, which would be useless, `C-t' ! 1010: transposes the last two characters on the line. So, if you catch your ! 1011: transposition error right away, you can fix it with just a `C-t'. If ! 1012: you don't catch it so fast, you must move the cursor back to between ! 1013: the two transposed characters. If you transposed a space with the last ! 1014: character of the word before it, the word motion commands are a good ! 1015: way of getting there. Otherwise, a reverse search (`C-r') is often the ! 1016: best way. *Note Search::. ! 1017: ! 1018: `Meta-t' (`transpose-words') transposes the word before point with ! 1019: the word after point. It moves point forward over a word, dragging the ! 1020: word preceding or containing point forward as well. The punctuation ! 1021: characters between the words do not move. For example, `FOO, BAR' ! 1022: transposes into `BAR, FOO' rather than `BAR FOO,'. ! 1023: ! 1024: `C-M-t' (`transpose-sexps') is a similar command for transposing two ! 1025: expressions (*note Lists::.), and `C-x C-t' (`transpose-lines') ! 1026: exchanges lines. They work like `M-t' except in determining the ! 1027: division of the text into syntactic units. ! 1028: ! 1029: A numeric argument to a transpose command serves as a repeat count: ! 1030: it tells the transpose command to move the character (word, sexp, line) ! 1031: before or containing point across several other characters (words, ! 1032: sexps, lines). For example, `C-u 3 C-t' moves the character before ! 1033: point forward across three other characters. This is equivalent to ! 1034: repeating `C-t' three times. `C-u - 4 M-t' moves the word before point ! 1035: backward across four words. `C-u - C-M-t' would cancel the effect of ! 1036: plain `C-M-t'. ! 1037: ! 1038: A numeric argument of zero is assigned a special meaning (because ! 1039: otherwise a command with a repeat count of zero would do nothing): to ! 1040: transpose the character (word, sexp, line) ending after point with the ! 1041: one ending after the mark. ! 1042: ! 1043: ! 1044: File: emacs, Node: Fixing Case, Next: Spelling, Prev: Transpose, Up: Fixit ! 1045: ! 1046: Case Conversion ! 1047: =============== ! 1048: ! 1049: `M-- M-l' ! 1050: Convert last word to lower case. Note `Meta--' is Meta-minus. ! 1051: ! 1052: `M-- M-u' ! 1053: Convert last word to all upper case. ! 1054: ! 1055: `M-- M-c' ! 1056: Convert last word to lower case with capital initial. ! 1057: ! 1058: A very common error is to type words in the wrong case. Because of ! 1059: this, the word case-conversion commands `M-l', `M-u' and `M-c' have a ! 1060: special feature when used with a negative argument: they do not move the ! 1061: cursor. As soon as you see you have mistyped the last word, you can ! 1062: simply case-convert it and go on typing. *Note Case::. ! 1063: ! 1064: ! 1065: File: emacs, Node: Spelling, Prev: Fixing Case, Up: Fixit ! 1066: ! 1067: Checking and Correcting Spelling ! 1068: ================================ ! 1069: ! 1070: `M-$' ! 1071: Check and correct spelling of word (`spell-word'). ! 1072: ! 1073: `M-x spell-buffer' ! 1074: Check and correct spelling of each word in the buffer. ! 1075: ! 1076: `M-x spell-region' ! 1077: Check and correct spelling of each word in the region. ! 1078: ! 1079: `M-x spell-string' ! 1080: Check spelling of specified word. ! 1081: ! 1082: To check the spelling of the word before point, and optionally ! 1083: correct it as well, use the command `M-$' (`spell-word'). This command ! 1084: runs an inferior process containing the `spell' program to see whether ! 1085: the word is correct English. If it is not, it asks you to edit the ! 1086: word (in the minibuffer) into a corrected spelling, and then does a ! 1087: `query-replace' to substitute the corrected spelling for the old one ! 1088: throughout the buffer. ! 1089: ! 1090: If you exit the minibuffer without altering the original spelling, it ! 1091: means you do not want to do anything to that word. Then the ! 1092: `query-replace' is not done. ! 1093: ! 1094: `M-x spell-buffer' checks each word in the buffer the same way that ! 1095: `spell-word' does, doing a `query-replace' if appropriate for every ! 1096: incorrect word. ! 1097: ! 1098: `M-x spell-region' is similar but operates only on the region, not ! 1099: the entire buffer. ! 1100: ! 1101: `M-x spell-string' reads a string as an argument and checks whether ! 1102: that is a correctly spelled English word. It prints in the echo area a ! 1103: message giving the answer. ! 1104: ! 1105: ! 1106: File: emacs, Node: Files, Next: Buffers, Prev: Fixit, Up: Top ! 1107: ! 1108: File Handling ! 1109: ************* ! 1110: ! 1111: The basic unit of stored data in Unix is the "file". To edit a file, ! 1112: you must tell Emacs to examine the file and prepare a buffer containing ! 1113: a copy of the file's text. This is called "visiting" the file. Editing ! 1114: commands apply directly to text in the buffer; that is, to the copy ! 1115: inside Emacs. Your changes appear in the file itself only when you ! 1116: "save" the buffer back into the file. ! 1117: ! 1118: In addition to visiting and saving files, Emacs can delete, copy, ! 1119: rename, and append to files, and operate on file directories. ! 1120: ! 1121: * Menu: ! 1122: ! 1123: * File Names:: How to type and edit file name arguments. ! 1124: * Visiting:: Visiting a file prepares Emacs to edit the file. ! 1125: * Saving:: Saving makes your changes permanent. ! 1126: * Reverting:: Reverting cancels all the changes not saved. ! 1127: * Auto Save:: Auto Save periodically protects against loss of data. ! 1128: * ListDir:: Listing the contents of a file directory. ! 1129: * Dired:: "Editing" a directory to delete, rename, etc. ! 1130: the files in it. ! 1131: * Misc File Ops:: Other things you can do on files. ! 1132: ! 1133:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.