是否可以像在bash中一样使Powershell中的自动补全工作?


19

我喜欢Powershell,但是来自Linux的背景确实使我感到烦恼。例如,例如默认自动完成的工作方式。

例如:Get-PS扩展为“ Get-PSBreakpoint”,这是第一个匹配命令。在bash中,如果只有一个匹配的命令,bash将扩展为匹配的命令。如果有多个击键选项卡一次都不起作用,则双击选项卡将显示匹配命令的列表,但不会扩展。有没有办法让Powershell像这样表现?

还有另一件事,如果我写了一行,然后将标记移回较早的命令(标记在^所在的位置):

“ Get-PSS ^ | Remove-PSSession”将自动完成为“ Get-PSSession ^”,从而删除所有尾随命令。在bash中,尾随命令仍将不受影响。有没有办法使Powershell在自动完成时不删除尾随命令?

一个额外的好处是获得CTRL + L可以清除屏幕。CTRL + A转到行的开头,而CTRL + E转到行的末尾。


我发布了您问题的答案,但有趣的是,我到达此问题是因为我正在寻找完全相反的...我想在bash中完成PowerShell样式:)
Robert S Ciaccio 2010年

bash中提供了PowerShell样式完成功能-查找功能菜单完成功能
Jason Shirk,2013年

幸运的是,我们现在在Windows 10上有重击。
byxor

Answers:


12

查看PSReadline

从文章:

该模块替代了PowerShell.exe中的命令行编辑体验。它提供:

  • 语法着色
  • 简单语法错误通知
  • 良好的多行体验(包括编辑和历史记录)
  • 可自定义的键绑定
  • Cmd和emacs模式(尚未完全实现,但都可用)
  • 许多配置选项
  • Bash样式完成(在Cmd模式下为可选,在Emacs模式下为默认)
  • Bash / zsh样式交互式历史记录搜索(CTRL-R)
  • Emacs猛拉/杀死戒指
  • 基于PowerShell令牌的“单词”移动和杀死
  • 撤销重做
  • 自动保存历史记录,包括在实时会话中共享历史记录
  • 通过Ctrl + Space进行“菜单”补全(类似于Intellisense,选择带有箭头的补全)

我每天都用它!


4
安装PSReadLine之后,您必须通过将bash样式的制表符完成功能添加到您的配置文件中来进行以下操作:Set-PSReadlineKeyHandler -Key Tab -Function Complete
brianpeiris 2016年

3
现在在Windows 10上默认安装 PSReadLine 。只需将@brianpeiris提到的配置行放入您的配置文件中,就可以了。
唐•克鲁克申克

尝试使用CompleteMenu代替Complete以获得更像bash的体验,它使您可以使用箭头键导航选择
stib

3

也许您应该看看Powertab,这是一个可自定义的PowerShell Tab扩展。


2
谢谢!Powertab确实使选项卡扩展方式更好。仍然存在在命令末尾完成某些操作的问题。
彼得·莫伯格

2

嗨,彼得,只需按F8键即可进行速度搜索。它以您先前运行的命令完成,这些命令从该行中的内容开始。删除尾随的问题很烦人,我在Connect中针对同一问题提出了建议。在大多数情况下,您可以使用Powershell ISE,其表现会更好一些(请不要删除结尾字符)。


2

旧的command.exe子系统仍包含在PowerShell中,并强制执行许多不愉快的行为。但是从PowerShell v3开始,GUI(PowerShell ISE)现在可用,并且包括更现代的完成体验+着色。

在此处输入图片说明


2

PowerShell使用与古老的命令提示符相同的控制台功能;因此您拥有通常的Home / End,并且:

  • F3 调出上一个命令
  • F1 复制上一个命令中的单个字符
  • F7 弹出历史记录窗口

...但是据我所知,没有设施显示所有可能的完成情况。


与好的旧bash相比,这仍然是非常有限的。例如,能够在bash中键入ctrl + r(speedsearch)并开始输入非常好,并且会显示匹配的先前命令。
彼得·莫伯格

1

常规的powershell使用cmd作为命令提示符窗口。这就是为什么它具有巨大的遗产(程序会随着年龄的增长继续使用旧cmd的行为),但由于向后可比性而无法更改。

我建议您使用powershell_ise而不是powershell(它包含在标准powershell软件包中)。3.0版(不确定以前的版本)从包装盒中就支持Intellisense。这与bash完成样式非常接近。只需按Ctrl + Space而不是Tab。我在PowerTab上自定义补全遇到问题,但是Intellisense可以很好地工作。Powershell_ise还保留尾随命令,具有正常的选择模式,支持Ctrl + C,Ctrl + V,Ctrl + A来选择输入的命令,因此Ctrl + A跳至行首Ctrl + A,直到结尾(或Home) /结束)。


0

PowerShell使用自己的解析器来获取命令,因此从某种意义上说,它是与cmd.exe不同的外壳,即使它们共享同一终端(GUI窗口)。

由于存在这种差异,PowerShell允许您使用自己的功能来覆盖制表符完成功能。我还没有时间自己弄这个,但是您基本上可以tabexpansion在配置文件中覆盖该功能,就像您可以覆盖该prompt功能一样。

我发现了Lee Holmes(令人敬畏的Windows PowerShell Cookbook的作者)撰写的这篇文章该文章描述了一个tabexpansion覆盖,它与您要查找的内容非常相似。您可能会对其进行调整,以提供所需的确切信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.