Equivalente de bash Ctrl-r en PowerShell

19

¿Alguien sabe de una manera de tener la función de búsqueda de comandos hacia atrás de bash [Ctrl-r](y [Ctrl-o]) que son tan útiles, en Windows PowerShell?

C-res una arrow upmanipulación de la historia más poderosa , es como la de emacs C-ren que busca hacia atrás dentro de los comandos que ingresó anteriormente. Luego C-oejecuta ese comando e inmediatamente coloca en la línea el siguiente comando después de eso. Para que pueda repetir series de comandos pasados ​​de manera eficiente. También busca un historial guardado, no un historial de sesión. ( ~/.bash_historyarchivo). Lo cual es infinitamente útil.

Gracias.

ps: como beneficio adicional, la finalización de la pestaña que no funciona por ciclos también sería impresionante.

v.oddou
fuente
¿Qué hace ctrl O que quieres replicar? Más información siempre es buena ...
Austin T French
Sí,
edité
2
No creo que esta característica sea compatible. PowerShell 3 tiene un gancho llamado PSConsoleHostReadlineque podría ser útil. Un buen lugar para comenzar sería usar PSReadLine , que usa ese gancho. PSReadLine no es compatible con ctrl-o, pero sí es compatible con ctrl-r (supuestamente, no funcionó para mí). Puedo echar un vistazo a la implementación de Ctrl-O durante Navidad porque suena útil.
dangph
2
Ah, PSReadLine, esta parece ser mi respuesta, deberías publicarla como respuesta. no tiene Co pero tiene Cr, que es lo más importante. También tiene el ajuste de finalización de pestañas que quería en bonificación.
v.oddou
2
PSReadline autor aquí - @ v.oddou - Ctrl + K debe estar vinculado a KillLine en modo Emacs. Ctrl + R debería funcionar sin escribir primero algo. Me complace agregar Ctrl + O: siéntase libre de abrir un problema en github.
Jason Shirk

Respuestas:

15

Escriba las primeras letras del comando y presione F8.

Alternativamente, puede presionar F7y escribir las primeras letras.

Más detalles: http://technet.microsoft.com/en-us/magazine/ff678293.aspx

georgik
fuente
F7 no hace nada ...
Daniel K.
¿Podría proporcionar más información? Puede ser que pueda ser útil para otros. ¿Qué versión de Powershell y qué versión de Windows? El Powershell predeterminado es bastante limitado. Es mejor usar MobaXterm o ConEmuMaximus 5 para mejorar la
experiencia de usuario
@CatBoss F7 funciona en cmd
phuclv
1
@ LưuVĩnhPhúc, entonces la respuesta necesita decirlo, porque la pregunta es sobre Powershell ...
Daniel K.
Vea la respuesta a continuación: no pierda su tiempo con F8 si tiene Powershell 5+
Nicholas DiPiazza
6

WMF 5.0 RTM , que incluye Windows PowerShell 5 , ahora admite la misma función de búsqueda de comando inverso de bash CTRL+R. He estado usando esto en Windows 10 Anniversary Edition, y mi memoria muscular bash está muy feliz.

El soporte en realidad proviene del módulo PowerShell PSReadLine, que veo fue mencionado en algunos de los comentarios de la pregunta. Lo bueno es que PSReadLine ahora parece estar incluido en la instalación base de WMF 5.0 , al menos en Windows 10.

Si está ejecutando PowerShell 3 o posterior, también puede instalar PSReadLine y obtener la función de búsqueda del historial.

Nota: No he descubierto cómo hacer que esto funcione en ISE, ya que CTRL+Restá asignado a otra cosa (Mostrar / Ocultar Panel de Script).

Lantrix
fuente
4

Para manipular su historial, puede usar los cmdlets de historial, enumérelos con este comando:

Get-Command *-history

La búsqueda de su historial se realiza de esta manera, no dude en hacer una función para acortarlo:

Get-history | Select-String "command"

function f ($Name) { Get-history | Select-String $name }
nohwnd
fuente