So funktioniert die Vervollständigung von PowerShell-Registerkarten wie Bash


104

Angenommen, ich habe die folgenden Dateien in meinem aktuellen Verzeichnis:

buildBar.bat
buildFoo.bat
buildHouse.bat

Und ich gebe Folgendes an meiner Eingabeaufforderung ein ./buund dann TAB.

  • In Bash wird es erweitert auf ./build

  • In PowerShell wird es auf ./buildBar.batdas erste Element in der Liste erweitert.

  • In Cmd ist das Verhalten dasselbe wie in PowerShell.

Ich bevorzuge das Bash-Verhalten. Gibt es eine Möglichkeit, PowerShell dazu zu bringen, sich wie Bash zu verhalten?


2
Sie könnten Cygwins verwenden bash;)
Blender

12
Ja, das habe ich in den letzten zehn Jahren getan, aber ich versuche, auf PowerShell umzusteigen, weil ich auf anderen als meinen eigenen Systemen, auf denen Cygwin nicht ist, über die Befehlszeile fliegen möchte Eingerichtet.
RobSiklos

Antworten:


172

Zu den neuen Versionen von PowerShell gehört PSReadline, mit dem dies möglich ist:

Set-PSReadlineKeyHandler -Key Tab -Function Complete

Fügen Sie diesen Befehl in C: \ Benutzer \ [Benutzer] \ Dokumente \ WindowsPowerShell \ profile.ps1 ein, um ihn dauerhaft zu machen.


24
MenuCompleteAnstatt Completeeher wie Bash zu sein, können Sie mit den Pfeiltasten aus den verfügbaren Optionen
auswählen

1
@LeBleu Das ist komisch, weil mein brandneuer Windows 10-Computer mit PSReadline geliefert wurde. Ich dachte, das Modul sei von Microsoft.
Franklin Yu

7
Übrigens, wenn die Datei profile.ps1 auf Ihrem Computer nicht vorhanden ist, können Sie eine mit einem Befehl generierennew-item $profile -itemtype file -force
Reinis

1
Es ist sehr wahrscheinlich, dass Ihre Maschine nicht haben C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1.Sie müssen tatsächlich laufennew-item $profile -itemtype file -force
RF

1
Das ist eine wirklich unbequeme Schreibweise für touch:-(
SamB


14

Schauen Sie hier, nicht wirklich Ihre Desiderata:

PowerTab

Aber ich denke, es ist die beste Funktion zur Tab-Erweiterung für die PowerShell-Konsole !!!


Interessant. Wenn es eine Möglichkeit gibt, so etwas zu tun, dann scheint es durchaus möglich zu sein, dass die Erweiterung wie in Bash funktioniert. Ich bin jedoch weit davon entfernt, ein Experte für PowerShell zu sein, daher fehlt möglicherweise etwas.
Andriy M

Sicher! Beginnen Sie mit dem Studium des Codes des PowerTab-Moduls, um Ihre Erweiterungsanforderungen zu erfüllen. PowerTab bietet jedoch Erweiterungen für fast alle Befehle, wmi, comobject und Assembly mit einer einfachen Auswahl!
CB.

6

tab Vervollständigt nur den Befehlsnamen, nicht die vorherigen Argumente / Parameter.

Um auch den vollständigen Befehl mit Argumenten aus dem Verlauf automatisch zu vervollständigen, legen Sie die folgende Tastenkombination fest.

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

Geben Sie nun einige Zeichen des Befehlsnamens ein und verwenden Sie den Aufwärts- / Abwärtspfeil, um diesen Befehl (mit Argumenten) aus dem Verlauf automatisch zu vervollständigen.

Echtzeit-Sparer.


5

Ändern Sie die TabExpansion-Funktion, um das gewünschte Ergebnis zu erzielen. Denken Sie daran, dass es möglicherweise bis zum Ende abgeschlossen ist, wenn Sie die Tabulatortaste erneut drücken. Ändern Sie den neuen Vorschlag an der Stelle, an der Sie ursprünglich die Taste gedrückt haben. Ich bevorzuge das eigentliche Verhalten, ich möchte, dass die Zeile so schnell wie möglich geschrieben wird. Vergessen Sie zum Schluss nicht die Platzhaltererweiterung, zum Beispiel: bu * h [Tab] wird automatisch zu buildHouse.bat abgeschlossen


Das Ändern der TabExpansion-Funktion ist wahrscheinlich der richtige Weg, immer noch viel komplizierter als das, wonach ich gesucht habe. Ich denke, ich muss Powershell viel flüssiger beherrschen, bevor ich damit herumspielen kann.
RobSiklos

1

Mit Powershell Core können wir die PredictionSource-Eigenschaft für PSReadLine als Verlauf festlegen , um automatische Vorschläge zu erhalten. Weitere Informationen finden Sie im YouTube-Video unter https://youtu.be/I0iIZe0dUNw


1
# keep or reset to powershell default
Set-PSReadlineKeyHandler -Key Shift+Tab -Function TabCompletePrevious

# define Ctrl+Tab like default Tab behavior
Set-PSReadlineKeyHandler -Key Ctrl+Tab -Function TabCompleteNext

# define Tab like bash
Set-PSReadlineKeyHandler -Key Tab -Function Complete
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.