2011-11-25 14 views
38

Digamos que tengo los siguientes archivos en mi directorio actual:Como hacer PowerShell trabajo del tabulador como Bash

buildBar.bat 
    buildFoo.bat 
    buildHouse.bat 

Y yo escriba lo siguiente en mi línea de comandos:

./bu [TAB]

En Bash, golpeando TAB ampliaría la línea de comandos para

./build

pero en PowerShell (o incluso cmd.exe para el caso), golpeando TAB expande al primer elemento de la lista:

./buildBar.bat

Prefiero el comportamiento de Bash: ¿hay alguna manera de hacer que PowerShell se comporte de esta manera?

+2

Podría usar Cygwin's 'bash';) – Blender

+6

Sí, eso es lo que he estado haciendo durante la última década, pero estoy tratando de hacer la transición a PowerShell, porque quiero poder volar en el comando línea en otros sistemas que no sean los míos, donde Cygwin no está instalado. – RobSiklos

Respuesta

48

Las nuevas versiones de PowerShell incluyen PSReadline, que puede ser utilizado para hacer esto:

Set-PSReadlineKeyHandler -Key Tab -Function Complete 

para hacerlo permanente, poner este comando en C: \ Users \ [usuario] \ Documents \ WindowsPowerShell \ profile.ps1.

+0

Me falta la finalización en cuanto a la finalización se puede hacer con Este enfoque. Ejemplo: tener una lista de comandos "Start-Service", "Start-Job" y "Stop-Service" y escribir "S" + TAB I excepto para obtener una finalización en "St" y sin lista. –

+2

'MenuComplete' en lugar de' Completar' es más como bash, le permite usar las teclas de flecha para elegir entre las opciones disponibles – stib

+0

Esto no se incluyó en PowerShell 5.1, creo que necesita Importar módulo PSReadline o Install-Module PSReadline primero. – LeBleu

12

Echa un vistazo aquí, no es realmente su desiderata:

PowerTab

pero creo que es la mejor característica de expansión de pestaña para la consola de PowerShell !!!

+0

Interesante. Si hay una manera de hacer algo así, parece bastante posible hacer que la expansión funcione como en bash. Sin embargo, estoy lejos de ser un experto en PowerShell, por lo que me puede faltar algo. –

+0

¡Claro! Comience a estudiar el código del Módulo PowerTab para tratar de hacer sus necesidades de expansión. ¡Pero PowerTab ofrece expansiones para casi cualquier comando, wmi, comobject, assembly con una sencilla selección! –

4

Modifique la función TabExpansion para lograr lo que desea. Recuerde que tal vez se complete hasta el final si presiona tab nuevamente la nueva sugerencia modificada desde donde originalmente presionó la tecla. Realmente prefiero el comportamiento real, quiero que la línea se escriba lo más rápido posible. Finalmente, no olvide la expansión del comodín, por ejemplo: bu * h [Tab] se completa automáticamente en buildHouse.bat

+0

La modificación de la función TabExpansion es probablemente el camino a seguir, aún mucho más complicado de lo que estaba buscando. Creo que tendré que ser mucho más fluido en PowerShell antes de poder meterme con eso. – RobSiklos

14

Ahora es posible hacer que PowerShell complete el estilo BASH, utilizando PSReadline. Salida http://www.leeholmes.com/blog/2012/09/13/bash-like-tab-completion-in-powershell/

+0

muy agradable - gracias! – RobSiklos

+3

El enlace en el blogpost está roto, sin embargo, al final del día, lo lleva a [PsReadline (último compromiso en 2012)] (https://bitbucket.org/oising/psreadline/) que ha sido [bifurcado (último commit in 2013)] (https: // github.com/lzybkr/PSReadLine) – GameScripting

+5

Hoy en día puede hacer esto con un trazador de líneas, como se describe aquí: http://stackoverflow.com/a/37715242/24874 –

Cuestiones relacionadas