Équivalent de Ctrl-r de bash dans PowerShell

19

Est-ce que quelqu'un connaît un moyen d'avoir la fonction de recherche de commandes en arrière de bash [Ctrl-r](et [Ctrl-o]) qui est si utile dans Windows PowerShell?

C-rest une arrow upmanipulation d'historique plus puissante , elle ressemble C-rà celle d' Emacs en ce sens qu'elle recherche en arrière dans les commandes que vous avez entrées précédemment. C-oExécute ensuite cette commande et place immédiatement sur la ligne la commande suivante après cela. Pour que vous puissiez répéter efficacement les séries de commandes passées. Il recherche également un historique enregistré, pas un historique de session. ( ~/.bash_historyfichier). Ce qui est infiniment utile.

Merci.

ps: en prime, la complétion de l'onglet ne fonctionnant pas par cycles serait également géniale.

v.oddou
la source
Que fait Ctrl O que vous souhaitez répliquer? Plus d'infos nous toujours bons ...
Austin T French
Oui, édité la question :)
v.oddou
2
Je ne pense pas que cette fonctionnalité soit prise en charge. PowerShell 3 a un crochet appelé PSConsoleHostReadlinequi pourrait être utile. Un bon point de départ serait d'utiliser PSReadLine , qui utilise ce hook. PSReadLine ne prend pas en charge ctrl-o, mais il prend en charge ctrl-r (soi-disant - cela n'a pas fonctionné pour moi). Je vais peut-être envisager d'implémenter ctrl-o à Noël car cela semble utile.
dangph
2
Ah, PSReadLine, cela semble être ma réponse, vous devriez le poster comme réponse. il n'a pas de Co mais il a du Cr qui est le plus important. Il a également le tweak de complétion de l'onglet que je voulais en bonus.
v.oddou
2
L'auteur PSReadline ici - @ v.oddou - Ctrl + K devrait être lié à KillLine en mode Emacs. Ctrl + R devrait fonctionner avec / ou sans taper quelque chose en premier. Je suis heureux d'ajouter Ctrl + O - n'hésitez pas à ouvrir un problème sur github.
Jason Shirk

Réponses:

15

Tapez les premières lettres de la commande et appuyez sur F8.

Vous pouvez également appuyer sur F7et saisir les premières lettres.

Plus de détails: http://technet.microsoft.com/en-us/magazine/ff678293.aspx

georgik
la source
F7 ne fait rien ...
Daniel K.
Pourriez-vous fournir plus d'informations? Peut-être que cela pourrait être utile pour d'autres. Quelle version de Powershell et quelle version de Windows? Le Powershell par défaut est assez limité. Il est préférable d'utiliser MobaXterm ou ConEmuMaximus 5 pour obtenir une meilleure UX
Georgik
@CatBoss F7 fonctionne en cmd
phuclv
1
@ LưuVĩnhPhúc alors la réponse doit le dire, car la question concerne Powershell ....
Daniel K.
Voir la réponse ci-dessous - ne perdez pas votre temps avec F8 si vous êtes sur PowerShell 5+
Nicholas DiPiazza
6

WMF 5.0 RTM , qui inclut Windows PowerShell 5 , prend désormais en charge la même fonction de recherche de commandes inverses que bash CTRL+R. Je l'utilise dans Windows 10 Anniversary Edition, et ma mémoire musculaire bash est très heureuse.

Le support provient en fait du module PowerShell PSReadLine dont je vois qu'il a été mentionné dans certains commentaires de la question. La bonne chose est que PSReadLine semble désormais être inclus dans l'installation WMF 5.0 de base , au moins c'est sur Windows 10.

Si vous exécutez PowerShell 3 ou une version ultérieure, vous pouvez également installer PSReadLine et obtenir la fonction de recherche d'historique.

Remarque: je n'ai pas trouvé comment obtenir ceci fonctionnant dans ISE car CTRL+Rest mappé à autre chose (montrer / cacher le volet de script).

Lantrix
la source
4

Pour manipuler votre historique, vous pouvez utiliser les applets de commande d'historique, répertoriez-les par cette commande:

Get-Command *-history

La recherche de votre historique se fait comme ceci, n'hésitez pas à faire une fonction pour la raccourcir:

Get-history | Select-String "command"

function f ($Name) { Get-history | Select-String $name }
nohwnd
la source