bash命令历史编辑多行

bash命令历史编辑多行

多年来我一直使用ksh.我喜欢Esc v在命令历史记录中使用来调用编辑器“vi”的可能性。如果历史记录中的此命令分布在许多行中(例如由于 while 循环),“vi”也会显示此历史记录分布在许多行中。利用此功能,可以轻松编写复杂的语句,而无需将输入写入文件。

几年前我就变成了bash。它与默认快捷键Ctrl- X Ctrl-具有相同的可能性E。略有不同的是,bash将所有行合并为一个用分号分隔的长行。语法仍然正确,但我们失去了可读性。

所以我正在做的事情是,如果我看到命令变得复杂,我就会调用 ksh。

有没有一种方法可以配置bash为不合并历史记录行并按原样执行ksh

欢迎任何帮助。

答案1

使用:

shopt -s lithist

石质主义者
如果设置,并且CMDHIST启用选项后,多行命令将使用嵌入的换行符保存到历史记录中,而不是尽可能使用分号分隔符。

我怀疑默认情况下未启用此功能的原因是因为人们经常使用诸如history | grep something查找历史条目编号之类的命令。如果历史记录条目分为多行,则匹配的行grep并不总是包含条目编号。

答案2

我还想指出的是bash版本4从时间戳文件读取历史记录时不保留多行命令。

那就是你两者都有

shopt -s cmdhist
shopt -s lithist

并保存时间戳(因此命令具有时间戳分隔符)使用空字符串意味着“历史记录”的输出不会显示时间戳,但它是活动的。

HISTTIMEFORMAT=''

在 shell 启动时,或使用“history -r”bash 会将多行命令的每一行额外的行视为单独的历史记录条目!也就是说,在启动时,您会丢失所有多行历史记录。

这个问题在 bash 版本 5 中得到了修复,尽管我不确定修复“bug”的确切版本。

相关内容