Подтвердить что ты не робот

Используйте CTRL + D для выхода и CTRL + L в cls в консоли Powershell

Я пытаюсь сделать

CTRL + D - выйти из консоли Powershell

и

CTRL + L - очистить экран

как в bash.

До сих пор я видел, что мы можем определить

function ^D {exit}

но это означает, что я должен сделать CTRL + D, а затем нажать Enter для его работы.

Кроме того, он даже не позволяет мне определять

function ^L {exit}

Можно ли добавить эти привязки клавиш в консоль Powershell по умолчанию?

4b9b3361

Ответ 1

Существует новая библиотека PSReadline для Powershell v3.0, которая эмулирует завершение вкладки GNU Bash и привязки клавиш. Даже CTRL + R для обратного инкрементного поиска. Именно то, что я хотел.

Ответ 2

Если вы не против полагаться на внешнюю программу, вы можете сделать следующее с помощью AutoHotKey:

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

Вышеуказанное будет работать с консолью PowerShell или CMD. В противном случае единственное, что я могу придумать, - это обработать магию P/Invoke с помощью SetWindowsHookEx.

Изменить: Исправлена ​​ошибка AutoHotkey script, чтобы передать сочетания клавиш другим программам.

Ответ 3

Существует также оснастка 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) }

Ответ 4

Другая альтернатива: для 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
}

Ответ 5

Вы можете установить режим PSReadline в emacs, он не только выйдет с помощью ^D, вы сможете перейти к началу строки с помощью ^A, конца строки с помощью ^E

Включите это в свой профиль: Set-PSReadlineOption -EditMode Emacs

Я использую cmder который использует ConEmu, find profile.ps1 с <appdir>/vendor/ для этого случая, и вы можете добавить в этот файл.

В противном случае вы можете добавить к местам по умолчанию, где powershell загружает его. Один из учебников ЗДЕСЬ.

Ответ 6

Старый вопрос, но с PowerShell 5.1:

Set-PSReadlineKeyHandler -Key ctrl+d -Function ViExit