Acceso al historial de PowerShell con la flecha hacia arriba

Recientemente cambié a PowerShell desde que Cygwin bash comenzó a darme errores de compilación sin sentido cuando usaba maven. Encontré cómo guardar y restaurar mi historial de comandos en (https://stackoverflow.com/questions/9259723/is-there-a-windows-shell-tool-can-keep-history), que parece funcionar (el uso de "Historial" mostrará los comandos recientes después de un inicio limpio).

Lo que parece que no puedo hacer es acceder a este historial con la flecha hacia arriba como lo haría si el comando se usara en la sesión actual.

¿Alguna idea?

preguntado el 12 de junio de 12 a las 10:06

¿Está saliendo de la sesión de PS y reiniciando todo de nuevo? -

Me temo que lo que preguntas no existe. Si no sale de la sesión, la funcionalidad de la flecha hacia arriba sale de la caja como en cmd.exe también. -

4 Respuestas

Sugeriría acabar con este viejo hábito (lo sé, mueren duro) y usar la función específica de PowerShell que está diseñada para eso. De hecho, es bastante impresionante. Esto es #*[pestaña], hay 2 opciones aquí (pestaña entre paréntesis ([pestaña]) significa que se debe presionar el botón de pestaña):

#pattern_from_command[tab] 

-> Powershell recorre todos los comandos del historial que contienen "pattern_from_command".

-> EG: En Powershell: escriba #echo, presione tabulador -> Powershell recorre todos los comandos en el historial que contienen "eco" (por supuesto, si los hay).

#<id>[tab] 

-> Powershell completa el comando con id .

-> EG: En Powershell: escriba #3, presione tabulador -> Powershell escribe el tercer (3) comando en el historial en la línea de comando (aunque no lo ejecuta directamente, solo presione enter para ejecutarlo).

Sé que no es lo mismo que harías en bash, pero creo que vale la pena intentarlo y acostumbrarte.

Respondido el 20 de Septiembre de 21 a las 13:09

Técnicamente, esta es una solución a mi problema, pero lo intentaré. ¡Gracias! - Siebe

pero necesita más pulsación de tecla y tampoco es muy conveniente. - agua neta

¡Santo cielo! Santo cielo. maldita mierda. esto es genial Como no me entere de esto. - Jorge Mauer

Pensé que sería bueno mencionar h[enter] muestra tu historia - nathan chappell

Lo siento, te doy un voto negativo por la oración "sugeriría matar este viejo hábito (lo sé, mueren duro)". Su sugerencia con la búsqueda del historial es muy útil, pero se extiende y no reemplaza la "flecha hacia arriba". Es decir, si está trabajando en un comando y está agregando más opciones, no querrá buscar una y otra vez. - directamente

A partir de octubre de 2013, esto ahora es posible utilizando el maravilloso módulo PSReadline: http://github.com/lzybkr/PSReadLine

Aún deberá guardar su historial cuando finalice su sesión de PowerShell y cargarlo en su perfil.ps1 antes de cargar PSReadline (ver http://technet.microsoft.com/en-us/library/ee156792.aspx). Puede registrar un gancho para guardar su historial cuando existe PowerShell usando un gancho como este: ¿Evento "al salir" del perfil de Powershell?. A diferencia de Vanilla PowerShell, PSReadLine permite que las teclas arriba/abajo accedan a este búfer de historial.

contestado el 23 de mayo de 17 a las 13:05

No veo esta función en PSReadline. Agrega una función de búsqueda de patrones del historial de la sesión actual a las flechas arriba/abajo, pero no une el historial guardado y el historial de la sesión actual en una sola cola mediante las teclas de flecha, a menos que no se explique, sino que se deje como un ejercicio de secuencias de comandos. . Que es lo que ha hecho microsoft. - Carlos Ross

Charles: Cierto, PSReadline aún no ha cargado el historial. Sin PSReadline, incluso si carga el historial, se carga en un búfer separado del que usan las flechas arriba/abajo; es decir, si carga su historial, PowerShell tradicional no puede acceder a él usando arriba/abajo. Con PSReadline, si carga su historial, is disponible utilizando las flechas arriba/abajo. Entonces, suponiendo que haga este "ejercicio de secuencias de comandos" de 2 líneas, PSReadline le permite obtener este comportamiento. Respuesta modificada para aclarar. - jhclark

A partir del verano de 2014, la gestión del historial ahora también es compatible con PSReadline. - jhclark

@jhclark, ¿cómo hiciste que esto funcionara? Intenté cargar el historial antes de importar PSReadline, pero aún no está disponible con las flechas arriba/abajo. - MonaLisaOverdrive

Actualización: lo descubrí. debe agregar las siguientes líneas al script de perfil y eliminar todos los comandos con Get/Add-History Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward Set-PSReadlineOption -HistorySavePath drive:\path\to\file.txt - MonaLisaOverdrive

como decir @jhclark ahora es posible

Tienes toda la documentación para la instalación en el GitHub oficial: https://github.com/PowerShell/PSReadLine

Tendrás que seguir bien todo el tutorial y prestar atención a:

  • remove -AllowPrerelease arg si tienes un error
  • agrega esta línea Import-Module 'PSReadLine' en tu perfil code $PROFILE por ejemplo para abrir su perfil conf con vscode
  • Cierre todo el shell después de instalar PSReadLine si quieres que todo funcione bien

Inicie estas dos líneas si desea que el fleche busque en el historial como en Linux porque eso es, creo, lo que la mayoría de la gente está buscando:

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward

por defecto son las combinaciones de teclas F8 y SHIFT + F8 que están configurados por defecto

Puedes ver la conf con eso:

Get-PSReadLineKeyHandler

respondido 13 mar '21, 19:03

No puedes. No hay una API para acceder al historial de un programa de consola.

Respondido el 12 de junio de 12 a las 11:06

De hecho, parece que no es posible. oh bueno, supongo que iré a depurar Cygwin entonces, o simplemente haré un lote para envolver los comandos, ya que escribir comandos de 3 líneas cada vez que arranque es un dolor total. - Siebe

También puede crear una función de PowerShell. Puedes ponerlo en tu perfil para tenerlo cada vez que inicies PS. - Joey

A partir de octubre de 2013, esto finalmente es posible utilizando el maravilloso módulo PSReadLine: github.com/lzybkr/PSReadLine (ver respuesta alternativa) - jhclark

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.