我正在努力做
CTRL + D - 退出 Powershell 控制台
和
CTRL + L - 清除屏幕
就像在 bash 中一样。
到目前为止,我已经看到我们可以定义
function ^D {exit}
但这意味着我必须按 CTRL+D 然后按 Enter 才能正常工作。
而且,它甚至不让我定义
function ^L {exit}
是否可以在默认 Powershell 控制台中添加这些按键绑定?
老问题,但对于 PowerShell 5.1 和 PowerShell Core 6.x 及更高版本:
Set-PSReadlineKeyHandler -Key ctrl+d -Function ViExit
Powershell v3.0 有一个新库
PSReadline
,可模拟 GNU Bash 选项卡补全和按键绑定。甚至用于反向增量搜索的 CTRL + R 也能工作。正是我想要的。
如果您不介意依赖外部程序,您可以使用 AutoHotKey 执行以下操作:
#IfWinActive ahk_class ConsoleWindowClass
^L::SendInput , {Esc}cls{Enter}
^D::SendInput , {Esc}exit{Enter}
#IfWinActive
以上内容适用于 PowerShell 或 CMD 控制台。否则我唯一能想到的就是用
SetWindowsHookEx
来发挥一些 P/Invoke 魔法。
编辑:修复了 AutoHotkey 脚本以将快捷键传递给其他程序。
按键绑定由 PSReadLine 控制。 PSReadLine 的默认编辑模式是 Windows 风格,其中 Ctrl-D 未绑定。
将编辑模式设置为 Emacs
Set-PSReadlineOption -EditMode Emacs
或绑定钥匙
Set-PSReadLineKeyHandler -Key 'Ctrl+d' -Function DeleteCharOrExit
还有一个名为 PSEventing 的 PowerShell 管理单元,您可以使用它来执行此操作(请参阅首页上的演示:
http://pseventing.codeplex.com/releases/view/66587
# clear screen in response to ctrl+L, unix style
register-hotkeyevent "ctrl+L" -action { cls; write-host -nonewline (prompt) }
您可以将
PSReadline
设置为emacs
模式,它不仅会以^D
退出,您还可以使用^A
转到行首,使用^E
转到行尾
将其包含在您的个人资料中:
Set-PSReadlineOption -EditMode Emacs
我正在使用
cmder
,它使用 ConEmu
,找到 profile.ps1
和 <appdir>/vendor/
对于这种情况,您可以添加到该文件中。
否则,您可以添加到
powershell
加载它的默认位置。 这里有一个教程。
Powershell 5.x 和 7.x
notepad $PROFILE
将行放在下面:
Set-PSReadlineKeyHandler -Key ctrl+d -Function ViExit
Set-PSReadlineKeyHandler -Key ctrl+l -Function ClearScreen
重新加载$PROFILE
. $PROFILE