自定义上下键以匹配 cmd(时间点)功能

自定义上下键以匹配 cmd(时间点)功能

如何自定义 Bash 使得上下键与 cmd 中的相同?

例如

$echo command1
$echo command2
$echo command3
$echo command4

在 Bash 和 cmd 中,按, , ,ENTER将运行echo command2

但是,随后按下 cmd 中的向下键将直接转到后面的命令,即echo command3。按下 Bash 中的向下键不执行任何操作。cmd 保留时间点历史记录(类似于 Web 浏览器中的后退和前进按钮),但 Bash 不保留。

与 cmd 类似,在 cmd 中按两次向上键将返回echo command1,而在 Bash 中执行此操作将返回echo command3

很多时候,我希望删除之前按顺序输入的一系列命令。cmd 非常方便,我可以通过历史记录回滚到序列中的第一个命令,然后,,,,,,...ENTERENTERENTER

但是我在 Bash 中找不到类似的方法。是否可以以~/.inputrc某种方式修改或修改其他文件来实现这一点?

答案1

虽然我个人不想这样做,因为我已经习惯了 bash 历史,但我能理解为什么人们会想这样做。我以前为一位同事研究过这个问题,他是 *nix 的新手,想在 xterm 中使用类似 DOS 的功能,但当时和现在一样,似乎没有解决方案。

我刚刚又进行了一次广泛的搜索,除了以下之外,没有发现任何明显的东西:

奇怪的是,有很多方法可以让 cmd 更像 bash,例如,Windows 命令提示符的类似 Bash 历史记录的功能,但不幸的是而不是相反

主要问题是,简单地说,光标键功能(以及它如何与历史记录交互)内置于 Bash 源代码中,而脚本、别名和 shell 函数无法覆盖这一事实1。你需要的是重写bash,具有内置的不同 [可切换?] 光标键功能,如果你愿意的话,可以说是一种“DOSBash”。

也许存在满足某个利基市场的机会,并且最终会有人满足这一需求,但我不会指望你能做到。


1如果我错了,而且可以通过简单的资源文件更改来覆盖光标键功能,那么如果有人能纠正我,我会很高兴。

答案2

我使用的技巧就是简单地重复相同数量的

$ echo command1
$ echo command2
$ echo command3
$ echo command4

echo command 2如果我想重复从到的序列echo command4,我只需点击3次即可到达echo command2,然后再点击3次即可到达echo command3并再点击3次即可echo command4

因此,如果您通过点击 N 次返回了历史记录中的 N 个项目,则再次点击 N 次将使您每次都进入下一个命令,因为您运行的新命令已被插入。

相关内容