Этот модуль заменяет возможности редактирования командной строки PowerShell для версий 3 и выше. Он обеспечивает:
Предполагается, что «готовый» опыт будет хорошо знаком пользователям PowerShell — вам не нужно будет изучать какие-либо новые нажатия клавиш.
Несколько хороших ресурсов о PSReadLine
:
PSReadLine
.PSReadLine
.PSReadLine
по вашему вкусу. Существует несколько способов установки PSReadLine
.
Для установки последней предварительной версии PSReadLine
вам понадобится версия PowerShellGet
1.6.0
или более поздняя.
Windows PowerShell 5.1 поставляется с более старой версией PowerShellGet
, которая не поддерживает установку предварительных модулей, поэтому пользователям Windows PowerShell необходимо установить последнюю версию PowerShellGet
(если еще нет), выполнив следующие команды из сеанса Windows PowerShell с повышенными привилегиями:
Install-Module - Name PowerShellGet - Force
Exit
После установки PowerShellGet
вы можете получить последнюю предварительную версию PSReadLine
, запустив
Install-Module PSReadLine - AllowPrerelease - Force
Если вы хотите получить только последнюю стабильную версию, запустите:
Install-Module PSReadLine
[!NOTE] Предварительные версии будут иметь новые функции и исправления ошибок, но могут также содержать новые проблемы.
Если вы используете Windows PowerShell в Windows 10 или PowerShell 6+, PSReadLine
уже установлен. Windows PowerShell в последней версии Windows 10 имеет PSReadLine
версии 2.0.0-beta2
. Версии PowerShell 6+ содержат более новые предварительные версии PSReadLine
.
В предварительной версии PowerShellGet для PowerShell V3/V4 загрузка с GitHub устарела. Мы не намерены обновлять выпуски на GitHub и можем в какой-то момент полностью удалить выпуск из GitHub.
Если вы используете версии Windows PowerShell V5 или V5.1 или версии PowerShell 6+, все готово и можно пропустить этот раздел.
В противном случае вам необходимо отредактировать свой профиль, чтобы импортировать модуль. Обычно используются два файла профиля, и инструкции для каждого из них немного различаются. Файл C:Users[User]DocumentsWindowsPowerShellprofile.ps1
используется для всех хостов (например, ISE
и powershell.exe
). Если у вас уже есть этот файл, то вам следует добавить следующее:
if ( $host .Name -eq ' ConsoleHost ' )
{
Import-Module PSReadLine
}
Альтернативно файл C:Users[User]DocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1
предназначен только для powershell.exe
. Используя этот файл, вы можете просто добавить:
Import-Module PSReadLine
В любом случае вы можете создать соответствующий файл, если у вас его еще нет.
При выполнении одной из предложенных ниже команд обязательно закройте все экземпляры powershell.exe
, pwsh.exe
или pwsh
, включая те, которые открыты в терминалах VSCode
.
Затем, чтобы убедиться, что PSReadLine
не загружен:
cmd.exe
, powershell_ise.exe
или с помощью ярлыка Win+R
;bash
или zsh
). Если вы используете версию PSReadLine
, поставляемую с Windows PowerShell, вам необходимо запустить: powershell -noprofile -command "Install-Module PSReadLine -Force -SkipPublisherCheck -AllowPrerelease"
. Примечание. Перед запуском этой команды вам необходимо убедиться, что PowershellGet обновлен.
Если вы используете версию PSReadLine
, поставляемую с версиями PowerShell 6+, вам необходимо запустить: <path-to-pwsh-executable> -noprofile -command "Install-Module PSReadLine -Force -SkipPublisherCheck -AllowPrerelease"
.
Если вы сами установили PSReadLine
из галереи PowerShell, вы можете просто запустить: powershell -noprofile -command "Update-Module PSReadLine -AllowPrerelease"
или <path-to-pwsh-executable> -noprofile -command "Update-Module PSReadLine -AllowPrerelease"
в зависимости от используемой версии PowerShell.
Если вы получаете ошибку типа:
Remove-Item : Cannot remove item
C:Users{yourName}DocumentsWindowsPowerShellModulesPSReadLineMicrosoft.PowerShell.PSReadLine.dll: Access to the path
'C:Users{yourName}DocumentsWindowsPowerShellModulesPSReadLineMicrosoft.PowerShell.PSReadLine.dll' is denied.
или предупреждение типа:
WARNING: The version '2.0.0' of module 'PSReadLine' is currently in use. Retry the operation after closing the applications.
Тогда вы не уничтожили все процессы, загружавшие PSReadLine
.
Чтобы начать использовать, просто импортируйте модуль:
Import-Module PSReadLine
Чтобы использовать привязки клавиш Emacs, вы можете использовать:
Set-PSReadLineOption - EditMode Emacs
Чтобы просмотреть текущие привязки клавиш:
Get-PSReadLineKeyHandler
Существует множество параметров конфигурации, см. параметры Set-PSReadLineOption
. PSReadLine
содержит справку по своим командлетам, а также раздел about_PSReadLine
— более подробную информацию см. в этих разделах.
Чтобы установить собственные сочетания клавиш, используйте командлет Set-PSReadLineKeyHandler
. Например, чтобы лучше понять историю, попробуйте:
Set-PSReadLineKeyHandler - Key UpArrow - Function HistorySearchBackward
Set-PSReadLineKeyHandler - Key DownArrow - Function HistorySearchForward
С этими привязками стрелки вверх/вниз будут работать как PowerShell/cmd, если текущая командная строка пуста. Однако если вы ввели какой-либо текст, он будет искать в истории команды, которые начинаются с введенного в данный момент текста.
Чтобы включить завершение стиля bash без использования режима Emacs, вы можете использовать:
Set-PSReadLineKeyHandler - Key Tab - Function Complete
Вот более интересный пример того, что возможно:
Set-PSReadLineKeyHandler - Chord ' " ' , " ' " `
- BriefDescription SmartInsertQuote `
- LongDescription " Insert paired quotes if not already on a quote " `
- ScriptBlock {
param ( $key , $arg )
$line = $null
$cursor = $null
[ Microsoft.PowerShell.PSConsoleReadLine ]::GetBufferState([ ref ] $line , [ ref ] $cursor )
if ( $line .Length -gt $cursor -and $line [ $cursor ] -eq $key .KeyChar ) {
# Just move the cursor
[ Microsoft.PowerShell.PSConsoleReadLine ]::SetCursorPosition( $cursor + 1 )
}
else {
# Insert matching quotes, move cursor to be in between the quotes
[ Microsoft.PowerShell.PSConsoleReadLine ]::Insert( " $ ( $key .KeyChar ) " * 2 )
[ Microsoft.PowerShell.PSConsoleReadLine ]::GetBufferState([ ref ] $line , [ ref ] $cursor )
[ Microsoft.PowerShell.PSConsoleReadLine ]::SetCursorPosition( $cursor - 1 )
}
}
В этом примере, когда вы вводите одинарную или двойную кавычку, могут произойти две вещи. Если символ, следующий за курсором, не является введенной кавычкой, то вставляется совпадающая пара кавычек, а курсор помещается внутри совпадающих кавычек. Если символ, следующий за курсором, является введенной кавычкой, курсор просто перемещается за кавычку, ничего не вставляя. Если вы используете Resharper или другой умный редактор, этот опыт будет вам знаком.
Обратите внимание, что обработчик, написанный таким образом, правильно обрабатывает отмену — обе кавычки будут отменены одной отменой.
Образец файла профиля содержит множество отличных примеров, которые стоит проверить. Этот файл включается при установке PSReadLine
.
Ознакомьтесь с общедоступными методами [Microsoft.PowerShell.PSConsoleReadLine]
чтобы узнать, какие еще встроенные функции вы можете изменить.
Если вы хотите изменить командную строку каким-либо нереализованным способом в вашей пользовательской привязке клавиш, вы можете использовать методы:
[ Microsoft.PowerShell.PSConsoleReadLine ]::GetBufferState
[ Microsoft.PowerShell.PSConsoleReadLine ]::Insert
[ Microsoft.PowerShell.PSConsoleReadLine ]::Replace
[ Microsoft.PowerShell.PSConsoleReadLine ]::SetCursorPosition
Пожалуйста, ознакомьтесь с Руководством по участию, чтобы узнать, как разрабатывать и вносить свой вклад.
Чтобы собрать PSReadLine
в Windows, Linux или macOS, у вас должно быть установлено следующее:
InvokeBuild
и platyPS
Сценарий сборки build.ps1
можно использовать для начальной загрузки, сборки и тестирования проекта.
./build.ps1 -Bootstrap
./build.ps1 -Configuration Debug -Framework net462
./build.ps1 -Configuration Debug -Framework netcoreapp2.1
./build.ps1 -Test -Configuration Debug -Framework net462
./build.ps1 -Test -Configuration Debug -Framework netcoreapp2.1
После сборки созданные артефакты можно найти по адресу <your-local-repo-root>/bin/Debug
. Чтобы изолировать импортированный модуль от локально созданного, обязательно запустите pwsh -NonInteractive -NoProfile
, чтобы не загружать автоматически установленный модуль PSReadLine по умолчанию. Затем загрузите локально созданный модуль PSReadLine с помощью Import-Module <your-local-repo-root>/bin/Debug/PSReadLine/PSReadLine.psd1
.
Журнал изменений доступен здесь.
PSReadLine лицензируется по лицензии BSD с двумя пунктами.
Пожалуйста, ознакомьтесь с нашим Кодексом поведения, прежде чем участвовать в этом проекте.
По любым вопросам безопасности ознакомьтесь с нашей Политикой безопасности.