是否可以为 Powershell 添加键盘快捷键?

mik*_*ana 4 powershell keyboard-shortcuts

在使用了几十年的 bash 之后,我已经切换到 Powershell,并且在对我的配置文件进行了一些配置(并添加 PSCX、openssl 和一些其他工具)之后,我总体上很满意。

我在 bash 中怀念的一件事是:

mkdir some-very-long-dir-name
cd (hit ESC then hit _ on the keyboard)
Run Code Online (Sandbox Code Playgroud)

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

是否可以向 powershell 添加键盘快捷键?如何?

如果重要的话,我正在使用 ConEmu 作为我的终端。

mik*_*ana 6

简短回答:

\n\n
 Set-PSReadlineKeyHandler -Key \'Escape,_\' -Function YankLastArg\n
Run Code Online (Sandbox Code Playgroud)\n\n

更长的解释:

\n\n

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

\n\n

尽管vibash 是每个 Linux 发行版上的默认编辑器,但它的默认编辑模式是emacs编辑模式。来自bash 文档

\n\n
\n

为了在 emacs 和 vi 编辑模式之间交互切换,请使用 \xe2\x80\x98set -o emacs\xe2\x80\x99 和 \xe2\x80\x98set -o vi\xe2\x80\x99 命令(请参阅设置内置)。Readline 默认为 emacs 模式。

\n
\n\n

这意味着“转义下划线”来自 emacs。

\n\n

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

\n\n
\n

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

\n
\n\n

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

\n\n
get-PSReadlineOption\n
Run Code Online (Sandbox Code Playgroud)\n\n

返回:

\n\n
EditMode                               : Vi\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以有两种解决方案:

\n\n

解决方案1:更改模式

\n\n
Set-PSReadlineOption -EditMode Emacs\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
Escape,_         YankLastArg                   Copy the text of the last argument to the input\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

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

\n\n
 Set-PSReadlineKeyHandler -Key \'Escape,_\' -Function YankLastArg\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n