Я работаю на Arch Linux (Manjaro), но начинаю изучать Powershell. Я установил powershell из AUR с помощью yay -S powershell
. Однако при использовании powershell ( pwsh
) я обнаружил, что сочетания клавиш не работают. Нажатие вверх/вниз не просматривает историю команд, а нажатие TAB
и ctrl-space
не запускает автодополнение по табуляции.
Я использую alacritty с zsh. Однако я также тестировал его с xterm pwsh
и та же проблема там, поэтому я считаю, что эмулятор терминала и родительская оболочканетпричину, и что мне нужно настроить привязки клавиш самостоятельно.
Как настроить основные сочетания клавиш PowerShell?
решение1
Связывание клавиш PowerShell контролируется модулем PSReadLine
, который поставляется вместе с ним. Модуль предоставляет различные функции, такие как подсветка синтаксиса, хороший многострочный интерфейс, история и многое другое (см.:https://github.com/PowerShell/PSReadLine).
Вам нужны ключевые обработчики:
PS> Set-PSReadLineKeyHandler -Key Tab -Function Complete
Обязательно ознакомьтесь с их документацией для получения полного обзора поддерживаемых параметров конфигурации:
PS> help about_PSReadLine
# Or list the key current handlers and options:
PS> Get-PSReadLineKeyHandler
PS> Get-PSReadLineOption
Пример конфигурации можно найти в их репозитории git:https://github.com/PowerShell/PSReadLine/blob/master/PSReadLine/SamplePSReadLineProfile.ps1. Все настройки PSReadline необходимо добавить в ваш профиль PowerShell, чтобы сохранить их между сеансами:
PS> echo $PROFILE
/Users/megamorf/.config/powershell/Microsoft.PowerShell_profile.ps1
Вот что я обычно имею в своем профиле PowerShell:
Set-PSReadLineOption -EditMode Emacs -BellStyle None
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
Set-PSReadlineKeyHandler -Key Ctrl+Shift+P `
-BriefDescription CopyPathToClipboard `
-LongDescription "Copies the current path to the clipboard" `
-ScriptBlock { (Resolve-Path -LiteralPath $pwd).ProviderPath.Trim() | Set-Clipboard }