【问题标题】:Is it possible to add a keyboard shortcut to Powershell?是否可以在 Powershell 中添加键盘快捷键?
【发布时间】:2017-11-04 03:04:47
【问题描述】:

经过几十年的 bash,我已经切换到 Powershell,并且在配置了我的个人资料(并添加了 PSCX、openssl 和一些其他工具)之后,我总体上很满意。

我错过了 bash 的一件事:

mkdir some-very-long-dir-name
cd (hit ESC then hit _ on the keyboard)

Escape 下划线是 bash 表示“上一个命令的最后一项”。它非常有用 - 在这个追逐中,我不必输入很长的目录名称。

是否可以在 powershell 中添加键盘快捷键?怎么样?

如果这很重要,我将使用 ConEmu 作为我的终端。

【问题讨论】:

  • 您的示例如何转换为键盘快捷键? PS 中有自动变量用于执行类似的操作 $$ 用于最后一个命令,$? 用于最后返回等。
  • 使用 PSReadline? github.com/lzybkr/PSReadLine
  • @TheIncorrigible1 您应该添加使用$$ 作为答案的建议
  • @MathiasR.Jessen 我觉得他要求的是不同的东西,他的例子不是很好。
  • 如果这是您的用例,我还没有找到在本机 PowerShell 控制台中复制该功能的方法。您也许可以在ConEmu 中复制?或者,深入了解PSReadLine,因为这是添加自定义的控制台的主要补充。

标签: powershell keyboard-shortcuts


【解决方案1】:

简答:

 Set-PSReadlineKeyHandler -Key 'Escape,_' -Function YankLastArg

更长的解释:

感谢 @davidbrabant 和 @TheIncorrigible1 指出 PSReadLine:这不是答案本身,但了解 PSReadLine 的工作原理是解决此问题的关键。

虽然vi是每个Linux发行版的默认编辑器,bash的默认编辑模式是emacs。来自the bash docs

为了在 emacs 和 vi 编辑模式之间进行交互切换,请使用“set -o emacs”和“set -o vi”命令(请参阅 Set Builtin)。 Readline 默认为 emacs 模式。

这意味着'escape underscore'来自emacs。

奇怪的是,PSReadLine 与 bash 不同,默认情况下不使用 emacs 模式。来自the PSREADLine docs

要使用 Emacs 键绑定,您可以使用: Set-PSReadlineOption -EditMode Emacs

这不是很明确,但这意味着另一种模式是默认的。确认,运行:

get-PSReadlineOption

返回:

EditMode                               : Vi

所以有两种解决方案:

方案一:改变模式

Set-PSReadlineOption -EditMode Emacs

你可以看到Get-PSReadlineKeyHandler的效果包括标准的转义下划线快捷方式:

Escape,_         YankLastArg                   Copy the text of the last argument to the input

现在可以使用转义下划线。

解决方案 2:将快捷方式添加到现有模式

除了改变模式(事实证明我喜欢 vi 键绑定!),你还可以运行:

 Set-PSReadlineKeyHandler -Key 'Escape,_' -Function YankLastArg

将其添加到您现有的模式中。

【讨论】:

    【解决方案2】:

    ESC+_ 解决方案的替代方案是,PowerShell 自动变量 $$ 包含相同的信息,无需 PSReadLine(v5.0 之前或未安装模块)。

    PS C:\> Get-ChildItem -Path 'C:\'
    
    ...
    
    PS C:\> $$
    
    C:\
    

    您还可以捕获与$^ 变量一起使用的命令:

    PS C:\> $^
    
    get-childitem
    

    【讨论】:

    • 赞成,因为这对于需要快速“从上次的最后一个项目”的人来说很有用。唉,我有 20 年的时间在我的手指中输入“转义下划线”,我怀疑其他一些 bash -> powershell 用户也有同样的情况!
    猜你喜欢
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多