【问题标题】:How to make PowerShell tab completion work like Bash如何使 PowerShell 选项卡完成像 Bash 一样工作
【发布时间】:2011-11-25 03:46:43
【问题描述】:

假设我的当前目录中有以下文件:

buildBar.bat
buildFoo.bat
buildHouse.bat

然后我在命令提示符下输入以下内容,./bu,然后是 TAB

  • 在 Bash 中,它被扩展为 ./build

  • 在 PowerShell 中,它被扩展为 ./buildBar.bat——列表中的第一项。

  • 在 Cmd 中,行为与 PowerShell 相同。

我更喜欢 Bash 行为 - 有没有办法让 PowerShell 像 Bash 一样工作?

【问题讨论】:

  • 是的 - 这就是我过去十年左右一直在做的事情,但我正在尝试过渡到 PowerShell,因为我希望能够在除系统以外的系统上运行命令行我自己的,没有安装 Cygwin。

标签: powershell cmd tab-completion


【解决方案1】:

新版本的 PowerShell 包括 PSReadline,可用于执行此操作:

Set-PSReadlineKeyHandler -Key Tab -Function Complete

要使其永久化,请将此命令放入 C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1。

【讨论】:

  • MenuComplete 而不是 Complete 更像 bash,它允许您使用箭头键从可用选项中进行选择
  • 顺便说一句,如果您的机器上不存在profile.ps1文件,您可以使用命令new-item $profile -itemtype file -force生成一个
  • 很可能你的机器没有C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1.你实际需要运行new-item $profile -itemtype file -force
  • touch 的拼写真的很不方便 :-(
  • 不需要生成新的配置文件,你不能只做notepad $profile 并保存它吗?它会抱怨它不存在,但保存文件后会很好。
【解决方案2】:

现在可以使用 PSReadline 让 PowerShell 执行 Bash 样式的补全。

查看博文Bash-like tab completion in PowerShell

【讨论】:

【解决方案3】:

tab 仅完成命令名称,而不是其先前的参数/参数。

要使用历史记录中的参数自动完成完整的命令,请设置以下键绑定。

Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward

现在,键入命令名称的几个字符并使用向上/向下箭头从历史记录中自动完成此命令(带参数)。

实时节省。


查看更多:Power up your PowerShell

【讨论】:

  • 这个解决方案最适合我
【解决方案4】:

看看这里,不是你真正需要的:

PowerTab

但我认为是PowerShell控制台最好的标签扩展功能!!!

【讨论】:

  • 有趣。如果有办法做类似的事情,那么似乎很有可能让扩展像在 bash 中一样工作。不过,我远不是 PowerShell 方面的专家,所以可能会遗漏一些东西。
  • 当然!开始研究 PowerTab 模块的代码以尝试满足您的扩展需求。但 PowerTab 以简单的选择方式为几乎所有命令、wmi、comobject、程序集提供了扩展!
【解决方案5】:
# keep or reset to powershell default
Set-PSReadlineKeyHandler -Key Shift+Tab -Function TabCompletePrevious

# define Ctrl+Tab like default Tab behavior
Set-PSReadlineKeyHandler -Key Ctrl+Tab -Function TabCompleteNext

# define Tab like bash
Set-PSReadlineKeyHandler -Key Tab -Function Complete

【讨论】:

    【解决方案6】:

    修改 TabExpansion 函数来实现你想要的。请记住,如果您再次按 Tab 键,新建议可能会从您最初按键的位置修改,可能会完成到最后。我非常喜欢实际的行为,我希望尽可能快地写出这行代码。最后别忘了通配符扩展,例如:bu*h[Tab] 自动补全到buildHouse.bat

    【讨论】:

    • 修改 TabExpansion 函数可能是要走的路,但仍然比我想要的要复杂得多。我认为我需要在 powershell 中变得更加流利,然后才能搞砸。
    【解决方案7】:

    使用 Powershell Core,我们可以将 PSReadLine 的 PredictionSource 属性设置为 History 以获取自动建议。有关详细信息,请参阅 YouTube 视频 https://youtu.be/I0iIZe0dUNw

    【讨论】:

      【解决方案8】:

      实际上,bash 行为由 /etc/inputrc 控制,不同发行版的差异很大。

      以下是如何使 PowerShell 的行为更像是具有合理默认值的 bash(Gentoo、CentOS)

      # Press tab key to get a list of possible completions (also on Ctrl+Space)
      
      Set-PSReadlineKeyHandler -Chord Tab -Function PossibleCompletions
      
      
      # Search history based on input on PageUp/PageDown
      
      Set-PSReadlineKeyHandler -Key PageUp -Function  HistorySearchBackward
      Set-PSReadlineKeyHandler -Key PageDown -Function HistorySearchForward
      
      
      # If you feel cursor should be at the end of the line after pressing PageUp/PageDown (saving you an End press), you may add:
      
      Set-PSReadLineOption -HistorySearchCursorMovesToEnd
      
      # Set-PSReadLineOption -HistorySearchCursorMovesToEnd:$False to remove
      

      【讨论】:

        猜你喜欢
        • 2011-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-12
        • 2011-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多