Ответ 1
Существует новая библиотека PSReadline
для Powershell v3.0, которая эмулирует завершение вкладки GNU Bash и привязки клавиш. Даже CTRL + R для обратного инкрементного поиска. Именно то, что я хотел.
Я пытаюсь сделать
CTRL + D - выйти из консоли Powershell
и
CTRL + L - очистить экран
как в bash.
До сих пор я видел, что мы можем определить
function ^D {exit}
но это означает, что я должен сделать CTRL + D, а затем нажать Enter для его работы.
Кроме того, он даже не позволяет мне определять
function ^L {exit}
Можно ли добавить эти привязки клавиш в консоль Powershell по умолчанию?
Существует новая библиотека PSReadline
для Powershell v3.0, которая эмулирует завершение вкладки GNU Bash и привязки клавиш. Даже CTRL + R для обратного инкрементного поиска. Именно то, что я хотел.
Если вы не против полагаться на внешнюю программу, вы можете сделать следующее с помощью AutoHotKey:
#IfWinActive ahk_class ConsoleWindowClass
^L::SendInput , {Esc}cls{Enter}
^D::SendInput , {Esc}exit{Enter}
#IfWinActive
Вышеуказанное будет работать с консолью PowerShell или CMD. В противном случае единственное, что я могу придумать, - это обработать магию P/Invoke с помощью SetWindowsHookEx
.
Изменить: Исправлена ошибка AutoHotkey script, чтобы передать сочетания клавиш другим программам.
Существует также оснастка PowerShell под названием PSEventing, которая позволит вам это сделать (см. демонстрацию на первой странице:
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) }
Другая альтернатива: для CTRL-D
у меня есть следующее в моем файле Microsoft.PowerShell_profile
(содержит символ ␄ - EOT, визуально видимый только в некоторых редакторах), вы можете ввести его, удерживая клавишу ALT
, набрав 0 0 4
на клавиатуре с некоторыми клавиатурами):
function ␄ {
# next line needed only if you have a global `cmd` setting for the CTRL-D shortcut already
& cmd /c doskey ␄ =
# replace the `exit` call with your custom exit expression eventually
& exit
}
Вы можете установить режим PSReadline
в emacs
, он не только выйдет с помощью ^D
, вы сможете перейти к началу строки с помощью ^A
, конца строки с помощью ^E
Включите это в свой профиль: Set-PSReadlineOption -EditMode Emacs
Я использую cmder
который использует ConEmu
, find profile.ps1
с <appdir>/vendor/
для этого случая, и вы можете добавить в этот файл.
В противном случае вы можете добавить к местам по умолчанию, где powershell
загружает его. Один из учебников ЗДЕСЬ.
Старый вопрос, но с PowerShell 5.1:
Set-PSReadlineKeyHandler -Key ctrl+d -Function ViExit