0

我想知道是否有人注意到在 PowerShell 中安装 PSReadLine 模块似乎破坏了它必须允许我们使用向上箭头查找并执行上一个命令(Windows 命令Prompt 也有这个能力)。

如果我们只是向上箭头并且不执行任何操作,向下箭头可以正常工作 - 但是如果我们向上箭头说 3 个命令并执行它,那么之后的向下箭头不会像我预期的那样产生命令 #2 和 #1,而是它就像我们已经在历史缓冲区的末尾一样。好像我们的“历史位置”在使用向上箭头执行上一个命令后不再保存。

通过一些测试,我设法将其追踪到 PSReadLine 作为罪魁祸首。当我从会话中删除此模块时,上述功能可以正常工作。

这在 Windows 10 v20H2、PSv5.1 上重现(以及许多其他操作系统版本一直追溯到 Win7 SP1,以及其他 PS 版本直至/包括 PSv7.1)。问题肯定似乎与模块有关。

通过搜索,我只找到了另一个提到这一点的线程:

https://powershell.org/forums/topic/posh-v5-console-history-down-arrow-not-working-after-previous-command-entered/

...但没有解决方案。我有点惊讶没有更多关于这方面的内容。

有谁知道是什么原因造成的?我可以在 PSReadLine 中更改一些配置以恢复旧行为吗?

任何帮助深表感谢!

4

1 回答 1

0

最简单的解决方法是暂时禁用 PSReadLine Remove-Module PSReadLine。然后,您可以使用 重新启用它Install-Module PSReadLine

这对我来说感觉像是一个有意的设计选择,但您应该考虑在 PSReadLine 的 GitHub 上将其报告为问题:https ://github.com/PowerShell/PSReadLine 。提供您看到的行为和您期望的行为的明确的逐步可重现序列。我的猜测是他们选择在其他 shell 的行为之后对 PSReadLine 进行建模,所以我不希望得到很大的吸引力。不管怎样,你可能会得到一个解释。

于 2021-02-10T22:46:24.907 回答