我正在尝试制作
CTRL + D - 退出Powershell控制台
和
CTRL + L - 清除屏幕
就像在bash中一样。
到目前为止,我已经看到我们可以定义
function ^D {exit}
但这意味着我必须按CTRL + D然后按Enter键才能正常工作。
此外,它甚至没有让我定义
function ^L {exit}
无论如何都要在默认的Powershell控制台中添加这些键绑定吗?
答案 0 :(得分:28)
有一个新的库PSReadline
for Powershell v3.0可以模拟GNU Bash选项卡的完成和键绑定。甚至 CTRL + R 用于反向增量搜索。正是我想要的。
答案 1 :(得分:14)
如果您不介意依赖外部程序,可以使用AutoHotKey执行以下操作:
#IfWinActive ahk_class ConsoleWindowClass
^L::SendInput , {Esc}cls{Enter}
^D::SendInput , {Esc}exit{Enter}
#IfWinActive
以上内容适用于PowerShell或CMD控制台。否则,我唯一能想到的就是用SetWindowsHookEx
处理一些P / Invoke魔法。
编辑:修正了AutoHotkey脚本,将快捷键传递给其他程序。
答案 2 :(得分: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) }
答案 3 :(得分:6)
旧问题,但使用PowerShell 5.1和PowerShell Core 6.x:
Set-PSReadlineKeyHandler -Key ctrl+d -Function ViExit
答案 4 :(得分:2)
这些键绑定由PSReadLine控制。 PSReadLine的默认编辑模式是Windows样式,其中Ctrl-D是未绑定的。
将编辑模式设置为Emacs
Set-PSReadlineOption -EditMode Emacs
或绑定键
Set-PSReadLineKeyHandler -Key 'Ctrl+d' -Function DeleteCharOrExit
答案 5 :(得分:1)
您可以将PSReadline
设置为emacs
模式,它不仅会以^D
退出,您还可以以^A
到行首,结束^E
将此包含在您的个人资料中:
Set-PSReadlineOption -EditMode Emacs
我正在使用cmder
,它使用ConEmu
,对于这种情况,请在profile.ps1
中找到<appdir>/vendor/
,然后可以将其添加到该文件中。
否则,您可以将powershell
加载到默认位置。 One of tutorials HERE.