在 Powershell 控制台中使用 CTRL + D 退出并使用 CTRL + L 进行 cls

问题描述 投票:0回答:7

我正在努力做

CTRL + D - 退出 Powershell 控制台

CTRL + L - 清除屏幕

就像在 bash 中一样。

到目前为止,我已经看到我们可以定义

function ^D {exit}

但这意味着我必须按 CTRL+D 然后按 Enter 才能正常工作。

而且,它甚至不让我定义

function ^L {exit}

是否可以在默认 Powershell 控制台中添加这些按键绑定?

powershell keyboard-shortcuts
7个回答
92
投票

老问题,但对于 PowerShell 5.1 和 PowerShell Core 6.x 及更高版本:

Set-PSReadlineKeyHandler -Key ctrl+d -Function ViExit

49
投票

Powershell v3.0 有一个新库

PSReadline,可模拟 GNU Bash 选项卡补全和按键绑定。甚至用于反向增量搜索的 CTRL + R 也能工作。正是我想要的。


15
投票

如果您不介意依赖外部程序,您可以使用 AutoHotKey 执行以下操作:

#IfWinActive ahk_class ConsoleWindowClass
^L::SendInput , {Esc}cls{Enter}
^D::SendInput , {Esc}exit{Enter}
#IfWinActive

以上内容适用于 PowerShell 或 CMD 控制台。否则我唯一能想到的就是用

SetWindowsHookEx
来发挥一些 P/Invoke 魔法。

编辑:修复了 AutoHotkey 脚本以将快捷键传递给其他程序。


13
投票

按键绑定由 PSReadLine 控制。 PSReadLine 的默认编辑模式是 Windows 风格,其中 Ctrl-D 未绑定。

将编辑模式设置为 Emacs

Set-PSReadlineOption -EditMode Emacs

或绑定钥匙

Set-PSReadLineKeyHandler -Key 'Ctrl+d' -Function DeleteCharOrExit

7
投票

还有一个名为 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) }

6
投票

您可以将

PSReadline
设置为
emacs
模式,它不仅会以
^D
退出,您还可以使用
^A
转到行首,使用
^E

转到行尾

将其包含在您的个人资料中:

Set-PSReadlineOption -EditMode Emacs

我正在使用

cmder
,它使用
ConEmu
,找到
profile.ps1
<appdir>/vendor/
对于这种情况,您可以添加到该文件中。

否则,您可以添加到

powershell
加载它的默认位置。 这里有一个教程。


0
投票

Powershell 5.x 和 7.x

notepad $PROFILE

将行放在下面:

Set-PSReadlineKeyHandler -Key ctrl+d -Function ViExit
Set-PSReadlineKeyHandler -Key ctrl+l -Function ClearScreen

重新加载$PROFILE

. $PROFILE
© www.soinside.com 2019 - 2024. All rights reserved.