web-dev-qa-db-fra.com

Comment taper un caractère de tabulation dans PowerShell?

Tâche : par défaut, si vous appuyez sur la touche TAB lorsque vous êtes dans l'invite de commande Windows, les noms de fichiers sont générés, mais pas dans PowerShell. Je veux être capable de taper le caractère de tabulation en mode interactif, pas via des scripts.

Recherche : J'ai trouvé des questions similaires sur ce site et via la recherche Google. Les solutions trouvées s'adressaient à bash (Mac) ou iterm (Linux), ou suggéraient de passer à un autre programme tel que TweakUI . Ma question concerne spécifiquement Windows PowerShell ou Invite de commandes.

Clarification : Un simple test pour savoir si votre réponse fonctionne pour ma question consiste à taper echo "1 TAB-method 2" dans PS/CP, où la méthode TAB est votre suggestion pour insérer un caractère de tabulation. Si l'écho donne 1 2 (c'est-à-dire 1 suivi d'un espace de tabulation suivi de 2), c'est ce que je recherche. J'espère que ça aide, et merci à tous d'avoir pris le temps de regarder la question.

44
Hamman Samuel

Si cela vous aide, vous pouvez incorporer un caractère de tabulation dans une chaîne entre guillemets:

PS> "`t hello"
66
Shay Levy

Testez avec [char] 9, tel que:

$Tab = [char]9
Write-Output "$Tab hello"

Sortie:

     hello
11
tommymaynard

Dans l'invite de commande Windows, vous pouvez désactiver la complétion par tabulation en la lançant ainsi:

cmd.exe /f:off

Ensuite, le caractère de tabulation sera répercuté à l'écran et fonctionnera comme prévu. Vous pouvez également désactiver le caractère de complétion de tabulation ou modifier le caractère utilisé pour la complétion de tabulation en modifiant le registre.

Le cmd.exe la page d'aide l'explique:

Vous pouvez activer ou désactiver l'achèvement du nom de fichier pour un appel particulier de CMD.EXE avec le commutateur/F: ON ou/F: OFF. Vous pouvez activer ou désactiver l'achèvement de tous les appels de CMD.EXE sur une machine et/ou une session d'ouverture de session utilisateur en définissant l'une ou les deux valeurs REG_DWORD suivantes dans le registre à l'aide de REGEDIT.EXE:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar

    and/or

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar

avec la valeur hexadécimale d’un caractère de contrôle à utiliser pour une fonction particulière (0x4, par exemple, Ctrl-D et 0x6, Ctrl-F). Les paramètres spécifiques à l'utilisateur ont priorité sur les paramètres de l'appareil. Les commutateurs de ligne de commande ont priorité sur les paramètres du registre.

Si la complétion est activée avec le commutateur/F: ON, les deux caractères de contrôle utilisés sont Ctrl-D pour indiquer le nom du répertoire et Ctrl-F pour indiquer le nom du fichier. Pour désactiver un caractère d'achèvement particulier dans le registre, utilisez la valeur pour l'espace (0x20), car il ne s'agit pas d'un caractère de contrôle valide.

4
zdan

La tabulation a une signification spécifique dans PowerShell. C'est pour l'achèvement de la commande. Donc, si vous entrez "getch" puis tapez une tabulation. Cela change ce que vous avez tapé dans "GetChildItem" (ça corrige le cas, même si c'est inutile).

D'après votre question, il semble que l'achèvement de la tabulation et de la commande surchargerait la clé de tabulation. Je suis à peu près sûr que les concepteurs de PowerShell ne le voulaient pas.

1
Walter Mitty