gpt4 book ai didi

powershell - 为什么 'invoke-history' 卡在 powershell 中?

转载 作者:行者123 更新时间:2023-12-03 00:57:11 25 4
gpt4 key购买 nike

如果我的最后一个命令类似于“dir”,那么调用历史似乎可以正常工作。如果我的最后一个命令类似于 'vim $profile',invoke-history 将显示命令并挂起。有没有什么办法解决这一问题?我在 powershell 中的很多工作都涉及编辑脚本然后运行它......这正在成为一个大问题。

最佳答案

它看起来像 从 Windows PowerShell 5.1/PowerShell [Core] 7.0 开始的错误:vim 等程序依赖于能够直接打印到终端(控制台),而无需 PowerShell 作为中介。

  • 通过直接调用,这可以按预期工作。
  • 通过 Invoke-History 调用, PowerShell 似乎确实插入到 vim 之间和终端,它使 vim故障:
  • 错误 Invoke-History: Vim: Warning: Output is not to a terminal被发射。
  • vim UI 不出现,即使 vim正在运行,您可以键入 :q 就证明了这一点。然后按 Enter 退出。


  • 该错误已在 this GitHub issue 中报告。 .

    解决方法 :
    你可以自己动手 Invoke-History 放置在您的 $PROFILE 中的函数文件,它从历史记录中手动检索并执行上一个命令:
    function Invoke-History {
    [CmdletBinding(SupportsShouldProcess)]
    param(
    [string] $Id = (Get-History -Count 1).Id
    )
    $cmd = if ($Id -as [long]) {
    (Get-History -ErrorAction Stop -Id $Id).CommandLine
    } else {
    (Get-History).Where({ $_.CommandLine.TrimStart() -match ('^' + [regex]::Escape($Id)) }, 'Last').CommandLine
    }
    if (-not $cmd) { Throw "Cannot locate the history for command line $Id" }
    if ($PSCmdlet.ShouldProcess($cmd)) {
    # Note: Invoke-Expression is safe to use here, but
    # should generally be avoided.
    Invoke-Expression $cmd
    }
    }
    注意:内置 rihy别名将自动调用自定义函数而不是 cmdlet,因为函数具有比 cmdlet 更高的命令查找优先级。

    或者,使用 执行历史命令的其他方式 :
  • 使用向上箭头键在命令历史记录中向后导航(向下箭头再次向前导航)。
  • 输入 #然后是以下之一:
  • 立即键入前一个命令的一部分 - 不要在 # 之后添加空格- 然后按 Tab 键循环显示匹配的命令。
  • 不幸的是,您无法通过这种方式调用赋值或表达式,例如 $foo = ...21 *2 .

  • 立即输入命令的编号(Id)重新执行,如Get-History所示,然后按 Tab 键显示该命令。
  • 按 Enter 提交显示的命令。

  • 使用PSReadLineReverseSearchHistory函数,默认绑定(bind)到组合键 Ctrl-R:
  • 按下组合键并键入上一条命令的一部分:将自动显示最近匹配的命令;重复按组合键可循环显示所有匹配的命令。
  • 按 Enter 提交显示的命令,或按 Tab 首先对其进行编辑。


  • Mike 致敬寻求他的帮助。
    注意:从 PowerShell 7.2 开始,只有 PSReadLine方法基于后者的持久跨 session 历史; #方法只知道来自当前 session 的命令。

    关于powershell - 为什么 'invoke-history' 卡在 powershell 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61191295/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com