6

我尝试使用命令加载我的 PowerShell 历史记录

Import-Clixml ~\history.clixml | Add-History

在我的 $profile 中。

我还编写了一个自定义退出函数来保存它们:

function global:xx 
{
  Get-History | Export-Clixml ~\history.clixml
  exit
}

我键入“xx”退出 PowerShell,然后重新启动 PowerShell。虽然它加载我history.clixml没有任何错误,但当我单击向上箭头键时,我没有看到任何命令显示。这个键通常可以让我从我的命令历史中访问我以前的命令。

4

4 回答 4

12

我以前研究过这个,这是不可能的。使用向上箭头和功能键访问的缓冲区(例如使用F8完成以及按F7时看到的列表)是按会话进行的,无法修改。

但是,要快速访问历史记录中的命令,包括使用Add-History 添加的命令,您可以键入#后跟一个模式,然后按[TAB]循环浏览历史记录中与该模式匹配的所有命令。例如,#dsquery[TAB]将扩展到历史中包含“dsquery”的最新命令,并且多次点击[TAB]将向后循环通过包含“dsquery”的任何其他命令。

模式的匹配方式由TabExpansion函数确定。默认情况下,制表符扩展历史条目最适用于命令中的字母字符串,没有符号或空格。您可以通过输入来检查函数的代码$function:TabExpansion。如果需要,您可以通过定义自己的TabExpansion函数来修改选项卡扩展的行为。但是,除非您真的确定自己知道自己在做什么,否则我建议您调整现有代码而不是从头开始,因为您可能会破坏其他功能,因为TabExpansion函数会影响提示符下的所有选项卡完成,例如作为制表符完成命令或路径。

于 2013-07-25T17:18:59.917 回答
3

添加更多细节:

每个 PowerShell 主机做的一些事情都略有不同。虽然 PowerShell 本身有一个历史缓冲区的概念,但每个环境中的向上/向下箭头使用它们自己的内部历史,而不是全局历史。从理论上讲,微软没有理由不修复主机中处理历史的方式来关注它(我会直接建议)。不幸的是,要做到这一点的更改将需要几年的时间,所以你现在有点卡住了。

在经历了同样的历史痛苦之后,我在IsePackV2中添加了一个冰柱来直观地探索历史。只需按 F7,侧边栏窗格就会显示真实的历史缓冲区。

于 2013-07-25T20:16:51.440 回答
1

在过去,我只是将每个会话的历史记录保存到一个唯一命名的历史文件中。然后我创建了一个配置文件函数,该函数采用一个模式,然后在所有这些历史文件中搜索匹配并打印出来的命令行。

它不如向上箭头 (F7) 甚至 Invoke-History 或 #get-chi 方便。然而,它也不会让我的启动陷入困境,加载历史会随着时间的推移而变得相当大。

于 2013-07-26T06:10:35.843 回答
0

在 PowerShell 3 或更高版本中,这可以在 PSReadline 的帮助下实现,您可以在此处阅读。

该模块完全符合您的要求 - 它将您的历史记录加载到其内部历史记录中,因此向上/向下箭头与以前会话的历史记录一起使用。

于 2013-09-20T00:36:20.390 回答