Annotation of embedaddon/readline/doc/hsuser.texi, revision 1.1
1.1 ! misho 1: @ignore
! 2: This file documents the user interface to the GNU History library.
! 3:
! 4: Copyright (C) 1988--2014 Free Software Foundation, Inc.
! 5: Authored by Brian Fox and Chet Ramey.
! 6:
! 7: Permission is granted to make and distribute verbatim copies of this manual
! 8: provided the copyright notice and this permission notice are preserved on
! 9: all copies.
! 10:
! 11: Permission is granted to process this file through Tex and print the
! 12: results, provided the printed document carries copying permission notice
! 13: identical to this one except for the removal of this paragraph (this
! 14: paragraph not being relevant to the printed manual).
! 15:
! 16: Permission is granted to copy and distribute modified versions of this
! 17: manual under the conditions for verbatim copying, provided also that the
! 18: GNU Copyright statement is available to the distributee, and provided that
! 19: the entire resulting derived work is distributed under the terms of a
! 20: permission notice identical to this one.
! 21:
! 22: Permission is granted to copy and distribute translations of this manual
! 23: into another language, under the above conditions for modified versions.
! 24: @end ignore
! 25:
! 26: @node Using History Interactively
! 27: @chapter Using History Interactively
! 28:
! 29: @ifclear BashFeatures
! 30: @defcodeindex bt
! 31: @end ifclear
! 32:
! 33: @ifset BashFeatures
! 34: This chapter describes how to use the @sc{gnu} History Library
! 35: interactively, from a user's standpoint.
! 36: It should be considered a user's guide.
! 37: For information on using the @sc{gnu} History Library in other programs,
! 38: see the @sc{gnu} Readline Library Manual.
! 39: @end ifset
! 40: @ifclear BashFeatures
! 41: This chapter describes how to use the @sc{gnu} History Library interactively,
! 42: from a user's standpoint. It should be considered a user's guide. For
! 43: information on using the @sc{gnu} History Library in your own programs,
! 44: @pxref{Programming with GNU History}.
! 45: @end ifclear
! 46:
! 47: @ifset BashFeatures
! 48: @menu
! 49: * Bash History Facilities:: How Bash lets you manipulate your command
! 50: history.
! 51: * Bash History Builtins:: The Bash builtin commands that manipulate
! 52: the command history.
! 53: * History Interaction:: What it feels like using History as a user.
! 54: @end menu
! 55: @end ifset
! 56: @ifclear BashFeatures
! 57: @menu
! 58: * History Interaction:: What it feels like using History as a user.
! 59: @end menu
! 60: @end ifclear
! 61:
! 62: @ifset BashFeatures
! 63: @node Bash History Facilities
! 64: @section Bash History Facilities
! 65: @cindex command history
! 66: @cindex history list
! 67:
! 68: When the @option{-o history} option to the @code{set} builtin
! 69: is enabled (@pxref{The Set Builtin}),
! 70: the shell provides access to the @dfn{command history},
! 71: the list of commands previously typed.
! 72: The value of the @env{HISTSIZE} shell variable is used as the
! 73: number of commands to save in a history list.
! 74: The text of the last @env{$HISTSIZE}
! 75: commands (default 500) is saved.
! 76: The shell stores each command in the history list prior to
! 77: parameter and variable expansion
! 78: but after history expansion is performed, subject to the
! 79: values of the shell variables
! 80: @env{HISTIGNORE} and @env{HISTCONTROL}.
! 81:
! 82: When the shell starts up, the history is initialized from the
! 83: file named by the @env{HISTFILE} variable (default @file{~/.bash_history}).
! 84: The file named by the value of @env{HISTFILE} is truncated, if
! 85: necessary, to contain no more than the number of lines specified by
! 86: the value of the @env{HISTFILESIZE} variable.
! 87: When a shell with history enabled exits, the last
! 88: @env{$HISTSIZE} lines are copied from the history list to the file
! 89: named by @env{$HISTFILE}.
! 90: If the @code{histappend} shell option is set (@pxref{Bash Builtins}),
! 91: the lines are appended to the history file,
! 92: otherwise the history file is overwritten.
! 93: If @env{HISTFILE}
! 94: is unset, or if the history file is unwritable, the history is not saved.
! 95: After saving the history, the history file is truncated
! 96: to contain no more than @env{$HISTFILESIZE} lines.
! 97: If @env{HISTFILESIZE} is unset, or set to null, a non-numeric value, or
! 98: a numeric value less than zero, the history file is not truncated.
! 99:
! 100: If the @env{HISTTIMEFORMAT} is set, the time stamp information
! 101: associated with each history entry is written to the history file,
! 102: marked with the history comment character.
! 103: When the history file is read, lines beginning with the history
! 104: comment character followed immediately by a digit are interpreted
! 105: as timestamps for the previous history line.
! 106:
! 107: The builtin command @code{fc} may be used to list or edit and re-execute
! 108: a portion of the history list.
! 109: The @code{history} builtin may be used to display or modify the history
! 110: list and manipulate the history file.
! 111: When using command-line editing, search commands
! 112: are available in each editing mode that provide access to the
! 113: history list (@pxref{Commands For History}).
! 114:
! 115: The shell allows control over which commands are saved on the history
! 116: list. The @env{HISTCONTROL} and @env{HISTIGNORE}
! 117: variables may be set to cause the shell to save only a subset of the
! 118: commands entered.
! 119: The @code{cmdhist}
! 120: shell option, if enabled, causes the shell to attempt to save each
! 121: line of a multi-line command in the same history entry, adding
! 122: semicolons where necessary to preserve syntactic correctness.
! 123: The @code{lithist}
! 124: shell option causes the shell to save the command with embedded newlines
! 125: instead of semicolons.
! 126: The @code{shopt} builtin is used to set these options.
! 127: @xref{Bash Builtins}, for a description of @code{shopt}.
! 128:
! 129: @node Bash History Builtins
! 130: @section Bash History Builtins
! 131: @cindex history builtins
! 132:
! 133: Bash provides two builtin commands which manipulate the
! 134: history list and history file.
! 135:
! 136: @table @code
! 137:
! 138: @item fc
! 139: @btindex fc
! 140: @example
! 141: @code{fc [-e @var{ename}] [-lnr] [@var{first}] [@var{last}]}
! 142: @code{fc -s [@var{pat}=@var{rep}] [@var{command}]}
! 143: @end example
! 144:
! 145: The first form selects a range of commands from @var{first} to
! 146: @var{last} from the history list and displays or edits and re-executes
! 147: them.
! 148: Both @var{first} and
! 149: @var{last} may be specified as a string (to locate the most recent
! 150: command beginning with that string) or as a number (an index into the
! 151: history list, where a negative number is used as an offset from the
! 152: current command number). If @var{last} is not specified it is set to
! 153: @var{first}. If @var{first} is not specified it is set to the previous
! 154: command for editing and @minus{}16 for listing. If the @option{-l} flag is
! 155: given, the commands are listed on standard output. The @option{-n} flag
! 156: suppresses the command numbers when listing. The @option{-r} flag
! 157: reverses the order of the listing. Otherwise, the editor given by
! 158: @var{ename} is invoked on a file containing those commands. If
! 159: @var{ename} is not given, the value of the following variable expansion
! 160: is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}. This says to use the
! 161: value of the @env{FCEDIT} variable if set, or the value of the
! 162: @env{EDITOR} variable if that is set, or @code{vi} if neither is set.
! 163: When editing is complete, the edited commands are echoed and executed.
! 164:
! 165: In the second form, @var{command} is re-executed after each instance
! 166: of @var{pat} in the selected command is replaced by @var{rep}.
! 167: @var{command} is intepreted the same as @var{first} above.
! 168:
! 169: A useful alias to use with the @code{fc} command is @code{r='fc -s'}, so
! 170: that typing @samp{r cc} runs the last command beginning with @code{cc}
! 171: and typing @samp{r} re-executes the last command (@pxref{Aliases}).
! 172:
! 173: @item history
! 174: @btindex history
! 175: @example
! 176: history [@var{n}]
! 177: history -c
! 178: history -d @var{offset}
! 179: history [-anrw] [@var{filename}]
! 180: history -ps @var{arg}
! 181: @end example
! 182:
! 183: With no options, display the history list with line numbers.
! 184: Lines prefixed with a @samp{*} have been modified.
! 185: An argument of @var{n} lists only the last @var{n} lines.
! 186: If the shell variable @env{HISTTIMEFORMAT} is set and not null,
! 187: it is used as a format string for @var{strftime} to display
! 188: the time stamp associated with each displayed history entry.
! 189: No intervening blank is printed between the formatted time stamp
! 190: and the history line.
! 191:
! 192: Options, if supplied, have the following meanings:
! 193:
! 194: @table @code
! 195: @item -c
! 196: Clear the history list. This may be combined
! 197: with the other options to replace the history list completely.
! 198:
! 199: @item -d @var{offset}
! 200: Delete the history entry at position @var{offset}.
! 201: @var{offset} should be specified as it appears when the history is
! 202: displayed.
! 203:
! 204: @item -a
! 205: Append the new
! 206: history lines (history lines entered since the beginning of the
! 207: current Bash session) to the history file.
! 208:
! 209: @item -n
! 210: Append the history lines not already read from the history file
! 211: to the current history list. These are lines appended to the history
! 212: file since the beginning of the current Bash session.
! 213:
! 214: @item -r
! 215: Read the history file and append its contents to
! 216: the history list.
! 217:
! 218: @item -w
! 219: Write out the current history list to the history file.
! 220:
! 221: @item -p
! 222: Perform history substitution on the @var{arg}s and display the result
! 223: on the standard output, without storing the results in the history list.
! 224:
! 225: @item -s
! 226: The @var{arg}s are added to the end of
! 227: the history list as a single entry.
! 228:
! 229: @end table
! 230:
! 231: When any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is
! 232: used, if @var{filename}
! 233: is given, then it is used as the history file. If not, then
! 234: the value of the @env{HISTFILE} variable is used.
! 235:
! 236: @end table
! 237: @end ifset
! 238:
! 239: @node History Interaction
! 240: @section History Expansion
! 241: @cindex history expansion
! 242:
! 243: The History library provides a history expansion feature that is similar
! 244: to the history expansion provided by @code{csh}. This section
! 245: describes the syntax used to manipulate the history information.
! 246:
! 247: History expansions introduce words from the history list into
! 248: the input stream, making it easy to repeat commands, insert the
! 249: arguments to a previous command into the current input line, or
! 250: fix errors in previous commands quickly.
! 251:
! 252: History expansion takes place in two parts. The first is to determine
! 253: which line from the history list should be used during substitution.
! 254: The second is to select portions of that line for inclusion into the
! 255: current one. The line selected from the history is called the
! 256: @dfn{event}, and the portions of that line that are acted upon are
! 257: called @dfn{words}. Various @dfn{modifiers} are available to manipulate
! 258: the selected words. The line is broken into words in the same fashion
! 259: that Bash does, so that several words
! 260: surrounded by quotes are considered one word.
! 261: History expansions are introduced by the appearance of the
! 262: history expansion character, which is @samp{!} by default.
! 263: @ifset BashFeatures
! 264: Only @samp{\} and @samp{'} may be used to escape the history expansion
! 265: character.
! 266: @end ifset
! 267:
! 268: @ifset BashFeatures
! 269: Several shell options settable with the @code{shopt}
! 270: builtin (@pxref{Bash Builtins}) may be used to tailor
! 271: the behavior of history expansion. If the
! 272: @code{histverify} shell option is enabled, and Readline
! 273: is being used, history substitutions are not immediately passed to
! 274: the shell parser.
! 275: Instead, the expanded line is reloaded into the Readline
! 276: editing buffer for further modification.
! 277: If Readline is being used, and the @code{histreedit}
! 278: shell option is enabled, a failed history expansion will be
! 279: reloaded into the Readline editing buffer for correction.
! 280: The @option{-p} option to the @code{history} builtin command
! 281: may be used to see what a history expansion will do before using it.
! 282: The @option{-s} option to the @code{history} builtin may be used to
! 283: add commands to the end of the history list without actually executing
! 284: them, so that they are available for subsequent recall.
! 285: This is most useful in conjunction with Readline.
! 286:
! 287: The shell allows control of the various characters used by the
! 288: history expansion mechanism with the @code{histchars} variable,
! 289: as explained above (@pxref{Bash Variables}). The shell uses
! 290: the history comment character to mark history timestamps when
! 291: writing the history file.
! 292: @end ifset
! 293:
! 294: @menu
! 295: * Event Designators:: How to specify which history line to use.
! 296: * Word Designators:: Specifying which words are of interest.
! 297: * Modifiers:: Modifying the results of substitution.
! 298: @end menu
! 299:
! 300: @node Event Designators
! 301: @subsection Event Designators
! 302: @cindex event designators
! 303:
! 304: An event designator is a reference to a command line entry in the
! 305: history list.
! 306: Unless the reference is absolute, events are relative to the current
! 307: position in the history list.
! 308: @cindex history events
! 309:
! 310: @table @asis
! 311:
! 312: @item @code{!}
! 313: @ifset BashFeatures
! 314: Start a history substitution, except when followed by a space, tab,
! 315: the end of the line, @samp{=} or @samp{(} (when the
! 316: @code{extglob} shell option is enabled using the @code{shopt} builtin).
! 317: @end ifset
! 318: @ifclear BashFeatures
! 319: Start a history substitution, except when followed by a space, tab,
! 320: the end of the line, or @samp{=}.
! 321: @end ifclear
! 322:
! 323: @item @code{!@var{n}}
! 324: Refer to command line @var{n}.
! 325:
! 326: @item @code{!-@var{n}}
! 327: Refer to the command @var{n} lines back.
! 328:
! 329: @item @code{!!}
! 330: Refer to the previous command. This is a synonym for @samp{!-1}.
! 331:
! 332: @item @code{!@var{string}}
! 333: Refer to the most recent command
! 334: preceding the current position in the history list
! 335: starting with @var{string}.
! 336:
! 337: @item @code{!?@var{string}[?]}
! 338: Refer to the most recent command
! 339: preceding the current position in the history list
! 340: containing @var{string}.
! 341: The trailing
! 342: @samp{?} may be omitted if the @var{string} is followed immediately by
! 343: a newline.
! 344:
! 345: @item @code{^@var{string1}^@var{string2}^}
! 346: Quick Substitution. Repeat the last command, replacing @var{string1}
! 347: with @var{string2}. Equivalent to
! 348: @code{!!:s/@var{string1}/@var{string2}/}.
! 349:
! 350: @item @code{!#}
! 351: The entire command line typed so far.
! 352:
! 353: @end table
! 354:
! 355: @node Word Designators
! 356: @subsection Word Designators
! 357:
! 358: Word designators are used to select desired words from the event.
! 359: A @samp{:} separates the event specification from the word designator. It
! 360: may be omitted if the word designator begins with a @samp{^}, @samp{$},
! 361: @samp{*}, @samp{-}, or @samp{%}. Words are numbered from the beginning
! 362: of the line, with the first word being denoted by 0 (zero). Words are
! 363: inserted into the current line separated by single spaces.
! 364:
! 365: @need 0.75
! 366: For example,
! 367:
! 368: @table @code
! 369: @item !!
! 370: designates the preceding command. When you type this, the preceding
! 371: command is repeated in toto.
! 372:
! 373: @item !!:$
! 374: designates the last argument of the preceding command. This may be
! 375: shortened to @code{!$}.
! 376:
! 377: @item !fi:2
! 378: designates the second argument of the most recent command starting with
! 379: the letters @code{fi}.
! 380: @end table
! 381:
! 382: @need 0.75
! 383: Here are the word designators:
! 384:
! 385: @table @code
! 386:
! 387: @item 0 (zero)
! 388: The @code{0}th word. For many applications, this is the command word.
! 389:
! 390: @item @var{n}
! 391: The @var{n}th word.
! 392:
! 393: @item ^
! 394: The first argument; that is, word 1.
! 395:
! 396: @item $
! 397: The last argument.
! 398:
! 399: @item %
! 400: The word matched by the most recent @samp{?@var{string}?} search.
! 401:
! 402: @item @var{x}-@var{y}
! 403: A range of words; @samp{-@var{y}} abbreviates @samp{0-@var{y}}.
! 404:
! 405: @item *
! 406: All of the words, except the @code{0}th. This is a synonym for @samp{1-$}.
! 407: It is not an error to use @samp{*} if there is just one word in the event;
! 408: the empty string is returned in that case.
! 409:
! 410: @item @var{x}*
! 411: Abbreviates @samp{@var{x}-$}
! 412:
! 413: @item @var{x}-
! 414: Abbreviates @samp{@var{x}-$} like @samp{@var{x}*}, but omits the last word.
! 415:
! 416: @end table
! 417:
! 418: If a word designator is supplied without an event specification, the
! 419: previous command is used as the event.
! 420:
! 421: @node Modifiers
! 422: @subsection Modifiers
! 423:
! 424: After the optional word designator, you can add a sequence of one or more
! 425: of the following modifiers, each preceded by a @samp{:}.
! 426:
! 427: @table @code
! 428:
! 429: @item h
! 430: Remove a trailing pathname component, leaving only the head.
! 431:
! 432: @item t
! 433: Remove all leading pathname components, leaving the tail.
! 434:
! 435: @item r
! 436: Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving
! 437: the basename.
! 438:
! 439: @item e
! 440: Remove all but the trailing suffix.
! 441:
! 442: @item p
! 443: Print the new command but do not execute it.
! 444:
! 445: @ifset BashFeatures
! 446: @item q
! 447: Quote the substituted words, escaping further substitutions.
! 448:
! 449: @item x
! 450: Quote the substituted words as with @samp{q},
! 451: but break into words at spaces, tabs, and newlines.
! 452: @end ifset
! 453:
! 454: @item s/@var{old}/@var{new}/
! 455: Substitute @var{new} for the first occurrence of @var{old} in the
! 456: event line. Any delimiter may be used in place of @samp{/}.
! 457: The delimiter may be quoted in @var{old} and @var{new}
! 458: with a single backslash. If @samp{&} appears in @var{new},
! 459: it is replaced by @var{old}. A single backslash will quote
! 460: the @samp{&}. The final delimiter is optional if it is the last
! 461: character on the input line.
! 462:
! 463: @item &
! 464: Repeat the previous substitution.
! 465:
! 466: @item g
! 467: @itemx a
! 468: Cause changes to be applied over the entire event line. Used in
! 469: conjunction with @samp{s}, as in @code{gs/@var{old}/@var{new}/},
! 470: or with @samp{&}.
! 471:
! 472: @item G
! 473: Apply the following @samp{s} modifier once to each word in the event.
! 474:
! 475: @end table
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>