===== Command History and Recall ===== ==== Command History Keys: ==== |**UpArrow** |Recall the previous (or most recent) command, or the most recent command that matches a partial command line. | |**DownArrow** |Recall the next (or oldest) command, or the oldest command that matches a partial command line. | |**F3** |Fill in the rest of the command line from the previous command, beginning at the current cursor position. | |**Ctrl-D** |Delete the currently displayed history list entry, erase the command line, and display the previous (matching) history list entry. | |**Ctrl-E** |Display the last entry in the history list. | |**Ctrl-K** |Save the current command line in the history list without executing it, and then clear the command line. | |**Ctrl-Enter** |Copy the current command line to the end of the history list even it has not been altered, then execute it. | |**@** |As the first character in a line: Do not save the current line in the history list when it is executed, and do not store it in the [[en:docs:os2:cmd:cmdline|CMDLINE]] environment variable. | Use the **UpArrow** key repeatedly to scan back through the history list. When the desired command appears, press **Enter** to execute it again. After you have found a command, you can edit it before pressing **Enter**. The history list is normally "circular". If you move to the last command in the list and then press the down arrow one more time, you'll see the first command in the list. Similarly, if you move to the first command in the list and then press the up arrow one more time, you'll see the last command in the list. You can disable this feature and make command history recall stop at the beginning or end of the list by turning off the History Wrap selection on the Command Line 1 page of the [[en:docs:os2:cmd:internal:option|OPTION]] dialogs, or setting [[en:docs:os2:cmd:inI:directives:cfg:hist-wrap|Histwrap]] to No in the //.INI// file. You can search the command history list to find a previous command quickly using **command completion**. Just enter the first few characters of the command you want to find and press **UpArrow**. You only need to enter enough characters to identify the command that you want to find. If you press the **UpArrow** key a second time, you will see the previous command that matches. The system will beep if there are no matching commands. The search process stops as soon as you type one of the editing keys, whether or not the line is changed. At that point, the line you're viewing becomes the new line to match if you press **UpArrow** again. You can specify the size of the command history list with the [[en:docs:os2:cmd:internal:option|OPTION]] command, or with the [[en:docs:os2:cmd:cmdline:hist|History]] directive in the //.INI// file. When the list is full, the oldest commands are discarded to make room for new ones. You can also use the [[en:docs:os2:cmd:ini:directives:cfg:hist-min|HistMin]] directive in the .INI file to enable or disable history saves and to specify the shortest command line that will be saved. You can prevent any command line from being saved in the history by beginning it with an at sign [**@**]. When you execute a command from the history, that command remains in the history list in its original position. The command is not copied to the end of the list (unless you modify it). If you want each command to be copied or moved to the end of the list when it is re- executed, set [[en:docs:os2:cmd:ini:directives:cfg:hist-copy|HistCopy]] or [[en:docs:os2:cmd:ini:directives:cfg:hist-move|HistMove]] to **Yes** in //CMD.INI//. If you select either of these options, the list entry identified as "current" (the entry from which commands are retrieved when you press **UpArrow**) is also adjusted to refer to the end of the history list after each recalled command is executed. ==== Local and Global Command History ==== The command history can be stored in either a "local" or "global" list. With a local command history list, any changes made to the history will only affect the current copy of **CMD.EXE**. They will not be visible in other shells, or other sessions. With a global command history list, all copies of **CMD.EXE** will share the same command history, and any changes made to the history in one copy will affect all other copies. Global lists are the default for **CMD.EXE**. You can control the type of command history on the Startup page of the [[en:docs:os2:cmd:internal:option|OPTION]] dialogs, with the [[en:docs:os2:cmd:ini:directives:init:local-history|LocalHistory]] directive in the //.INI// file, or with the **/L** and **/LH** options of the [[en:docs:os2:cmd:internal:start|START]] command. There is no fixed rule for deciding whether to use a local or global command history list. Depending on your work style, you may find it most convenient to use one type, or a mixture of types in different sessions or shells. We recommend that you start with the default setting, then modify it if you find a situation where the default is not convenient. If you select a global history list for **CMD.EXE** you can share the history among all copies of **CMD.EXE** running in any session. When you close all **CMD.EXE** sessions, the memory for the global history list is released, and a new, empty history list is created the next time you start **CMD.EXE**. If you want the history list to be retained in memory even when no command processor session is running, execute the [[en:docs:os2:cmd:internal:shralias|SHRALIAS]] command, which loads a program to perform this service for the global command history, directory history, and alias lists. Whenever you start a secondary shell which uses a local history list, it inherits a copy of the command history from the previous shell. However, any changes to the history made in the secondary shell will affect only that shell. If you want changes made in a secondary shell to affect the previous shell, use a global history list in both shells.