2.4.5 操作历史的命令

Octave 通常会跟踪您输入的命令,以便您可以调用先前的命令进行编辑或重新执行。当您退出 Octave 时,您输入的最新命令(最多为 history_size 变量指定的数量)会保存到一个文件中。当 Octave 启动时,它会从变量 history_file 所指定的文件中加载一个初始命令列表。

以下是用于浏览和搜索历史列表的简单命令。

LFD
RET

无论光标在何处,都接受当前行。如果该行非空,则将其添加到历史列表中。如果该行是一条历史行,则将其恢复到原始状态。

C-p

在历史列表中向上移动。

C-n

在历史列表中向下移动。

M-<

移动到历史记录的第一行。

M->

移动到输入历史的末尾,即您正在输入的那一行!

C-r

从当前行开始向后搜索,并根据需要在历史中向上移动。这是一个增量搜索。

C-s

从当前行开始向前搜索,并根据需要在历史中向下移动。

在大多数终端上,您也可以使用向上和向下箭头键代替 C-pC-n 在历史列表中移动。

除了用键盘命令在历史列表中移动之外,Octave 还提供了三个函数,用于查看、编辑和重新运行历史列表中的命令块。

 
history
history opt1
H = history ()
H = history (opt1, …)

如果不带参数调用,history 会显示您已执行的命令列表。

有效的选项有:

n
-n

仅显示最近的 n 行历史记录。

-c

清除历史记录列表。

-q

不要对显示的历史行进行编号。这对于使用 X Window 系统进行剪切和粘贴命令非常有用。

-r file

读取文件 file,将其内容追加到当前历史记录列表中。如果省略文件名,则使用默认的历史文件(参见 history_file)。

-w file

将当前历史记录写入文件 file。如果省略文件名,则使用默认的历史文件(参见 history_file)。

例如,要显示您键入的最新的五个命令而不显示行号,请使用命令 history -q 5

如果使用单个输出参数调用,历史记录将保存到该参数(作为元胞字符串)中,而不会输出到屏幕。

另请参阅: edit_historyrun_historyhistory_filehistory_save

 
edit_history
edit_history cmd_number
edit_history first last

使用由变量 EDITOR 指定的编辑器来编辑历史记录列表。

要编辑的命令首先会被复制到一个临时文件中。当您退出编辑器时,Octave 会执行保留在文件中的命令。通常,使用 edit_history 来定义函数比直接在命令行上输入要更方便。一旦您退出编辑器,命令块就会立即执行。要避免执行任何命令,只需在离开编辑器之前从缓冲区中删除所有行即可。

当不传参调用时,编辑之前执行的命令;传入一个参数时,编辑指定的命令 cmd_number;传入两个参数时,编辑 firstlast 之间的命令列表。命令编号也可以是负数,其中 -1 表示最近执行的命令。以下命令等价,都用于编辑最近执行的命令。

edit_history
edit_history -1

使用范围时,如果为第一个命令指定的编号大于最后一个命令的编号,则会将命令列表反转后再放入要编辑的缓冲区。

另请参阅: run_historyhistory

 
run_history
run_history cmd_number
run_history first last

从历史记录列表中运行命令。

当不传参调用时,运行之前执行的命令;

传入一个参数时,运行指定的命令 cmd_number

传入两个参数时,运行 firstlast 之间的命令列表。命令编号也可以是负数,其中 -1 表示最近执行的命令。例如,命令

run_history
     OR
run_history -1

会再次执行最近的命令。命令

run_history 13 169

执行第 13 到第 169 条命令。

如果为第一个命令指定的编号大于最后一个命令的编号,则会在执行命令之前反转命令列表。例如:

disp (1)
disp (2)
run_history -1 -2
⇒ 
 2
 1

另请参阅: edit_historyhistory

Octave 还允许您自定义历史记录保存的时间、位置和方式等细节。

 
val = history_save ()
old_val = history_save (new_val)
old_val = history_save (new_val, "local")

查询或设置内部变量,该变量控制是否将在命令行中输入的命令保存到历史文件中。

当在函数内部以 "local" 选项调用时,该变量会局部更改,仅对该函数及其调用的任何子程序生效。退出函数时恢复原始变量值。

另请参阅: history_controlhistory_filehistory_sizehistory_timestamp_format_string

 
val = history_control ()
old_val = history_control (new_val)

查询或设置用于指定如何将命令保存到历史记录列表的内部变量。

默认值为空字符串,但可能被 OCTAVE_HISTCONTROL 环境变量覆盖。

history_control 的值是一个冒号分隔的值列表,控制命令在历史记录列表中的保存方式。 如果值列表包含 ignorespace,则以空格字符开头的行不会保存到历史记录列表中。 如果值列表包含 ignoredups,则与前一条历史记录条目匹配的行不会被保存。 ignorebothignorespaceignoredups 的简写。 如果值列表包含 erasedups,则在保存当前行之前,会从历史记录列表中删除所有与当前行匹配的先前行。 任何不在上述列表中的值都将被忽略。 如果 history_control 是空字符串,则所有命令都保存到历史记录列表中, 但还受 history_save 的值的约束。

另请参阅: history_filehistory_sizehistory_timestamp_format_stringhistory_save

 
val = history_file ()
old_val = history_file (new_val)

查询或设置内部变量,该变量指定用于存储命令历史记录的文件名。

在当前 Octave 会话期间发出的所有后续命令都将写入这个新文件(如果当前 history_save 的设置允许的话)。

默认值为 $DATA/octave/history,其中 $DATA 是平台相关的(漫游)用户数据文件位置(例如,$XDG_DATA_HOME,如果未设置,在类 Unix 操作系统上为 ~/.local/share,在 Windows 上为 %APPDATA%)。默认值可能被 OCTAVE_HISTFILE 环境变量覆盖。

编程说明:

如果您想永久更改 Octave 历史文件的位置,则需要在每个新的 Octave 会话中执行 history_file 命令。这可以通过使用 Octave 的 .octaverc 启动文件来实现。

如果您还想从这个不同的历史文件中读取过去 Octave 会话的已保存历史命令,则需要在设置历史文件的新值之后使用额外的命令 history -r。Octave 启动文件中执行此操作的示例代码可能如下所示:

history_file ("~/new/.octave_hist");
if (exist (history_file ()))
  history ("-r", history_file());
endif

另请参阅: historyhistory_controlhistory_savehistory_sizehistory_timestamp_format_string

 
val = history_size ()
old_val = history_size (new_val)

查询或设置内部变量,该变量指定要保存在历史文件中的记录数量。

默认值为 1000,但可能被 OCTAVE_HISTSIZE 环境变量覆盖。

另请参阅: history_filehistory_timestamp_format_stringhistory_save

 
val = history_timestamp_format_string ()
old_val = history_timestamp_format_string (new_val)
old_val = history_timestamp_format_string (new_val, "local")

查询或设置内部变量,该变量指定 Octave 退出时写入历史文件的注释行的格式字符串。

格式字符串被传递给 strftime。默认值为

"# Octave VERSION, %a %b %d %H:%M:%S %Y %Z"

当在函数内部以 "local" 选项调用时,该变量会局部更改,仅对该函数及其调用的任何子程序生效。退出函数时恢复原始变量值。

另请参阅: strftimehistory_filehistory_sizehistory_save

 
val = EDITOR ()
old_val = EDITOR (new_val)
old_val = EDITOR (new_val, "local")

查询或设置内部变量,该变量在使用 CLI 时指定默认文本编辑器。

默认值取自 Octave 启动时的 EDITOR 环境变量。如果该环境变量未初始化,则 EDITOR 将设置为 "emacs"

注意: 此设置在运行 CLI 时生效。使用 Octave GUI 时,默认编辑器在"首选项"的"编辑器"选项卡中指定。

当在函数内部以 "local" 选项调用时,该变量会局部更改,仅对该函数及其调用的任何子程序生效。退出函数时恢复原始变量值。

另请参阅: editedit_history


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2