Este módulo reemplaza la experiencia de edición de línea de comandos de PowerShell para las versiones 3 y posteriores. Proporciona:
La experiencia "lista para usar" está destinada a ser muy familiar para los usuarios de PowerShell; no debería ser necesario aprender ninguna pulsación de tecla nueva.
Algunos buenos recursos sobre PSReadLine
:
PSReadLine
.PSReadLine
.PSReadLine
a su gusto. Hay varias formas de instalar PSReadLine
.
Necesitará la versión 1.6.0
o superior de PowerShellGet
para instalar la última versión preliminar de PSReadLine
.
Windows PowerShell 5.1 incluye una versión anterior de PowerShellGet
que no admite la instalación de módulos preliminares, por lo que los usuarios de Windows PowerShell deben instalar la última versión PowerShellGet
(si aún no) ejecutando los siguientes comandos desde una sesión elevada de Windows PowerShell:
Install-Module - Name PowerShellGet - Force
Exit
Después de instalar PowerShellGet
, puede obtener la última versión preliminar de PSReadLine
ejecutando
Install-Module PSReadLine - AllowPrerelease - Force
Si sólo desea obtener la última versión estable, ejecute:
Install-Module PSReadLine
[!NOTE] Las versiones preliminares tendrán características más nuevas y correcciones de errores, pero también pueden introducir nuevos problemas.
Si está utilizando Windows PowerShell en Windows 10 o PowerShell 6+, PSReadLine
ya está instalado. Windows PowerShell en la última versión de Windows 10 tiene la versión 2.0.0-beta2
de PSReadLine
. Las versiones PowerShell 6+ tienen las versiones preliminares más recientes de PSReadLine
.
Con la versión preliminar de PowerShellGet para PowerShell V3/V4, las descargas desde GitHub están obsoletas. No tenemos la intención de actualizar las versiones en GitHub y es posible que eliminemos la versión por completo de GitHub en algún momento.
Si está utilizando las versiones de Windows PowerShell V5 o V5.1, o las versiones de PowerShell 6+, está listo y puede omitir esta sección.
De lo contrario, deberá editar su perfil para importar el módulo. Hay dos archivos de perfil que se utilizan habitualmente y las instrucciones son ligeramente diferentes para cada uno. El archivo C:Users[User]DocumentsWindowsPowerShellprofile.ps1
se utiliza para todos los hosts (por ejemplo, ISE
y powershell.exe
). Si ya tienes este archivo, entonces debes agregar lo siguiente:
if ( $host .Name -eq ' ConsoleHost ' )
{
Import-Module PSReadLine
}
Alternativamente, el archivo C:Users[User]DocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1
es solo para powershell.exe
. Usando este archivo, simplemente puede agregar:
Import-Module PSReadLine
En cualquier caso, puede crear el archivo apropiado si aún no tiene uno.
Cuando ejecute uno de los comandos sugeridos a continuación, asegúrese de salir de todas las instancias de powershell.exe
, pwsh.exe
o pwsh
, incluidas las abiertas en terminales VSCode
.
Luego, para asegurarse de que PSReadLine
no esté cargado:
cmd.exe
, powershell_ise.exe
o mediante el acceso directo Win+R
;bash
o zsh
). Si está utilizando la versión de PSReadLine
que se incluye con Windows PowerShell, debe ejecutar: powershell -noprofile -command "Install-Module PSReadLine -Force -SkipPublisherCheck -AllowPrerelease"
. Nota: deberá asegurarse de que PowershellGet esté actualizado antes de ejecutar este comando.
Si está utilizando la versión de PSReadLine
que se incluye con las versiones PowerShell 6+, debe ejecutar: <path-to-pwsh-executable> -noprofile -command "Install-Module PSReadLine -Force -SkipPublisherCheck -AllowPrerelease"
.
Si ha instalado PSReadLine
usted mismo desde la Galería de PowerShell, simplemente puede ejecutar: powershell -noprofile -command "Update-Module PSReadLine -AllowPrerelease"
o <path-to-pwsh-executable> -noprofile -command "Update-Module PSReadLine -AllowPrerelease"
, según la versión de PowerShell que esté utilizando.
Si recibe un error como:
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.
o una advertencia como:
WARNING: The version '2.0.0' of module 'PSReadLine' is currently in use. Retry the operation after closing the applications.
Entonces no mataste todos los procesos que cargaron PSReadLine
.
Para comenzar a usar, simplemente importe el módulo:
Import-Module PSReadLine
Para usar combinaciones de teclas de Emacs, puede usar:
Set-PSReadLineOption - EditMode Emacs
Para ver las combinaciones de teclas actuales:
Get-PSReadLineKeyHandler
Hay muchas opciones de configuración, consulte las opciones para Set-PSReadLineOption
. PSReadLine
tiene ayuda para sus cmdlets, así como un tema about_PSReadLine
; consulte esos temas para obtener ayuda más detallada.
Para configurar sus propias combinaciones de teclas personalizadas, utilice el cmdlet Set-PSReadLineKeyHandler
. Por ejemplo, para una mejor experiencia histórica, intente:
Set-PSReadLineKeyHandler - Key UpArrow - Function HistorySearchBackward
Set-PSReadLineKeyHandler - Key DownArrow - Function HistorySearchForward
Con estos enlaces, la flecha hacia arriba/hacia abajo funcionará como PowerShell/cmd si la línea de comando actual está en blanco. Sin embargo, si ha ingresado algún texto, buscará en el historial comandos que comiencen con el texto ingresado actualmente.
Para habilitar la finalización del estilo bash sin usar el modo Emacs, puede usar:
Set-PSReadLineKeyHandler - Key Tab - Function Complete
Aquí hay un ejemplo más interesante de lo que es posible:
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 )
}
}
En este ejemplo, cuando escribe comillas simples o dobles, pueden suceder dos cosas. Si el carácter que sigue al cursor no es la cita escrita, se inserta un par de comillas coincidentes y el cursor se coloca dentro de las comillas coincidentes. Si el carácter que sigue al cursor es la cita escrita, el cursor simplemente se mueve más allá de la cita sin insertar nada. Si utiliza Resharper u otro editor inteligente, esta experiencia le resultará familiar.
Tenga en cuenta que con el controlador escrito de esta manera, maneja correctamente Deshacer: ambas comillas se desharán con una sola operación de deshacer.
El archivo de perfil de muestra tiene un montón de excelentes ejemplos para revisar. Este archivo se incluye cuando se instala PSReadLine
.
Consulte los métodos públicos de [Microsoft.PowerShell.PSConsoleReadLine]
para ver qué otras funciones integradas puede modificar.
Si desea cambiar la línea de comando de alguna manera no implementada en su combinación de teclas personalizada, puede usar los métodos:
[ Microsoft.PowerShell.PSConsoleReadLine ]::GetBufferState
[ Microsoft.PowerShell.PSConsoleReadLine ]::Insert
[ Microsoft.PowerShell.PSConsoleReadLine ]::Replace
[ Microsoft.PowerShell.PSConsoleReadLine ]::SetCursorPosition
Consulte la Guía de contribución para saber cómo desarrollar y contribuir.
Para compilar PSReadLine
en Windows, Linux o macOS, debe tener instalado lo siguiente:
InvokeBuild
y platyPS
El script de compilación build.ps1
se puede utilizar para iniciar, compilar y probar el proyecto.
./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
Después de la compilación, los artefactos producidos se pueden encontrar en <your-local-repo-root>/bin/Debug
. Para aislar su módulo importado del creado localmente, asegúrese de ejecutar pwsh -NonInteractive -NoProfile
para no cargar automáticamente el módulo PSReadLine predeterminado instalado. Luego, cargue el módulo PSReadLine creado localmente mediante Import-Module <your-local-repo-root>/bin/Debug/PSReadLine/PSReadLine.psd1
.
El registro de cambios está disponible aquí.
PSReadLine tiene la licencia BSD de 2 cláusulas.
Consulte nuestro Código de conducta antes de participar en este proyecto.
Para cualquier problema de seguridad, consulte nuestra Política de seguridad.