Il est possible de faire autocomplétion dans le travail comme dans Powershell bash?

19

J'adore Powershell, mais provenant d'un fond Linux il y a quelques petites choses qui me agace vraiment. Comme par exemple comment fonctionne l'auto complétion par défaut.

Par exemple: Get-PS se développe pour « Get-PSBreakpoint » qui est la première commande correspondante. En bash s'il n'y a qu'une seule commande bash correspondant sera étendu à la commande correspondante. S'il y a plusieurs onglet frapper une fois ne rien, onglet double tapotement affichera une liste de commandes correspondant, mais pas en expansion. Y at-il un moyen de faire Powershell se comporter comme ça?

Et une autre chose, si je l'ai écrit une ligne, et déplace le retardataire à une commande antérieure (marqueur est où le ^ est):

"Get-PSS ^ | Remove-PSSession" auto complète pour "Get-PSSession ^", en supprimant toutes les commandes de fuite. En bash les commandes de fuite seraient toujours là pas affecté. Y at-il un moyen de faire Powershell ne pas supprimer les commandes de fuite au moment de remplir auto?

Un bonus serait d'obtenir CTRL + L pour effacer l'écran. CTRL + A pour aller au début de la ligne, et CTRL + E pour aller à la fin de la ligne.

Peter Moberg
la source
J'ai posté une réponse à votre question, mais le plus drôle, c'est que je suis arrivé sur cette question parce que je cherche l'exact opposé ... Je veux l'achèvement du style PowerShell en bash :)
Robert S Ciaccio
La finition de style PowerShell est disponible en bash - recherchez la fonction menu-complete
Jason Shirk
Heureusement, nous avons bash sur Windows 10 maintenant.
byxor

Réponses:

11

Découvrez PSReadline .

De l'article:

Ce module remplace l'expérience d'édition de ligne de commande dans PowerShell.exe. Il offre:

  • Coloration de la syntaxe
  • Notification d'erreur de syntaxe simple
  • Une bonne expérience multi-lignes (montage et historique)
  • Raccourcis clavier personnalisables
  • Modes Cmd et emacs (aucun des deux n'est complètement implémenté, mais les deux sont utilisables)
  • Nombreuses options de configuration
  • Achèvement du style Bash (facultatif en mode Cmd, par défaut en mode Emacs)
  • Recherche interactive dans l'historique de style Bash / zsh (CTRL-R)
  • Emacs tire / tuer l'anneau
  • Mouvement et mise à mort basés sur des jetons PowerShell
  • Défaire refaire
  • Sauvegarde automatique de l'historique, y compris le partage de l'historique entre les sessions en direct
  • "Menu" complétion (un peu comme Intellisense, sélectionnez complétion avec des flèches) via Ctrl + Espace

Je l'utilise quotidiennement!

David Mohundro
la source
4
Une fois que vous avez installé PSReadLine, vous devez activer le remplissage par des onglets de style bash en ajoutant cela à votre profil:Set-PSReadlineKeyHandler -Key Tab -Function Complete
brianpeiris
3
PSReadLine est maintenant installé par défaut sous Windows 10. Il vous suffit de mettre la ligne de configuration mentionnée par @brianpeiris dans votre profil, et le tour est joué .
Don Cruickshank
Essayez d'utiliser CompleteMenuau lieu de Completepour une expérience plus bash, il vous permet d'utiliser les touches fléchées pour naviguer dans les choix
stib
3

Peut-être devriez-vous jeter un coup d’œil à Powertab , une extension personnalisable des onglets PowerShell.

harrymc
la source
2
Merci! Powertab améliore vraiment l’expansion des onglets. Reste que le problème complétant quelque chose qui ne se trouve pas à la fin de la commande est là.
Peter Moberg
2

salut peter appuyez simplement sur F8 pour quelque chose comme speedearchearch. Il se termine par les commandes que vous avez exécutées précédemment et qui commencent par ce que vous avez dans la ligne. Le problème avec la suppression de la fin est ennuyeux, je écris une suggestion dans Connect concernant le même problème. À l’époque principale, vous pourriez utiliser Powershell ISE, qui se comporte un peu mieux (ne supprimez pas les caractères de fin).

mjsr
la source
2

L'ancien sous-système command.exe est toujours impliqué dans PowerShell et impose de nombreux comportements déplaisants. Mais à partir de PowerShell v3, l’interface utilisateur graphique (PowerShell ISE) est désormais utilisable et inclut une expérience de finition + une colorisation beaucoup plus moderne.

entrez la description de l'image ici

Jay Bazuzi
la source
2

PowerShell utilise les mêmes fonctionnalités de la console que la vénérable invite de commande; vous avez donc l'habitude Home / End, et:

  • F3 pour faire apparaître la commande précédente
  • F1 copier un seul caractère de la commande précédente
  • F7 fenêtre d'historique popup

... mais il n'y a aucune installation pour montrer toutes les complétions possibles, autant que je sache.

njd
la source
C'est encore très limitant comparé au bon vieux bash. Par exemple, il est vraiment génial de pouvoir taper ctrl + r (recherche rapide) dans bash et de commencer à taper et une commande précédente correspondante s'affichera.
Peter Moberg
1

Powershell standard utilise cmd comme fenêtre d'invite de commande. C'est pourquoi il a un héritage considérable (les programmes reposent sur le comportement de l'ancienne cmd depuis des siècles) qui ne peut être modifié en raison de la comparabilité en arrière.

Je vous recommande d'utiliser powershell_ise au lieu de powershell (il est inclus dans le bundle powershell standard). La version 3.0 (ne pas sûr de la précédente) supporte Intellisense à partir de la boîte. Ceci est très proche du style d'achèvement bash. Appuyez simplement sur Ctrl + Espace au lieu de Tab. Je rencontre des problèmes avec les finitions personnalisées sur PowerTab, mais Intellisense fonctionne très bien avec cela. Powershell_ise préserve également les commandes de fin, utilise le mode de sélection normal, prend en charge les touches Ctrl + C, Ctrl + V, Ctrl + A pour la commande de sélection, afin que Ctrl + A saute en début de ligne, Ctrl + A /Fin).

xvorsx
la source
0

PowerShell utilise son propre analyseur syntaxique pour les commandes. Il s’agit donc, dans un sens, d’un shell différent de celui de cmd.exe, même s’ils partagent le même terminal (fenêtre graphique).

En raison de cette différence, PowerShell vous permet de remplacer la fonctionnalité de complétion par la tabulation par votre propre fonction. Je n'ai pas eu le temps de m'y prendre moi-même, mais vous remplacez fondamentalement la fonction tabexpansiondans votre profil, de la même manière que vous pouvez remplacer la promptfonction.

J'ai trouvé cet article , rédigé par Lee Holmes (auteur du livre de recettes impressionnant Windows PowerShell ), qui décrit un remplacement de tabexpansion très similaire à ce que vous recherchez. Vous pouvez probablement le modifier pour vous donner exactement ce que vous voulez.

Robert S Ciaccio
la source